Framework/Springboot

[Springboot] Scope란?

웹개발자(진) 2024. 5. 30. 20:44
반응형

 

 

잡담

미니 프로젝트 겸 게시판을 만들다가 게시글 작성할 때 로그인한 사람만 권한을 주고 싶어서 방법을 찾다가 Session에 대해 검색하게 되었습니다. 로그인 정보를 session에 담아놓고 필요할 때마다 어느 페이지에서든 꺼낼 수도 있다는 것을 알게 되었는데요, 혹은 session을 사용함으로써 해당 페이지에 대한 권한을 인증받는 용도로도 사용할 수 있었습니다. session 말고도 request나 application도 범위에 대해 활용이 다양했는데요. 이를 웹 애플리케이션의 생명주기라고 해서 해당 내용들을 검색해 봤습니다. 아래는 검색내용들입니다.


 

목차
 1. Request Scope (요청 범위)
 2. Session Scope (세션 범위)
 3. Application Scope (애플리케이션 범위)
 4. Global Session Scope (전역 세션 범위)
 5. Prototype Scope (프로토타입 범위)
 요약

 


 

웹 애플리케이션의 생명 주기에 따라 상태 정보를 저장하고 관리할 수 있는 다양한 범위(scope)가 있습니다. 각 범위는 특정 생명 주기와 사용자 간의 데이터 공유 수준에 따라 구분됩니다. 아래에 주요 범위와 그 생명 주기를 설명하겠습니다.

1. Request Scope (요청 범위)

Request 범위는 각 HTTP 요청에 대해 별도의 저장소를 제공합니다. 요청이 끝나면 해당 범위의 데이터도 함께 소멸됩니다.

특징

  • 범위: 하나의 HTTP 요청.
  • 수명 주기: 요청이 시작될 때 생성되고, 요청이 끝날 때 소멸.
  • 공유 수준: 단일 요청 내에서만 공유.

사용 예제

Spring에서 @RequestScope를 사용하여 요청 범위의 빈을 정의할 수 있습니다.

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;

@Component
@RequestScope
public class RequestScopedBean {
    private String value;

    // getter와 setter
}

 


 

2. Session Scope (세션 범위)

Session 범위는 사용자의 세션 동안 상태 정보를 저장합니다. 사용자가 로그인한 이후 로그아웃하거나 세션이 만료될 때까지 데이터를 유지합니다.

특징

  • 범위: 개별 사용자 세션.
  • 수명 주기: 세션이 시작될 때 생성되고, 세션이 만료되거나 로그아웃할 때 소멸.
  • 공유 수준: 개별 사용자 세션 내에서만 공유.

사용 예제

Spring에서 @SessionScope를 사용하여 세션 범위의 빈을 정의할 수 있습니다.

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
public class SessionScopedBean {
    private String value;

    // getter와 setter
}

 


 

3. Application Scope (애플리케이션 범위)

Application 범위는 애플리케이션 전체에서 상태 정보를 저장합니다. 애플리케이션이 시작될 때 생성되며, 애플리케이션이 종료될 때 소멸됩니다. 모든 사용자와 요청 간에 데이터를 공유할 수 있습니다.

특징

  • 범위: 애플리케이션 전체.
  • 수명 주기: 애플리케이션이 시작될 때 생성되고, 애플리케이션이 종료될 때 소멸.
  • 공유 수준: 모든 사용자와 모든 요청 간에 공유.

사용 예제

Spring에서 @ApplicationScope를 사용하여 애플리케이션 범위의 빈을 정의할 수 있습니다.

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.ApplicationScope;

@Component
@ApplicationScope
public class ApplicationScopedBean {
    private String value;

    // getter와 setter
}

 


 

4. Global Session Scope (전역 세션 범위)

Global Session 범위는 포털 애플리케이션과 같은 경우에 사용됩니다. 여러 웹 애플리케이션 간에 공유되는 범위로, 특정 사용자의 전역 세션 동안 데이터를 유지합니다.

특징

  • 범위: 포털 애플리케이션의 전역 세션.
  • 수명 주기: 전역 세션이 시작될 때 생성되고, 전역 세션이 만료될 때 소멸.
  • 공유 수준: 전역 세션 내의 모든 애플리케이션 간에 공유.

사용 예제

Spring에서 @GlobalSessionScope를 사용하여 전역 세션 범위의 빈을 정의할 수 있습니다. 이 기능은 주로 포털 애플리케이션에서 사용되므로 일반적인 웹 애플리케이션에서는 잘 사용되지 않습니다.

 


 

5. Prototype Scope (프로토타입 범위)

Prototype 범위는 빈이 요청될 때마다 새로운 인스턴스를 생성합니다. 이는 주로 상태가 없는 빈을 사용할 때 유용합니다.

특징

  • 범위: 각 빈 요청마다.
  • 수명 주기: 빈을 요청할 때마다 새로운 인스턴스가 생성되고, 더 이상 참조되지 않으면 소멸.
  • 공유 수준: 각 요청에 대해 별도의 인스턴스 제공.

사용 예제

Spring에서 @Scope("prototype")을 사용하여 프로토타입 범위의 빈을 정의할 수 있습니다.

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("prototype")
public class PrototypeScopedBean {
    private String value;

    // getter와 setter
}

 


 

요약

  • Request Scope: 각 HTTP 요청 동안 상태 유지.
  • Session Scope: 개별 사용자 세션 동안 상태 유지.
  • Application Scope: 애플리케이션 전체에서 상태 유지.
  • Global Session Scope: 여러 애플리케이션 간에 공유되는 전역 세션 동안 상태 유지.
  • Prototype Scope: 빈 요청 시마다 새로운 인스턴스 생성.

이와 같이 다양한 범위와 생명 주기를 통해 웹 애플리케이션에서 상태 정보를 효과적으로 관리할 수 있습니다. 사용 사례에 따라 적절한 범위를 선택하여 데이터를 저장하고 공유하는 것이 중요합니다.

 


반응형

'Framework > Springboot' 카테고리의 다른 글

[Springboot] thymeleaf 조건문 if  (0) 2024.05.31
[Springboot] Session이란?  (0) 2024.05.30
[Springboot] DB설정 / JPA  (0) 2024.05.09
[Springboot] Controller (get / post)  (0) 2024.05.09
[Springboot] Springboot 기본  (0) 2024.05.08