HttpServletRequest는 HTTP 요청의 모든 정보를 포함하는 객체이다. 클라이언트가 보낸 헤더, 파라미터, 요청 바디 등의 데이터를 처리하는 데 사용된다.getHeader(String name): 요청 헤더 값을 가져온다.getParameter(String name): 요청 파라미터 값을 가져온다.getInputStream(): 요청 바디의 내용을 스트림으로 읽는다.스프링 빈의 스코프는 객체가 생성되고 관리되는 범위를 결정한다.
| 스코프 | 설명 | 특징 |
|---|---|---|
| 싱글톤 | 애플리케이션 당 하나의 객체만 생성된다. | 대부분의 서비스에서 사용된다. |
| 세션 | 사용자 세션 당 하나의 객체가 생성된다. | 사용자별 세션 상태를 유지할 때 사용한다. |
| 리퀘스트 | HTTP 요청 당 하나의 객체가 생성된다. | 요청-응답 간 데이터를 저장할 때 사용한다. |
| 프로토타입 | 매 요청마다 새로운 객체가 생성된다. | 요청 간 독립된 상태가 필요할 때 사용한다. |
싱클톤 스코프 빈을 대부분 사용하며, 리퀘스트 스코프 빈은 요청 당 1개이고
1개의 요청과 응딥 프로세스가 끝나기 전가지는 새로 만들지 않고 만들어진 것을 공유하며 쓴다.
Request Scope Bean은 HTTP 요청 당 하나의 객체를 생성하며, 요청-응답 과정에서 동일한 객체를 재사용한다.
다른 빈 스코프와의 주요 차이점은 다음과 같다.
@RestController
@RequestMapping("/api")
public class TestController {
@GetMapping("/test")
public String testRequestScope(HttpServletRequest request) {
// 첫 번째 호출
String userAgent1 = request.getHeader("User-Agent");
System.out.println("첫 번째 호출: " + userAgent1);
// 두 번째 호출
String userAgent2 = request.getHeader("User-Agent");
System.out.println("두 번째 호출: " + userAgent2);
// 동일한 객체인지 확인
System.out.println("HttpServletRequest 객체 해시코드: " + request.hashCode());
return "User-Agent: " + userAgent1;
}
}
===================================================
[실행 결과]
첫 번째 호출: PostmanRuntime/7.32.0
두 번째 호출: PostmanRuntime/7.32.0
HttpServletRequest 객체 해시코드: 12345678
→ 출력했을 때 동일한 값이 출력되었으므로, 동일 객체가 요청-응답 과정 내에서 재사용되고 있음을 확인할 수 있다
특징:
일반적으로 1개의 proxy객체에서 1개의 실제 객체가 매핑되는데
request scope Bean은 proxy 객체:실제 객체 = 1: N 매핑이 가능하다