지난 포스트에서 RESTful을 전달하면서 Web에서 HTTP 프로토콜을 이용하여 무언가의 자원을 전달하고
메소드 정보에 맞는 역할을 수행한다고 했습니다.
오늘 포스트에서는 데이터를 전달하는 HTTP 메소트 'GET', 'POST'에 대해 더 자세히 알아보겠습니다.
2-(1) [네트워크] RESTful 정리하기 바로가기 >>
'GET', 'POST'는 클라이언트에서 서버로 data를 전달하기 위해 사용하는 전송방식이다.
이 둘은 공통적으로 data를 전달한다라는 공통점을 가지고 있다.
전달형식, 전달할 data의 크기, 그리고 보안적인 측면에서 차이점이 있다.
지금부터 알아보자
- GET 전송방식
클라이언트로부터 입력받은 parameter 이름과 값이 결합되어 스트링 형태로 서버에 전송된다.
이는 URL에 그대로 붙어서 전달된다.
ex) GET 전송의 URL 표시
http://localhost:8080/example/member?name=kim&phone=01012345678
(name과 phone이 스트링으로 전달되고 있다.)
GET전송방식 에는 정보를 보내는데에 있어 단점이 많다.
GET으로 보내는 data는 스트링 문자열이 최대 256byte를 넘길 수 없기 때문에 따라서 전달하는 data 크기에 한계가 있다.
또한 위에 URL example처럼 data정보가 그대로 노출되기 때문에 개인정보와 같은 중요한 정보를 전달하는데 보안상 위험한 부분이 있다.
그렇기에 GET은 Database에서 정보를 가져올 수 있는 최소한의 조건값을 전달하는데 사용되며
단점을 보안하기 위해 POST방식을 이용하게 되었다.
- POST 전송방식
클라이언트와 서버간에 인코딩하여 서버로 전송된다.
클라이언트에서 데이터를 인코딩을 한 후 전달받은 서버에서 디코딩을 하여 사용한다.
이는 URL에 붙어서가 아닌 HTTP헤더를 통해 전달된다.
ex) POST 전송의 URL 표시
http://localhost:8080/example/member
(name과 phone이 URL에 노출되지 않고 전달된다.)
URL 전송이 아니기 때문에 문자열에 제한이 없고 당연히 data 전달정보의 크기가 한계가 없다.
그래서 Database에 많은 양을 한번에 갱신할 때 POST를 사용한다.
또한 정보를 클라이언트에 보이지 않게 전달하기 때문에 보안상 GET에 비해 더 안전하다.
(그렇지만 POST 또한 보안에 안전한 편은 아니다.)
- 정리
HTTP 메소드 |
GET |
POST |
전송 방식 |
parameter의 이름과 값이 결합되어 있는 스트링 형태 |
클라이언트와 서버간의 인코딩 |
데이터 크기 |
제한 있음(256byte) |
제한 없음 |
보안 |
정보가 그대로 노출 됨 |
노출되지 않음(GET에 비해 덜 취약함) |
속도 |
빠름 |
덜 빠름 |
표시 URL |
http://localhost:8080/example/member?name=kim&phone=01012345678 |
http://localhost:8080/example/member |
- 정리 후 나의 생각
정리를 하면서 제 업무에 있는 코딩을 보면서 생각해봤습니다.
GET : 정보를 가져오다(Select)
라고 RESTful 개념에서 공부를 했습니다.
어떤 상황에 GET을 사용할지 POST를 사용할지 생각해봤지만
사실 코딩을 해보면 GET으로 정보를 저장할 수도 있고 POST로 정보를 불러올 수도 있습니다.
공부를 통해 특징을 정리하면서 RESTful개념에서 왜 그렇게 나누어 놨는지 이해하게 되었습니다.
코딩의 양이 많아서 그런지 기존 회사네 프로젝트 코딩을 보면 검색, 생성, 수정, 삭제 모든 CRUD가
POST 전송 하나로 이루어지고 있습니다.
SpringFramework로 RequestMapping을 이용하고 있고 결제관련 프로젝트로 충분히 커버가 되고 있기 때문입니다.
그러나 이론이라도 정확하게 알고 있는것과 없는것도 큰 차이가 있다고 생각했고
이번 공부를 통해 자세히 몰랐던 GET의 정확한 사용방법(ex. 공유하기)도 이해할 수 있었습니다.
블로그를 운영하면서 이론을 공부하고 정리하게 됐고
대충 알고 있던 정보에 알맹이를 꽉 채워 넣는 기분이라 개인적으로 뿌듯합니다ㅎㅎ
다음 포스트에는 데이터관련 JSON, xml를 공부해서 작성하겠습니다! 감사합니다
'Programming > 초보의 공통 기초' 카테고리의 다른 글
인터넷 네트워크 정리 (0) | 2021.03.05 |
---|---|
OSI 모델 이란? (7-Layer 소개) (0) | 2021.02.15 |
2-(1) [네트워크] RESTful 정리하기 (0) | 2018.04.13 |
1-(3) [암호] RSA 암호화/복호화 소개 및 코드정리(JAVA 코드) (0) | 2018.04.11 |
1-(2) [암호] MD5 암호화 소개 및 코드정리(JAVA 코드) (0) | 2018.04.10 |