오늘 포스팅 할 내용은, 


Http 프로토콜이 제공해주는 7가지 메서드들 중


웹서비스 개발에 주로 사용하는,

GET 메서드와 POST 메서드에 대하여 기술한다.




GET메서드 POST메서드 란?



  위에서 말했다시피, 웹 서비스 개발에 주로 사용하는 메서드 이다.


사용자가 URL을 브라우저 주소창에 작성하고 엔터를 누르면


원하는 웹페이지가 나온다. 사용자는 웹페이지를 보기위해 단순한 일을 한 것 이지만,

특정 웹페이지를 사용자 웹브라우저에게 보여주기 위해서는 내부적인 처리들이 있다.


그 내부적인 처리에서, 클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것을


우리는 요청 이라 부르고, 서버가 클라이언트에게 요청받은 것에 대한 대답으로, 웹페이지


내용을 표현하기 위해 html문서로 주는것을 응답 이라 부른다. 




HTTP 패킷



  클라이언트가 서버로 요청을 했을때, 보내는 데이터를 HTTP 패킷이라 표현한다. 


HTTP 프로토콜을 쓰므로, 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라 표현하므로,


HTTP패킷 이라 부른다. HTTP패킷의 구조는 크게 헤더 바디로 나뉘어진다.



  헤더에는 7가지 HTTP 메서드 방식중 무엇을 썻는지, 클라이언트의 정보, 브라우저 정보,


접속할 URL 등등 과 같은 클라이언트 정보를 담는다. 

  

바디는 보통 비어있다. 하지만, 특정 데이터를 담아서 서버에게 요청을 보낼 수 있다.


이러한 웹 개념아래, 우리는 GET메서드와 POST메서드를 통해서 요청을 할 수 있다.




GET방식 vs POST방식


  

  두 방식 모두, 서버에 요청을 하는 메서드이다.


클라이언트가 서버에 요청을 할때, 제공해야 하는 자원이 있다고 하자. 


예를 들면, 어떤 홈페이지의 로그인 페이지에서 로그인을 하는 경우이다.


아이디 와 패스워드는 클라이언트가 작성한 후, 그 정보를 서버에 요청하여


클라이언트가 작성한 아이디와 패스워드가 올바른 것인지 검사를 해야한다.


위의 예시를 보듯, 요청에는 자원을 보내야 하는경우가 존재한다.


  • GET방식으로 데이터를 보내기

클라이언트의 데이터를 URL뒤에 붙여서 보낸다. 위에서 쓴 예시처럼 아이디 패스워드를 보낸다고 하면,


www.example.com?id=mommoo&pass=1234 (예시로 쓴 URL입니다. 존재하지 않습니다.)


이런식으로 보낸다. URL 뒤에 "?" 마크를 통해 URL의 끝을 알리면서, 데이터 표현의 시작점을 알린다.


데이터는 key 와 value 쌍으로 넣어야 한다 윗 예시에서의 key는 id 랑 pass고 value는 mommoo랑 1234가 되겠다.

중간에 &마크는 구분자 이다. 2개이상의 key - value 쌍 데이터를 보낼때는 &마크로 구분해준다.


URL에 붙이므로, HTTP패킷의 해더에 포함되여 서버에 요청한다.


따라서, GET 방식에서 BODY에 특별한 내용을 넣을 것이 없으므로 BODY가 빈상태로 보내진다.


그러므로, 헤더의 내용중 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다.


URL형태로 표현되므로, 특정 페이지를 다른사람 에게 접속하게 할 수 있다. 


또한 간단한 데이터를 넣도록 설계되어, 데이터를 보내는 양의 한계가 있다.


  • POST방식으로 데이터를 보내기

POST 방식은 GET 방식과 달리, 데이터 전송을 기반으로 한 요청 메서드이다.


GET방식은 URL에 데이터를 붙여서 보내는 반면, POST방식은 URL에 붙여서 보내지 않고


BODY에다가 데이터를 넣어서 보낸다.  


따라서, 헤더필드중 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가


들어가고 어떤 데이터 타입인지 명시한다.


컨텐츠 타입으로는 여러가지가 있지만, 몇가지를 적자면,


  1. application/x-www-form-urlencoded
  2. text/plain
  3. multipart/form-data

등이 있다.

따라서 POST 방식으로 데이터를 보낼때는 위와 같이 컨텐츠 타입을 꼭 명시해줘야한다.

보통 작성하지 않는 경우는 1번의 컨텐츠 타입으로 셋팅된다.

1번의 컨텐츠 타입은, GET방식과 마찬가지로 BODY에 key 와 value 쌍으로 데이터를 넣는다. 똑같이 구분자 &를 쓴다.

2번의 컨텐츠 타입은, BODY에 단순 txt를 넣는다.

3번의 컨텐츠 타입은, 파일전송을 할때 많이 쓰는데 BODY의 데이터를 바이너리 데이터로 넣는다는걸 알려준다.

자바와 같이 oop 프로그래밍에서는 BODY에 데이터를 InputStream/OutputStream 클래스를 통해서 읽고/쓰고 한다.


