📌 자바에서 Session, Request, Response 차이점
자바 웹 개발(Spring Boot, Servlet 등)에서 session, request, response는 모두 클라이언트와 서버 간의 통신을 다룰 때 사용되는 객체다. 각각의 역할과 차이점을 톺아보자.
1️⃣ HttpSession (세션)
👉 특정 클라이언트(사용자)와 서버 간의 상태를 유지하는 객체
✅ 특징
- 클라이언트가 서버에 접속하면 고유한 세션 ID가 생성됨.
- 세션에 데이터를 저장하면 여러 요청(request)에서도 유지 가능 (로그인 정보 등).
- 보통 session.invalidate()를 호출하거나 일정 시간이 지나면 세션이 만료됨.
✅ 예제 (세션 저장 & 가져오기)
HttpSession session = request.getSession(); // 세션 가져오기 (없으면 생성)
session.setAttribute("username", "BG"); // 세션에 데이터 저장
String username = (String) session.getAttribute("username"); // 세션에서 데이터 가져오기
session.invalidate(); // 세션 삭제
✅ 언제 사용할까?
- 로그인한 사용자의 정보를 여러 페이지에서 유지할 때
- 쇼핑몰에서 장바구니 같은 기능을 구현할 때
2️⃣ HttpServletRequest (요청)
👉 클라이언트가 서버로 보내는 HTTP 요청 정보를 담고 있는 객체
✅ 특징
- 사용자가 입력한 폼 데이터, URL 파라미터 등을 읽을 수 있음.
- GET, POST 같은 HTTP 메서드 정보를 확인할 수 있음.
- 요청 헤더, 쿠키, 세션 등 다양한 정보를 제공함.
✅ 예제 (요청 파라미터 & 헤더 가져오기)
String name = request.getParameter("name"); // URL 또는 폼에서 name 파라미터 받기
String userAgent = request.getHeader("User-Agent"); // 요청 헤더 가져오기
✅ 언제 사용할까?
- 클라이언트가 입력한 데이터를 서버에서 받을 때 (request.getParameter())
- 로그인 요청 처리, 게시글 등록 등
3️⃣ HttpServletResponse (응답)
👉 서버가 클라이언트에게 보내는 HTTP 응답을 처리하는 객체
✅ 특징
- 브라우저(클라이언트)에게 데이터를 보낼 수 있음.
- HTTP 응답 코드, 헤더, 쿠키 등을 설정 가능.
- 리디렉션(sendRedirect()), JSON 응답, 파일 다운로드 등 다양한 용도로 사용됨.
✅ 예제 (응답 데이터 보내기 & 리디렉트)
response.setContentType("text/html"); // 응답 타입 설정
response.setCharacterEncoding("UTF-8"); // 문자 인코딩 설정
PrintWriter out = response.getWriter();
out.println("<h1>Hello, BG!</h1>"); // HTML 응답 출력
response.sendRedirect("home.jsp"); // 다른 페이지로 리디렉트
✅ 언제 사용할까?
- 웹 브라우저에 데이터를 출력할 때 (response.getWriter())
- 특정 페이지로 이동시킬 때 (response.sendRedirect())
- API에서 JSON 데이터를 응답할 때
🛠 정리 (한눈에 비교)
객체역할주요 기능예제
Session | 클라이언트 상태 유지 | 로그인 정보 저장, 장바구니 | session.setAttribute("key", value); |
Request | 클라이언트의 요청 정보 | URL 파라미터, 헤더 읽기 | request.getParameter("name"); |
Response | 서버의 응답 처리 | HTML 출력, 리디렉트 | response.sendRedirect("home.jsp"); |
🎯 결론
- session → 사용자 정보를 유지할 때 (로그인 등)
- request → 클라이언트가 서버에 보낸 데이터를 가져올 때
- response → 서버가 클라이언트에게 데이터를 보낼 때
'개발 > Spring' 카테고리의 다른 글
null-safe 체크 팁!! (0) | 2025.04.08 |
---|---|
java.lang.IllegalAccessError:cannot access class com.sun.crypto.provider.SunJCE (in module java.base) because module java.base does not export com.sun.crypto.provider to unnamed module 오류 해결 방법 (1) | 2025.02.10 |
지정한 날짜에 스케쥴러 건너뛰기 (0) | 2024.06.27 |
@Scheduled 활용하여 미출퇴근 알림톡 구현 (0) | 2024.04.29 |
port 8080 was already in use.. (0) | 2023.12.22 |