Get과 Post의 차이는?

유수민·2022년 7월 11일
0

FoodMall 프로젝트

목록 보기
7/14

사실, 엄청 간단한데 정확히 알지 못하면 제대로 쓰지 못하고 헷갈려하는 경우가 있어서 정리해본다. get과 post 방식 둘다 HTTP프로토콜을 이용해서 서버에 무언가를 전달할 때 사용하는 방식이다.

두 방식의 차이점을 말해보자면,

📌Get 방식

SELECT 기능으로 많이 쓰고,캐시가 남아있어 보안적인 측면이 좋지 않으나, 전송속도가 우수하고 파라미터가 url에 노출되는 점이 있다. 즉, 서버에 데이터를 가져와 보여주기 위해 주로 쓰인다.
GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다.

쿼리스트링
URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 부릅니다. 만약, 요청 파라미터가 여러 개이면 &로 연결한다.

실제 웹사이트에서 ID와 PW같은 중요한 정보를 GET방식으로 사용하면 개인정보가 노출되는 문제가 발생한다. 예) http://url/example?id=22&pw=11

현재 프로젝트에서는 로그아웃할 때 get방식을 쓰고 있다.

📌Post 방식

주로 CREATE,UPDATE,DELETE에 사용되며,캐시가 남지 않아 보안적인 면에서 좋고 요청 시 Request Body에 데이터가 들어가기 때문에 파라미터가 노출 되지 않는점이 특징이다. 즉, 서버의 값,상태를 바꾸기 위해 쓰인다.
예) http://localhost/event

리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다.

비동기통신을 하기위해서는 클라이언트에서 서버로 요청 메세지를 보낼 때, 본문에 데이터를 담아서 보내야 하고, 서버에서 클라이언트로 응답을 보낼때에도 본문에 데이터를 담아서 보내야 한다. 이때 이 본문을 Body라고 한다.

현재 프로젝트에서는 좋아요 기능과 장바구니 기능이 쓰일 때 post 방식을 쓰고 있다. 좀 더 구체적인 이해를 위해 좋아요 기능의 post의 활용 예시를 아래 그림으로 보여주고 있다.

@ResponseBody를 써줘야 ajax가 원하는 데이터를 가져와서 success시 쓸 수 있다. ResponseBody 어노테이션의 역활은 "자바 객체를 HTTP 요청 몸체로 변환"이다. 간단하게 정리하자면, 리턴값을 쓸때 매핑URL이름이 아니라, 그 자체의 String이 결과가 된다는 것이다. 즉, 내가 어떤 상황으로 인해 url을 통해 뷰로 가는게 아니라 Stirng 자체를 반환하고 싶을때 쓰면 된다. (= 페이지 전환이 아닌 데이터 자체를 보내주는 것이다.)

현재 프로젝트에서는 JSON 형태의 데이터를 받고, 데이터를 반환할때도 단순히 string 형태로 데이터를 보내주는 것이 아닌 JSON 형태로 데이터를 보내주려고 한다. 따라서, JSON 형태의 데이터를 받기 위해서 @RequestParam 을 써줘야한다. 또한 @ResponseBody가 붙은 메서드에서 Map을 반환하면 자동으로 Map 정보(반환되는 전체 Body)가 JSON 객체로 변환되어 전송된다. (@ResponseBody가 JSON 형태로 데이터를 만들어주는데 JSON이 map 형식이라 map형식으로 반환되도록 만들어줘야 한다.)

참고)
https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/
https://blog.outsider.ne.kr/312
https://java119.tistory.com/16

profile
배우는 것이 즐겁다!

0개의 댓글