사용자가 어떤 홈페이지로 이동하기 위해서 URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 페이지로 이동합니다.
사용자는 단순히 URL을 입력하였을 뿐이지만 서버 내부에서는 클라이언트의 요청에 응답(웹페이지로 표현)하기 위해서 처리를 해주어야 합니다.
여기서 클라이언트가 서버로 요청을 보내는 방법인 HTTP method에는 일반적으로 가장 많이 사용되는 2가지 방식이 있는데, 그것이 바로 아래에서 알아볼 GET방식과 POST방식입니다.
아래에서 이 두 방식에 대해서 비교하며 장, 단점 및 차이점에 대해서 알아보도록 하겠습니다.
GET 방식
먼저 GET방식을 알아보도록 하겠습니다. 영어 GET라는 단어는 가져오다라는 뜻을 가진 단어입니다.
단어의 뜻처럼 예를 들어 우리가 필요한 정보를 얻기 위해 도서관에서 책을 빌려 가져오는(GET)상황과 유사하게 GET은 어떠한 정보를 가져와서 조회하기 위해서 사용되는 방식입니다.
GET방식의 특징
- URL에 변수(데이터)를 포함시켜 요청한다.
- 데이터를 Header(헤더)에 포함하여 전송한다.
- URL에 데이터가 노출되어 보안에 취약하다.
- 전송하는 길이에 제한이 있다. => 한번 요청시 URL포함 255자 까지 전송하 가능하며 HTTP/1.1에서는 2048자 까지 가능
- 캐싱할 수 있다.
GET방식은 간단한 데이터를 URL에 넣도록 설계된 방식으로 데이터를 보내는 양에 한계가 있습니다.
즉 URL의 최대 길이가 정해져있기 때문에, 많은 양의 정보를 전달할 수 없으며 URL형식에 맞지 않는 파라미터 이름이나 값은 인코딩되어 전달해야 합니다.(만약 보내는 길이가 너무 긴 경우 초과데이터는 절단됩니다.)
특별히 전송하는 데이터가 없으므로 GET방식에서 Body는 보통 빈 상태로 전송이 되며, 헤더의 내용 중 Body의 데이터를 설명하는 Context-type 헤더필드도 들어가지 않습니다.
실제로 GET방식이 사용되는 예시를 들어 설명해보겠습니다.
예를 들어 우리가 어떤페이지에서 로그인을 하는 상황이라고 하고, id와 pwd를 입력한 후 엔터를 눌렀다고 칩시다.
이럴때 요청을 GET방식으로 전송하는 경우에는 [www.lks.com/login?id=admin&pw=password] 와 같은 페이지가 있다고 해봅시다.
위에서 GET방식은 ?마크를 통해 URL의 끝을 표시하고 id라는 키(key)에 대해선 admin이라는 값(value)을, pw라는 키(key)에 대해서는 password라는 값(value)를 전송하는 것을 볼 수 있습니다.
여러개의 Key와 Value를 보내는 경우에 &를 사용하여 이어주는 GET방식은 최소한의 보안유지도 하지 않기 때문에 실제 웹사이트에서 ID와 PW같은 중요한 정보 전달에 GET방식을 사용할때 개인정보가 노출되는 문제가 발생합니다.
GET방식을 사용하여 데이터를 노출시키는 경우는 개인정보가 포함되지 않는 상황에서 캐싱을 하여 속도를 높이거나 즐겨찾기를 편리하기 위해 사용되는 경우가 많습니다.
우리가 어떤 물건 A에 대해서 즐겨찾기를 추가하면 그 물건의 이름이 A라는 정보를 URL에 추가하여 즐겨찾기를 생성할 수 있는 것입니다.
- 캐싱이란?
캐싱이란 한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것입니다.
다룰 내용이 매우 많은 캐싱이기 때문에 자세한 설명은 생략
POST방식
POST방식에 대해서 알아보도록 하겠습니다.
POST라는 단어는 부치다, 제출하다 라는 뜻을 가지고 있습니다.
예를 들어 우리가 어디레 서률를 제출하는 것은 우리에 대한 정보를 제출하여(POST) 추가하기 위함입니다.
이러한 상황과 유사하게 POST방식은 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식입니다.
POST방식의 특징
- URL에 변수(데이터)를 노출하지 않고 요청한다.
- 데이터를 Body에 포함시킨다.
- URL에 데이터가 노출되지 않아서 기본적인 보안은 되어있다.
- 전송하는 길이에 제한이 없다.
- 캐싱할 수 없다.
GET방식은 URL에 데이터를 붙여서 전송하는 반면에 POST방식은 BODY에 데이터를 넣어서 전송합니다.
따라서 헤더필드 중 Body의 데이터를 설명하는 Context-Type하는 헤더 필드가 들어가고 어떠한 데이터 타입인지 명시해주어야 합니다.
데이터를 Body에 포함시키는 이점 때문에 메시지 길이의 제한은 없지만 최대 요청을 받는 시간인 Time out이 존재 하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재합니다.
실제로 POST방식은 URL에 데이터가 노출되지 않으므로 즐겨찾기나 캐싱이 불가능하지만 쿼리스트링(문자열)데이터 뿐만 아니라, 라디오 버튼, 텍스트 받스와 같은 객체들의 값도 전송이 가능합니다.
GET 과 POST 비교
아래의 그림에서 GET방식과 POST방식의 차이를 표로 정리하고 있다.
GET은 가져오는 것이고 POST는 수행하는 것입니다.
이 개념만 잘 숙지 되어있으면 상황에 따라서 어느 방식을 선택할지 방향이 잡힐겁니다.(예외상황은 있기 마련)
더 자세히 살펴보면 GET는 Select적인 성향을 가지고 있습니다.
GET은 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 수정하지 않습니다.
게시판의 리스트라던지 글보기 기능 같은 것이 이에 해당하죠.(방문자의 로그를 남기거나 글 조회수를 늘리는건 예외)
반면 POST는 서버의 값이나 상태를 바꾸기 위해서 사용합니다.
글쓰기를 하면 글의 내용이 DB에 저장되고 수정을하면 DB값이 수정되죠. 이럴 경우에 POST를 사용합니다.
참조:
'네트워크' 카테고리의 다른 글
[네트워크] 체크섬(Checksum) (0) | 2021.03.03 |
---|---|
[네트워크] HTTP란? (0) | 2021.02.13 |
[네트워크] DNS 동작 원리 (0) | 2021.02.09 |
[네트워크] 웹서버와 was(web application service) (0) | 2021.02.08 |
[네트워크] OSI 7계층이란? (0) | 2020.11.25 |