Get와 Post
1. HTTP 프로토콜이란?
HTTP(Hypertext Transfer Protocol)
프로토콜
- 프로토콜은 컴퓨터 내부, 또는 컴퓨터 사이에서 데이터 교환 방식을 정의하는 규칙체계
- 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구
- 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 함
웹에서는 브라우저와 서버 간에 대이터를 주고받기 위한 방식으로 HTTP 프로트콜을 사용함
HTTP 요청과 응답
단지 웹에서 요청(request)과 응답(response)을 HTTP 방식으로 요청하고 응답하기로 한 것
HTTP 통신에서의 client는 브라우저(크롬,익스플로어 등)이 되고 server는 WAS(톰캣, ZEUS 등)이 됨
HTTP 요청 메서드
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원을 생성
- PUT : 존재하는 자원에 대한 변경
- DELETE : 존재하는 자원에 대한 삭제
데이터에 대한 조회, 생성, 변경, 삭제 동작을 HTTP 요청 메서드로 정의할 수 있음
사실 대부분은 GET, POST 방식만 사용
HTTP 상태 코드
주요 상태 코드는 200번대부터 500번대까지 다양하게 있지만 주요한 상태 코드를 위주로 설명
2xx - 성공
- 200 : GET 요청에 대한 성공
- 204 : No Contnet. 성공했으나 응답 본문에 데이터가 없음
- 205 : Reset Content. 성공했으나 클라이언트 화면을 새로 고침하도록 권고
- 206 : Partial Content. 성공했으나 일부 범위의 데이터만 반환
3xx - 리다이렉션 : 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우
- 301 : Moved Permanently, 요청한 자원이 새 URL에 존재
- 303 : See Other, 요청한 자원이 임시 주소에 존재
- 304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인
4xx - 클라이언트 에러 : 유효하지 않은 자원을 요구, 요청이나 권한이 잘못된 경우
- 400 : Bad Request, 잘못된 요청
- 401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
- 403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
- 404 : 요청한 자원이 서버에 없음
- 405 : Method Not Allowed, 허용되지 않은 요청 메서드
- 409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌
5xx - 서버 에러 : 서버 쪽에서 오류가 난 경우
- 501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
- 503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우
2. GET과 POST
둘 다 브라우저가 서버에 요청하는 것
2-1 . GET 방식
GET은 요청을 전송할 때 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송
예시) www.example-url.com/resources?name1=value1&name2=value2
여기서 요청 파라미터 명은 name1,name2이고, 각각의 파라미터는 value1,value2라는 값으로 서버에 요청
| 요청 | 파라미터 | 값 |
| GET | name1,name2 | value1,value2 |
특징
- GET 요청은 캐시가 가능하다.
- GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
- GET 요청은 브라우저 히스토리에 남는다.
- GET 요청은 길이 제한이 있다.
- GET 요청은 중요한 정보를 다루면 안된다. (보안)
2-2. POST 방식
POST는 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송
데이터가 Body로 전송되고 눈에 보이지 않아 GET보다 안전하다고 생각되지만, POST 요청도 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 함
특징
- POST 요청은 캐시되지 않는다.
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
2-3. 차이점 정리
- 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용함.
- DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 됨.
- 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재.

