Bean
스프링에서 Bean이란 스프링이 관리하는 오브젝트를 뜻한다.
빈이 생성되고, 존재하고, 적용되는 범위를 스프링에서는 빈의 스코프(Scope)라고 한다.
스프링에서는 기본 스코프인 싱글톤 외에 다양한 스코프를 가질 수 있는데, 스프링에서 만들어 지는 빈의 다양한 스코프에 대해서 살펴보자.
싱글톤 스코프(Singleton Scope)
- 스프링 빈의 기본 스코프로, 컨텍스트당 한개의 빈 오브젝트만 만들어지므로 주입이나 조회시 매번 같은 오브젝트가 리턴됨이 보장된다.
- 강제로 제거하지 않는한 스프링 컨테이너가 존재하는 동안 계속 유지된다.
프로토타입 스코프(Prototype Scope)
- 싱글톤과는 다르게 컨테이너에게 빈을 요청할 때마다 매번 새로운 오브젝트를 생성해 준다.
- 프로토타입 스코프는 IOC 기본 원칙을 따르지 않는 스코프로 프로토타입 스코프를 갖는 빈은 요청이 있을때마다 컨테이너가 생성하고 초기화하고 DI까지 해주기도 하지만 일단 빈을 제공하고 나면 컨테이너는 더이상 빈 오브젝트를 관리하지 않는다.
- 그렇기 때문에 프로토타입 빈은 이 빈을 주입받은 오브젝트에 종속적일 수밖에 없다.
- 즉, 프로토타입 빈을 주입받은 빈이 싱글톤이라면, 이 빈에 주입된 프로토타입 빈도 역시 싱글톤 생명주기를 따라 컨테이너가 종료될 때까지 유지된다.
- 오브젝트의 생성과 DI작업까지 마친 후에 컨테이너가 돌려준다는 점에서 new 키워드를 사용한 오브젝트 생성 방식과는 차이가 있다.
[활용]
매번 새로운 오브젝트가 필요하면서 DI를 통해 다른빈을 사용할 수 있어야 한다면 프로토타입 빈을 사용 하는 것이 좋다.
요청 스코프(Request Scope)
- 요청 스코프 빈은 하나의 웹 요청 안에서 만들어지고 해당 요청이 끝날 때 제거 된다.
- 각 요청별로 독립적인 빈이 만들어지기 때문에 빈 오브젝트 내에 상태 값을 저장해둬도 안전하다.
- 하나의 웹 요청을 처리하는 동안에 참조하는 요청 스코프 빈은 항상 동일한 오브젝트임이 보장되므로 동시에 여러 사용자가 많은 요청을 보내도 안전하다.(웹요청이 달라지면 별도의 요청 스코프 빈이 만들어지기 때문에)
[활용]
애플리케이션 코드에서 생성한 정보를 프레임워크 레벨의 서비스나 인터셉터 등에 전달할때 사용된다.
또는 애플리케이션 코드가 호출되기 전에 프레임워크나 인터셉터 등에서 생성한 정보를 애플리케이션 코드에서 이용할때도 유용하다.
예를 들어 보안 프레임워크에서 현재 요청에 관련된 권한 정보를 요청스코프 빈에 저장해뒀다가 필요한 빈에서 참조 할 수 있게 한다.
세션 스코프(Session Scope), 글로벌세션 스코프
- HTTP 세션은 사용자별로 만들어지고 브라우저를 닫거나 세션 타임이 종료될 때까지 유지되기 때문에 로그인 정보나 사용자별 선택옵션 등을 저장해두기에 유용하다.
- 웹페이지가 바뀌고 여러 요청을 거치는 동안에도 세션 스코프 빈은 계속 유지되고, HTTP 세션은 사용자별로 만들어지기 때문에 중복의 위험도 없다.
[활용]
HTTP 세션에 저장되는 정보를 웹 기술에 종속적이지 않은 오브젝트에 담아서 HTTP 세션에 직접 접근 가능한 프레젠테이션 계층과 서비스 계층 사이에서 주고 받을때 사용된다.
글로벌세션 스코프는 포틀릿에만 존재하는 글로벌 세션에 저장되는 빈이다.
(포틀릿이란, 웹포털 사이트에서 세분화되어 있는 작은 창이라고 이해하면 편하다. 포틀릿은 포탈 페이지를 구성하는 웹 콤포넌트로서, 포탈 페이지 내에 자유롭게 배치하여 포탈 페이지를 구성할 수 있다.즉, 재사용이 가능한 웹 구성요소로서 포탈 사용자들에게 관련 정보를 표시해주는데 사용된다.)
애플리케이션 스코프(Application Scope)
- 애플리케이션 스코프는 서블릿 컨텍스트에 저장되는 빈 오프젝트다.(서블릿 컨텍스트는 웹 애플리케이션마다 만들어진다.)
- 싱글톤 스코프와 비슷한 존재 범위를 갖지만 애플리케이션과 애플리케이션 컨텍스트의 존재범위가 다른 경우가 있고 이때 사용하는 스코프이다.
- 애플리케이션 스코프는 싱글톤 스코프와 마찬가지로 상태를 갖지 않거나, 상태가 있다고 하더라고 읽기전용으로 만들거나, 멀티스레드 환경에서 안전하도록 만들어야 한다.
[활용]
웹 애플리케이션과 애플리케이션 컨텍스트의 존재범위가 다른 경우가 존재하고 이때 사용된다.
참고) 토비의 스프링
'SpringFramework' 카테고리의 다른 글
[Spring] AOP(Aspect Oriented Programming)와 동작방식 (0) | 2022.02.24 |
---|