티스토리 뷰
사용자가 어떤 홈페이지로 이동하기 위해서 URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 페이지로 이동합니다. 사용자는 단순히 URL(Uniform Resource Locator)을 입력하였을 뿐이지만 서버 내부에서는 클라이언트의 요청에 응답(웹페이지로 표현)하기 위해서 처리를 해주어야 합니다. 여기서 클라이언트가 서버로 요청을 보내는 방법인 HTTP Method에는 크게 2가지 방식이 있는데, 그것이 바로 오늘의 주인공인 GET방식과 POST방식입니다. 오늘인 이 두 방식에 대해서 비교하며 장, 단점 및 차이점에 대해서 알아보도록 하겠습니다!
1. GET 방식
먼저 GET 방식에 대해서 알아보도록 하겠습니다. 영어 Get이라는 단어는 가져오다라는 뜻을 가진 단어인데요, 이를 활용해서 이해하면 쉽습니다. 우리가 필요한 정보를 얻기 위해 도서관에서 책을 빌려 가져오는(GET)상황과 유사하게 GET은 어떠한 정보를 가져와서 조회하기 위해서 사용되는 방식입니다.
[ GET방식의 특징]
URL에 변수(데이터)를 포함시켜 요청한다.
데이터를 Header(헤더)에 포함하여 전송한다.
URL에 데이터가 노출되어 보안에 취약하다.
캐싱할 수 있다.
GET 방식은 간단한 데이터를 URL에 넣도록 설계된 방식으로 데이터를 보내는 양에 한계가 있습니다. HTTP 자체는 GET 방식의 URL 길이에 제약을 두고 있지는 않지만, 브라우저에서 최대 길이를 제한하고 있으며 URL형식에 맞지 않는 파라미터 이름이나 값은 인코딩되어 전달해야 합니다. (만약 여기서 보내는 길이가 너무 길은 경우 초과데이터는 절단됩니다.) 특별히 전송하는 데이터가 없으므로 GET방식에서 바디는 보통 빈 상태로 전송이 되며, 헤더의 내용 중 Body의 데이터를 설명하는 Content-type 헤더필드도 들어가지 않습니다.
이번에는 실제로 GET방식이 사용되는 방식에 대해 설명해보겠습니다. 예를 들어 우리가 어떤 페이지에서 로그인을 하는 상황이라고 하고, id와 pw를 입력한 후 엔터를 눌렀다고 칩시다. 이럴때 요청을 GET방식으로 전송하는 경우에는 www.mangkyu.com/login?id=mang&pw=kyu 와 같은 페이지가 있다고 가정을 합시다. 여기서 GET방식은 ?마크를 통해 URL의 끝을 알리고, id라는 키(Key)에 대해선 mang이라는 값(Value)를, pw라는 키(Key)에 대해서는 kyu라는 값(Value)를 전송하는 것을 볼 수 있습니다. 여러개의 Key와 Value를 보내는 경우에 &를 사용하여 이어주는 GET방식은 최소한의 보안유지도 하지 않기 때문에 실제 웹사이트에서 ID와 PW같은 중요한 정보를 GET방식으로 사용하면 개인정보가 노출되는 문제가 발생합니다. GET방식을 사용하여 데이터를 노출시키는 경우는 개인정보가 포함되지 않는 상황에서 *캐싱을 하여 속도를 높이거나 즐겨찾기를 편리하기 위해 사용되는 경우가 많습니다. 우리가 어떤 물건 a에 대해서 즐겨찾기를 추가하면 그 물건의 이름이 a라는 정보를 url에 추가하여 즐겨찾기를 생성할 수 있는 것입니다.
Q) Caching(캐싱)이란?
캐싱이란 한번 접근 후, 또 요청할시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것입니다. 다룰 내용이 매우 많은 캐싱이기 때문에 자세한 설명은 생략하도록 하겠습니다.
2. POST 방식
GET방식에 이어서 POST방식에 대해서 알아보도록 하겠습니다. POST라는 단어는 부치다, 제출하다라는 뜻을 가지고 있습니다. 예를 들어 우리가 어디에 서류를 제출하는 것은 우리에 대한 정보를 제출하여(POST) 추가하기 위함입니다. 이러한 상황과 유사하게 POST 방식은 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식입니다.
[ POST방식의 특징 ]
URL에 변수(데이터)를 노출하지 않고 요청한다.
데이터를 Body(바디)에 포함시킨다.
URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.
캐싱할 수 없다.
GET방식은 URL에 데이터를 붙여서 전송하는 반면에 POST방식은 BODY에 데이터를 넣어서 전송합니다. 따라서 헤더필드 중 Body의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떠한 데이터 타입인지를 명시해주어야 합니다. 데이터를 Body에 포함시키는 이점 때문에 메세지 길이의 제한은 없지만 최대 요청을 받는 시간인 Time Out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재합니다. 실제로 상황에서 POST 방식은 URL에 데이터가 노출되지 않으므로 즐겨찾기나 캐싱이 불가능하지만 쿼리스트링(문자열)데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송이 가능합니다.
3. GET VS POST 비교표
아래의 그림에서는 GET 방식과 POST 방식의 차이를 표로 정리하고 있다.
'네트워크' 카테고리의 다른 글
[Web] HTTP와 HTTPS의 개념 및 차이점 (20) | 2020.10.17 |
---|---|
[Web] Forward와 Redirect 차이 (18) | 2019.09.10 |
[네트워크 프로그래밍] Http 프로그래밍과 Socket 프로그래밍 차이 (36) | 2019.02.17 |
[Web] GET과 POST의 비교 및 차이 (33) | 2017.11.09 |
[RAW Socket] RAW 소켓이란 (4) | 2017.11.07 |
[TCP/UDP] TCP와 UDP의 특징과 차이 (100) | 2017.11.05 |
- tea 좋은 정보 감사합니다. 저의 블로그에 따로 공유할려고 해요 ~~~ ^^ 2019.06.26 15:24
- 망나니개발자 넵 괜찮습니다ㅎㅎ 공유해주세요~ 2019.07.01 17:06 신고
-
ildann
정보 감사합니다!
혹시 "POST방식을 사용하여 데이터를 노출시키는 경우는~~"
여기서 Post가 아니라 Get 아닌가요?... 조심스레 여쭤봅니다! ㅎㅎ 2019.07.19 17:36 신고 - 망나니개발자 GET이 맞는 것 같습니다! 좋은 지적 감사합니당ㅎㅎ 다른 글들도 많이 참고해주세요~! 2019.07.21 20:50 신고
- 정말조심스러웠는가? 정말 조심스러웠나요?ㅋㄷ 2019.09.09 14:12
- 망나니개발자 좋게 봐주셔서 감사합니다!ㅎㅎ 2019.07.31 19:01 신고
- 망나니개발자 넵 괜찮습니다! 출처만 남겨주세요~! 2019.10.12 21:55 신고
- 망나니개발자 넵 괜찮습니다:) 출처 남겨주세용ㅎㅎ 2020.01.15 23:26 신고
- ming Post 방식 예시도 붙여주세용~~~~~~~~~~~~~~~~~~~! 2020.05.04 17:18
- 망나니개발자 참고해서 반영하도록 하겠습니당ㅎㅎ 감사합니닷!! 2020.05.04 17:19 신고
- prinha 감사합니다 블로그에 출처남기고 공유해도 될까요? 2020.07.23 15:08 신고
- 망나니개발자 넵 괜찮습니다! 출처 남기고 공유해주세용ㅎㅎ 2020.07.23 18:49 신고
- 망나니개발자 넵 좋습니다!!! 출처 남기고 공유해주세용! 2020.09.10 20:41 신고
- Dodal 정말 쉽게 잘 풀어 써주셨네요. 넘 잘 봤습니당. 2020.10.05 00:22 신고
- 망나니개발자 감사합니다:) 다른 글들도 많이 참고해주세요!! 2020.10.05 09:07 신고
- 망나니개발자 제가 질문을 잘 이해를 못하겠습니다 ㅜㅜ 2020.10.21 22:18 신고
- 둘 제일마지막 표에 첫번째 URL에 데이터노출여부가 반대로 된것 아닌지요? 2020.12.28 14:49
- 망나니개발자 아이고 맞습니다! 표를 새로 만들면서 잘못 입력을 했네요ㅜㅜ 바로 변경했습니다! 감사합니다:) 2020.12.28 20:51 신고
-
태양
좋은 글 감사합니다.
추가로 GET방식의 경우 http1.1 이후로 브라우저에 따라 전송길이제한이 사라진 것 같습니다.
실제 테스트시 get메소드를 이용하여 10만개의 문자열이 잘 넘어가는게 확인이 돼서 충격받았던 기억이 있습니다.. 2021.01.21 11:37 - 망나니개발자 그러게요 RFC2616에서 보니 전송 길이의 제한을 따로 두지 않는다고 나와있네욥 오히려 브라우저에서는 최대 문자수를 두고 있는 것 같네요! 감사합니다 관련 내용 수정하도록 하겠습니다:) 2021.01.21 13:00 신고
- 정리최고! 스프링 공부하는데 get방식, post방식이 이해가 잘 안됐는데 이 글 읽고 나니 이해가 잘되네요! 블로그에 가지고 가도 될까요?? ㅜㅜ 2021.01.21 16:41
- 망나니개발자 넵 괜찮습니당ㅎㅎ 출처만 남겨주세요:) 2021.01.21 23:04 신고
- loid 형님 최고십니다 이해가 쏙쏙 됩니다 2021.04.01 17:47 신고
- 망나니개발자 이해가 잘 되셨다니 뿌듯하네요 ㅎㅎ 감사합니다:) 2021.04.01 19:41 신고
- 쿠운 너무 좋은 자료라.. 저희 회사 블로그에도 사용하고 싶은데, 공유 해도 괜찮을까요? 2021.11.29 19:22
- 망나니개발자 안녕하세요, 쿠운님 방문해주셔서 감사합니다! 출처만 꼭 남겨주세요:) 2021.11.29 20:06 신고
- 침착곰 좋은 정보 감사합니다!! GET VS POST 비교표 정리가 잘 되어 있어서 제 블로그에 참고하려는데 괜찮을까요?? 2022.03.06 20:20 신고
- 망나니개발자 안녕하세요~ 넵넵 이용하셔도 되는데 출처만 꼭 남겨주세요ㅎㅎ 감사합니다:) 2022.03.06 20:44 신고