패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기
Spring MVC | GET과 POST 차이점과 예시
Tech_JINI
2025. 2. 25. 14:28
1. GET 요청
GET 메서드란?
GET 요청은 클라이언트가 서버에 데이터를 요청할 때 사용됩니다. 데이터는 URL의 쿼리 스트링으로 전송됩니다. 즉, URL 뒤에 ?key=value 형식으로 데이터가 추가되어 서버로 보내지며, 이는 브라우저의 주소 표시줄에서 확인할 수 있습니다.
특징:
- 데이터 전송: URL에 데이터를 포함시킴.
- 보안성: 데이터가 URL에 포함되므로 민감한 정보는 전송하지 않는 것이 좋습니다.
- 속도: 데이터가 URL에 포함되므로 빠른 요청이 가능합니다.
- 캐싱: GET 요청은 브라우저가 캐시할 수 있습니다. 따라서 동일한 URL을 여러 번 요청할 때, 서버에서 데이터를 다시 요청하지 않고 캐시된 응답을 사용할 수 있습니다.
GET을 사용하는 상황
- 데이터 조회: GET은 데이터를 조회하거나 검색할 때 사용됩니다.
- 웹 페이지 로딩: 웹 페이지를 로드할 때 주로 사용됩니다.
- 브라우저에 북마크 추가 가능: GET 요청은 URL에 파라미터를 포함하므로, 브라우저에서 북마크를 생성할 수 있습니다.
예시:
블로그 페이지에서 사용자가 로그인을 시도하려고 할 때, 로그인 화면을 띄우는 요청을 보내는 경우, GET 요청을 사용할 수 있습니다.
@GetMapping("/login")
public String loginForm() {
return "loginForm"; // 로그인 화면을 반환
}
2. POST 요청
POST 메서드란?
POST 요청은 클라이언트가 서버에 데이터를 전송할 때 사용됩니다. GET과 달리 데이터는 HTTP 메시지 본문에 포함되어 전송되며, URL에는 나타나지 않습니다.
특징:
- 데이터 전송: 데이터를 HTTP 요청 본문에 포함시켜 전송.
- 보안성: 데이터가 URL에 포함되지 않기 때문에 GET보다 보안이 높습니다.
- 속도: GET에 비해 상대적으로 느릴 수 있습니다.
- 캐싱: POST 요청은 기본적으로 캐시되지 않습니다.
POST을 사용하는 상황
- 데이터 제출: POST는 서버에 데이터를 전송할 때 사용됩니다. 예를 들어, 회원 가입, 로그인 처리, 댓글 작성 등이 포함됩니다.
- 데이터 변경: 서버의 상태를 변경할 때 사용됩니다. 예를 들어, 데이터베이스에 새로운 데이터 삽입이나 수정 작업을 할 때 POST를 사용합니다.
예시:
위 코드에서 사용자의 로그인 정보를 처리하는 부분을 살펴보면, 사용자가 입력한 아이디와 비밀번호를 서버로 전송하는 부분에서 POST 메서드를 사용합니다.
@PostMapping("/login")
public String login(String nickname, String id, String pwd, String toURL, boolean rememberId,
HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("nickname=" + nickname);
System.out.println("id=" + id);
System.out.println("pwd=" + pwd);
System.out.println("rememberId=" + rememberId);
// 로그인 체크
if (!loginCheck(nickname, id, pwd)) {
String msg = URLEncoder.encode("닉네임 또는 ID 또는 비밀번호가 일치하지 않습니다.", "utf-8");
return "redirect:/login/login?msg=" + msg;
}
// 로그인 성공
HttpSession session = request.getSession();
session.setAttribute("id", id);
session.setAttribute("nickname", nickname);
// 쿠키에 아이디와 닉네임 저장
if (rememberId) {
Cookie idCookie = new Cookie("id", id);
Cookie nicknameCookie = new Cookie("nickname", nickname);
idCookie.setMaxAge(60 * 60 * 24 * 7); // 7일 동안 유지
nicknameCookie.setMaxAge(60 * 60 * 24 * 7); // 7일 동안 유지
response.addCookie(idCookie);
response.addCookie(nicknameCookie);
}
// 홈으로 이동
toURL = (toURL == null || toURL.equals("")) ? "/" : toURL;
return "redirect:" + toURL;
}
여기서는 사용자가 입력한 아이디와 비밀번호를 전송하여 로그인 인증을 수행하고, 인증이 완료되면 세션에 로그인 정보를 저장합니다. 이런 경우에는 POST 요청이 적합합니다.
3. GET vs POST: 차이점 요약
구분 | GET | POST |
목적 | 주로 데이터를 조회하는 데 사용 | 주로 데이터를 전송하는 데 사용 |
전송 방법 | URL에 쿼리 파라미터로 데이터 포함 | HTTP 요청 본문에 데이터를 포함 |
보안성 | URL에 데이터가 포함되어 보안상 취약 | 데이터가 URL에 포함되지 않아 보안성 높음 |
속도 | 상대적으로 빠르며 캐시가 가능 | 상대적으로 느리며 캐싱되지 않음 |
상태 변화 | 서버의 상태를 변경하지 않음 | 서버의 상태를 변경하는 작업에 사용 |
4. 어떤 상황에서 GET, POST를 사용해야 할까?
- GET은 데이터 조회가 목적일 때, 즉 정보를 요청하거나 검색 결과를 표시할 때 사용됩니다. 예를 들어, 로그인 폼을 요청하거나 게시판 목록을 요청할 때 사용합니다.
- POST는 데이터를 전송할 때, 즉 서버에 정보를 제출하고 서버의 상태를 변경하려는 목적일 때 사용됩니다. 예를 들어, 사용자 로그인 처리, 회원 가입, 댓글 작성 등이 해당됩니다.