패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기

Spring MVC | HttpServletResponse와 HttpServletRequest: 웹 애플리케이션에서의 역할과 사용 예시

Tech_JINI 2025. 2. 25. 14:34

1.  HttpServletRequest란?

HttpServletRequest 객체

: 클라이언트가 보낸 요청에 대한 정보를 담고 있는 객체

즉, 사용자가 웹 애플리케이션에 요청을 보낼 때 발생하는 모든 정보를 서버에서 받아올 수 있게 해줍니다.

이 객체는 사용자가 요청한 URL, 파라미터, 헤더 정보, 세션 정보 등 여러 가지 중요한 정보를 담고 있습니다.

 

특징:

  • 클라이언트 요청 정보를 서버에 전달.
  • 요청 파라미터(예: 폼 데이터, URL 파라미터 등), 헤더(브라우저 정보 등), 세션 정보(로그인 상태 확인) 등을 포함.
  • 클라이언트가 보낸 요청에 대한 모든 세부 정보를 조회할 수 있습니다.

HttpServletRequest를 사용하는 상황

  • 요청 파라미터 가져오기: 사용자가 입력한 폼 데이터나 URL에 포함된 쿼리 스트링 파라미터를 가져올 때 사용됩니다.
  • 세션 정보 확인: 세션을 통해 사용자의 로그인 상태나 이전의 요청을 추적할 때 유용합니다.
  • 요청 헤더 정보 확인: 요청에 포함된 헤더 정보를 통해 사용자의 브라우저 정보나 접속 위치 등을 확인할 수 있습니다.

예시:

아래의 로그인 처리 코드에서 사용자가 입력한 아이디(id)와 비밀번호(pwd)를 가져오는 부분을 살펴보면, 이때 HttpServletRequest 객체를 사용하여 데이터를 추출합니다.

 

@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);
    
    // 세션 객체를 얻기 위해 HttpServletRequest 사용
    HttpSession session = request.getSession();
    session.setAttribute("id", id);
    session.setAttribute("nickname", nickname);
}

이 코드에서 request.getSession()을 사용하여 현재 요청에 해당하는 세션 객체를 가져오고, 세션에 사용자 정보를 저장합니다. 또한, URL 쿼리 스트링이나 폼 데이터에서 전달된 파라미터를 처리하는 데 사용될 수 있습니다.

 


2. HttpServletResponse란?

HttpServletResponse 객체

: 서버가 클라이언트로 응답을 보내기 위해 사용하는 객체

클라이언트에게 HTML 페이지, JSON 데이터, 이미지, 파일 등을 전송할 때 이 객체를 사용합니다.

또한, 응답 헤더를 설정하거나 쿠키를 추가하는 등의 작업도 이 객체를 통해 처리됩니다.

 

특징:

  • 응답 데이터를 클라이언트에 전송하는 데 사용.
  • 응답 헤더를 설정하거나, 쿠키, 리다이렉션 등을 처리할 수 있습니다.
  • 클라이언트가 요청한 페이지나 데이터를 서버에서 처리한 후 결과를 클라이언트에 반환합니다.

HttpServletResponse를 사용하는 상황

  • HTML 응답 보내기: 서버가 처리한 결과를 HTML 형태로 클라이언트에게 보내는 데 사용됩니다.
  • 리다이렉션 처리: 서버에서 다른 페이지로 이동할 때 사용됩니다.
  • 쿠키 설정: 클라이언트에게 쿠키를 설정하여, 브라우저에서 사용자 정보를 저장하고 유지할 수 있게 합니다.

예시:

위의 코드에서는 쿠키 설정리다이렉션을 위해 HttpServletResponse 객체를 사용합니다. 사용자가 로그인할 때 아이디닉네임을 쿠키에 저장하고, 로그인 처리 후 홈 페이지로 리다이렉트합니다.

 

@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);
    
    // 로그인 성공 후 쿠키를 설정
    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);  // 닉네임 쿠키 만료 시간 설정
        response.addCookie(idCookie);  // 응답에 쿠키 추가
        response.addCookie(nicknameCookie);  // 응답에 닉네임 쿠키 추가
    }
    
    // 로그인 후 홈 페이지로 리다이렉트
    toURL = (toURL == null || toURL.equals("")) ? "/" : toURL;
    return "redirect:" + toURL;
}

 

이 예시에서 response.addCookie(idCookie)와 response.addCookie(nicknameCookie)는 쿠키를 설정하여 클라이언트의 브라우저에 정보를 저장하게 합니다. 그리고 redirect:/는 로그인 후 사용자를 홈 페이지로 리다이렉트하는 데 사용됩니다.


3. HttpServletRequest와 HttpServletResponse: 차이점 요약

구분 HttpServletRequest HttpServletResponse
목적 클라이언트가 보낸 요청에 대한 정보를 처리 서버가 클라이언트에게 응답을 보내는 데 사용
주요 사용 요청 파라미터 가져오기, 세션 정보 확인, 요청 헤더 처리 HTML 응답 전송, 리다이렉션, 쿠키 설정, 응답 헤더 처리
상호작용 클라이언트에서 서버로의 요청 처리 서버에서 클라이언트로의 응답 처리

4. 어떤 상황에서 HttpServletRequest와 HttpServletResponse를 사용할까?

  • HttpServletRequest사용자 요청에 대한 정보를 처리할 때 사용됩니다. 예를 들어, 사용자가 로그인 폼을 제출하거나 검색을 요청할 때, 그 요청에 포함된 파라미터세션 정보를 가져올 때 사용됩니다.
  • HttpServletResponse서버가 사용자에게 응답을 보낼 때 사용됩니다. 예를 들어, 로그인 후 쿠키를 설정하거나, 처리된 데이터를 클라이언트로 전달할 때, 또는 리다이렉션을 처리할 때 사용됩니다.

결론

HttpServletRequestHttpServletResponse는 웹 애플리케이션에서 요청과 응답을 처리하는 데 매우 중요한 역할을 합니다.

각각 클라이언트에서 서버로 전달되는 요청과 서버에서 클라이언트로 전달되는 응답을 처리하며, 이를 통해 서버와 클라이언트 간의 데이터 흐름을 원활하게 합니다. 위

코드 예시에서 보았듯이, 요청 정보 확인응답 처리는 각각의 객체를 통해 이루어지며, 웹 애플리케이션의 핵심적인 작업을 처리하는 데 필수적인 도구들입니다.