패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 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데이터를 전송할 때, 즉 서버에 정보를 제출하고 서버의 상태를 변경하려는 목적일 때 사용됩니다. 예를 들어, 사용자 로그인 처리, 회원 가입, 댓글 작성 등이 해당됩니다.