GET방식 과 POST방식에 대한 상식
  • POST방식이 GET방식보다 보안측면에서 더 좋다?
   POST든 GET이든 보내는 데이터는 전부 클라이언트측에서 볼 수 있다. 단지 GET방식은 URL에 데이터가 표시되여 별다른 
   
   노력없이 볼 수 있어서지, 두 방식 전부 보안을 생각한다면 암호화 해야한다.

  • GET방식이 POST방식보다 속도가 빠르다?
    빠른건 맞다. 하지만 왜 빠른지를 알아야 하는데, 이유는 GET방식의 요청은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해
    
    데이터를 저장시켜 놓는다)때문에 빠른것이다.
   




'용어정리 > 프로그래밍용어' 카테고리의 다른 글

비즈니스 로직(Business Logic)이란?  (13) 2017.05.24
DTO와 VO란?  (2) 2017.02.08
컴포넌트(Component)란?  (8) 2016.10.20
URL 이란?  (2) 2016.06.14
URI 이란?  (0) 2016.06.13

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee
  1. 나그네 2017.04.04 23:54

    application/x-www-form-urleoncoded
    urleoncoded가 오타인것같습니다. ㅎㅎ

  2. 익명 2017.07.22 01:50

    비밀댓글입니다

    • 익명 2017.09.05 17:41

      비밀댓글입니다

  3. Joon 2017.09.04 16:57

    잘 정리하셨네요 감사합니다

  4. 행인 2017.09.05 16:24

    감사합니다.

  5. 컴공 2017.11.20 10:11

    정말 궁금했는데 간단하게 잘정리해주셔서 감사합니다!

  6. 피카킨 2017.12.15 14:07

    서버-클라이언트간이 아니라 서버간 API를 이용해 통신할때에 POST를 사용하고자 하는데,
    이경우도 역시 데이터를 암호화 하는것이 좋을까요?

    • 아이놀라 2018.04.23 15:36

      서버, 클라이언트는 딱 하나로 구분하기 보다는
      서비스를 제공하는 쪽이 서버이고
      그 서비스를 이용하는 쪽이 클라이언트가 되는데요

      민감한 데이터라면 암호화를 반드시 해야겠지만
      노출되도 크게 문제없는 데이터는 굳이 안해도되요

  7. 문돌이 2018.05.02 22:15

    안녕하세요..
    문돌이이지만 IT기술이 필요하여 검색하다가 들렸습니다.
    이해하기 쉽게 잘 쓰여져서 도움이 많이 되었습니다. 감사합니다!!

  8. yhy868700@gmail.com 2018.08.05 22:09

    도움이 많이 됐어요

  9. heyhyo 2018.08.06 09:50 신고

    정말 도움이 많이 되었습니다~

  10. Kyubotics 2019.04.21 14:14 신고

    IOT장치에서 POST방식을 통해 데이터를 전송하는 방식을 구현중인데 생각보다 지연이 엄청나서 고민입니다.
    외국 IOT용 3G Sim카드를 사용하여 통신을 하고 있습니다.
    한번 보내는데 대략 10~15초 정도가 걸리고 이때 아무런 반응이 없는 상태가 되서 문제인데요.
    혹시 응답 속도를 빠르게 하는 방법은 어떤게 있을까요?
    그냥 국내 전용 sim 카드를 개통해서 보내는게 방법일까요...

    • Mommoo 2019.04.24 10:51 신고

      국내 전송시 국내망이 아닌 외국망을 통해서 통신이 진행되다 보니 불필요하게 거쳐가는 지점이 생겨 통신이 많이 지연되는거 같습니다.

      외국 통신사에서, 그나마 우리나라랑 가까운 지점에 통신 인프라를 제공해주는 서비스가 있는지 찾아보시는게...

      인프라 문제라, 국내 SIM 카드를 쓰시는게 좋을듯 싶습니다.

  11. 코딩하는흑구 2019.08.31 16:43 신고

    안녕하세요. 제 블로그 내용에 GET POST 관련 정리내용이 있는데 너무 정리를 잘해놓으셔서 참조링크를 달아놓고 싶습니다.

    • Mommoo 2019.08.31 16:50 신고

      읽어주셔서 감사하구요, 참고링크 걸어 주시면 좋겠습니다 ^^!!

  12. 조현철 2020.02.08 09:43

    이해가 쉽게되네요 잘 봤습니다~

  13. 신닌자 2020.02.11 17:14

    너무 이해하기 쉽게 잘 봤습니다.
    제 블로그에 내용 정리해서 올리고 싶습니다.
    참고 링크 걸어서 포스팅 하겠습니다~ ^^

  14. 익명 2021.01.03 21:01

    비밀댓글입니다

  15. 일드다시보기 2021.03.11 12:47

    잘 보고 갑니다...

  16. 익명 2021.06.28 15:44

    비밀댓글입니다

  17. 김태형 2022.02.23 11:33 신고

    이해하는데 많은 도움이 됐습니다 감사합니다~~

+ Recent posts