본문으로 바로가기

[PHP] POST와 GET의 차이점

category Helloworld!/PHP 2013. 6. 7. 16:47

처음 PHP를 학교에서 배웠을땐, GETPOST의 구분없이 값을 넘기는 식으로 홈페이지를 작성했었다.

아니 어쩌면 그때도 GETPOST가 구분되어있었다고 하지만... 배운기억이 왜 없는걸까

오래되서 기억이 안나는걸까? 아님 그저 단기암기식이라 배웠는데 모르는걸까 여튼!

수업시간에 배운 웹프로그래밍 언어는 PHP뿐이라 인도네시아에 해외인턴 갔을때 홈페이지 제작을 맡았을때도 PHP로 작성을 하기로 결정.

근데 그때는 왜그렇게 GETPOST가 헷갈리던지...

틱한테 다시한번 설명해달라고를 열번넘게 했었지만 결국

url로 넘기면 GET

form으로 넘기면 POST

라고 외워서 사용했던걸로 끝났었다


그리고 오늘 웹서핑을 하던 도중 좋은 글을 찾아 나도 다시한번 GETPOST의 개념을 정리한다.


우선 GETPOST가 무엇인지 간단하게 설명을 하자면,

클라이언트에서 서버로 데이터를 전송할때 쓰이는것이라고 정의하며

각 페이지 간에 정보를 주고받을때 사용한다고 생각하면 된다.


1. GET


- URL에 키와 값을 임의로 입력하여 사용하는 것

- 예) http://88240.tistory.com/index.php?key=1?name=kimsehee

- 예시처럼 여러개의 값을 쓰고싶을 경우 물음표로 구분하면 된다

- 받아오는 방법은 

$key = addslashes($_GET['key']); 
$name = addslashes($_GET['name']);

echo $key; //1
echo $name //kimsehee

* addslashes에 대한 설명은 다른 곳에 포스팅했으니 확인 : click

간단하게 말하자면 injection SQL 해킹에 대응하기 위해 사용된다.


- 하지만 값이 URL에 반영되므로써 사용자에 노출이된다는 단점이 있다

- 또하나의 단점은 URL로 이용하는 것이므로 길이제한으로 인해 많은 양을 보내기에는 비적합하다는 것

- 따라서, GET은 가져오는 것이라고 정의할수있다

  (이부분에 대해서는 밑에서 따로 설명하겠다)


2. POST

- form submit하여 키와 값을 보내는 형태

- 예)

<form name="form_ex" method="POST" action="nextpage.php"> 

   <input type="text" name="key" value="1">
   <input type="text" name="name" value="kimsehee">

   <button type="submit" name="submit" value="Submit">
</form>

- 예시 설명)

form_ex라는 이름의 form안에

key라는 이름의 입력박스가 있다. 이 key라는 입력박스의 기본값을 1이다.

(여기서 value는 생략가능하다. 하지만 위에 GET의 예시와 똑같이하여 혼동을 덜 주고자 기본값이라하여 key=1로 만든것임을 참고할 것.

value값은 input박스에 값을 바꾸면 수정이 된다)

name이라는 입력박스에는 기본값이 kimsehee이다.


submit이 되는 버튼을 클릭하면

(다시) form에서 볼수 있듯이 보내는 방식은(method) POST이며, 

submit되면 이동 되는 페이지는(action) nextpage.php가 되어 페이지가 이동됨을 알수 있다.


즉, nextpage.php 페이지에 POST 형태로 key=1, name=kimsehee가 보내진다는 것.

- 받아 오는 방법은 GET과 동일하지만 GET 대신 POST라고 입력하면 된다

$key = addslashes($_POST['key']); 
$name = addslashes($_POST['name']);

echo $key; //1
echo $name //kimsehee

- POST 또한 용량제한은 있지만 GET 보단 많은 양의 정보를 보낼수 있다는 것.

- 그리고 사용자에게 값이 노출되지 않는다는 점이 있다.

- 마지막으로 POST는 수행하는 것이다.


여기서 드는 의문점은?


쭉 읽어보니 POST가 양도 많이 주고받을 수 있고 사용자에게 정보도 노출되지않아 좋은데 그냥 다 POST를 쓰지 왜 GET을 쓰는가.

이부분에 대해서는 위에도 써놨듯이

GET은 가져오는 것.

POST는 수행하는 것.

이라는 부분과 함께 설명하겠다.

( 참고 사이트는 : http://jokergt.tistory.com/entry/HTTP-GET-%EA%B3%BC-POST%EC%9D%98-%EC%B0%A8%EC%9D%B4 )


GET은 select적인 성향을 가지고 있기 때문에 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 

서버의 값이나 상태등을 바꾸지 않는다. 예를들어 게시판의 리스트라던지 글보기 기능 같은 것에 해당한다.

반면에 POST는 서버의 값이나 상태를 바꾸기 위해서 사용된다. 예를 들어 글쓰기를 하면 글의 내용이

DB에 저장이 되고 수정을 하면 DB값이 수정되는데 이럴 경우 POST를 사용한다.


위 설명 덕분에 GETPOST를 확실하게 구분해서 사용할수 있었다.


그래도 쉬원하게 풀리지 않는 것.

그래도 GETPOST를 꼭 구분할 필요 없지 않는가 하는 반항끼 다분한 생각을 하신다면

Google의 Accelerator 얘기가 대표적인 예시라는데 이건 참고사이트에서 보시길...

대충 읽어본 본인은 그냥 수긍하련다. 짜증부리는것도 귀찮아


차이점 정리는 참고사이트에서 가져온것.

그렇다. 결론은

차이점 정리


1. 전송속도 GET > POST

2. 히스토리 백 할 때 GET은 이전데이터를 보여주며, POST는 새로 요청

3. 인코딩 방식이 다르다

4. GET은 글자수 제한이 있고 POST 는 없다

5. GET은 보안에 취약, POST는 보안유지

6.  GET은 서버의 데이터를 가져오는(SELECT)데에 적합하고 POST는 게시판의 글을 등록/수정하는 것과 같은 작업에 적합하다.


끝-