티스토리 뷰

반응형

 이번 포스팅에서는 웹 개발을 하다보면 반드시 접하게 되는 GET과 POST를 '간단하게' 비교해보려고 한다. GET과 POST는 HTTP 프로토콜에서 서버와 클라이언트 간 통신(Communication)에 활용되는 요청(Request)메소드이다. 

 

 GET과 POST 모두 클라이언트가 서버에 데이터를 전달한다는 공통점이 있다. (웹 페이지에서 웹 페이지로 데이터를 넘길 때 주로 사용하지만, 이는 서버를 통해 이루어지는 것이다.) 그리고 둘 간의 차이점도 있다.




그림1. GET과 POST의 비교



1. GET

 GET의 경우 데이터 값이 URL의 뒤에 이어붙는다. 기존의 URL 뒤에 ?를 붙여 구분하는 방식이다. 파라미터가 여러개 일 경우 &로 구분한다. 아래의 그림 예를 보면 쉽게 이해할 것이다.



그림2. GET방식의 예. 출처: 자체제작



 GET이 URL의 뒤에 붙여 늘리는 방식을 채택했기에, 전송하는 데이터량에 제한이 있으며 사용자에게 데이터가 그대로 노출된다. URL 형식에 맞지 않는 데이터는 인코딩(Encoding)이 반드시 필요하다. (한글이나 특수문자를 전송할 경우)




2. POST

 POST의 경우 데이터를 HTTP body에 넣어 전달한다. 그러므로 GET과 달리 사용자에게 데이터가 그대로 노출되지 않으며(암호화가 되지는 않음.), 전송량에 제한이 없다. 암호화는 따로 없으므로 보안에는 어차피 GET과 POST 둘 다 취약하다.


 지금까지 다룬 GET과 POST의 차이점을 비교하면 다음과 같다.


GET: URL의 뒤에 ?를 붙여 전달 

전송량에 제한이 있고, 사용자에게 데이터가 노출됨. URL 형식에 맞는 인코딩 필요


POST: HTTP body에 포함하여 전달.

전송량에 제한이 없고, 사용자에게 데이터가 보이지 않음. (암호화는 안됨)   


 그렇다면, GET과 POST를 어떻게 구분해서 사용해야할까? 아직 언급하지 않은 GET과 POST의 단점에 힌트가 있다. POST는 GET과 달리, 브라우저에서 캐싱(Caching)이 불가능하다. 거꾸로 이야기하면, GET으로 구현할 경우 웹 크롤러(Web Crawler)가 그것에 접근하여 마음대로 실행할 가능성이 있다.


 만약에 웹 페이지에 게시판의 수정, 삭제 기능을 GET으로 구현했다면? 의도치 않게 글이 수정 혹은 삭제될 수 있다! 즉, 서버의 값이나 상태를 변경하는 경우에는 POST로 구현하는 것이 적절하다. GET은 SQL 쿼리의 SELECT와 같은 단순 조회에만 이용하는 것이 좋다.






-끝-






출처

그림1: http://opentechlabs.blogspot.kr/2014/10/difference-between-post-get.html





반응형
최근에 올라온 글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
Total
Today
Yesterday