기존 포스트에서 GET메소드는 CRUD 에서 데이터를 Read하는것에 매핑을, POST메소드는 CRUD에서 Create하는것에 매핑이 된다고 다루었다. 그렇다면 이를 해설해 보면 GET메소드는 기존의 리소스를 읽어오는것을 의미하게 되는것이고, POST같은 경우에는 리소스를 생성하는것을 의미하게 되는것이다.
웹 클라이언트가 웹 서버에 요청을 보낼때 GET 방식과 POST방식 두가지 모두를 쓸수 있다. 그렇다면 동일한 '요청' 이라는 것을 하는데, 어떤 차이점을 가진것일까?
- GET방식
- 크게보기
1 . URL에 데이터를 포함시켜서 요청한다. 그렇기 때문에 전송하는데 있어서 길이 제한이 존재한다.(body가 빈상태로 전송)
2 . URL내에 정보가 포함되는 방식이기에 보안에 있어서 취약점 존재
3 . 캐싱이 가능하여, 빠른 로딩 속도가 가능하다.
GET방식같은 경우에는 URL에 변수를 포함시켜서 요청을 하게된다. 그렇기 때문에 웹 서버에 보낼 수 있는 데이터의 양에 있어서는 어느정도 한계가 있다. 변수를 포함시켜서 요청을 한다고 했는데, 기본적으로 URL에 쿼리스트링을 추가하여 데이터를 전송하게 된다. 기본적으로 쿼리 스트링을 보면 다음과 같은 형태를 띄게 된다.
?(key)=(value)&(key)=(value)
이와 같은 형식의 경우에, 만약 로그인을 한다고 예시를 들어보자. 그러면 분명히 웹 서버에 매개변수로는 id와 pw가 들어가게 될텐데, 그러면 URL에는
?id=(id값)&pw=(pw값)
형태로들어가기 때문에 보안상 문제에서 취약점이 들어난다.
Get방식을 이용하여 데이터를 노출시키는 경우는, 개인정보가 포함되지 않는 상황에서, 캐싱을 하여 로딩 속도를 높인다 혹은 우리가 즐겨찾기를 등록한다는 경우에서 사용한다고 예시를 들 수 있다.
- POST 방식
- 크게보기
1 . URL에 변수를 노출시키지 않은상태로 전송한다. 필요한 데이터는 모두 Body에 저장되어서 전송이 된다. 그렇기 때문에 GET과 달리 전송하는데에 있어서 길이제한이 존재하지 않는다.
2 . 보안성에 있어서 GET에 비해 더 좋다
3 . 캐싱 불가능
POST방식 같은 경우에는 데이터를 BODY에 저장하여서 전송을 하게 된다. 그렇기 때문에 POST방식으로 요청을 할 때는 Body의 데이터를 설명하는 메타데이터가 들어가야 되기 때문에, Content-Type라는 헤더필드와 BODY에 있는 데이터의 데이터 타입을 명시해 주어야 한다. 또한 URL에서 변수를 노출시키지 않기 때문에 보안성에 있어서 더 좋다고 볼 수 있다. 이의 이점으로 메세지 길이제한은 없지만 요청받는 시간인 Time Out이 존재한다. POST방식은 URL에 데이터가 노출되지 않지만 쿼리스트링 외 여러 객체 값도 전송이 가능하다.
'Back-End > Theory' 카테고리의 다른 글
웹 애플리케이션 서버 (0) | 2022.01.22 |
---|---|
URL 설계 (0) | 2020.01.13 |
HTTP Protocal (0) | 2020.01.13 |