[ CS Study ] Spring Web MVC & Thread

이승렬·2023년 7월 19일

[Spring]

목록 보기
12/15
post-thumbnail

#1. Controller

Spring Web MVC에서는 기본적으로 요청마다 새로운 스레드가 생성되어 Controller를 통해 요청을 수행합니다.

그러나 Spring 프레임워크는 기본적으로 Singleton 패턴을 사용하여 Controller 인스턴스를 관리합니다.

따라서 동일한 Controller 클래스에 대한 모든 요청은 동일한 인스턴스를 공유하게 됩니다.

#2. SingleTone

Spring에서 Singleton은 기본적으로 Bean 스코프로 설정되어 있습니다. 이는 ApplicationContext (또는 Spring Boot의 경우 SpringApplication)에서 Bean을 생성하고 관리할 때 해당 Bean이 단일 인스턴스로 유지되는 것을 의미합니다. Spring Web MVC에서도 Controller는 ApplicationContext의 Bean으로 등록되며 Singleton 스코프로 관리됩니다.

따라서 동일한 Controller 클래스의 모든 요청은 동일한 인스턴스를 공유하게 되어 여러 스레드에서 안전하게 요청을 처리할 수 있습니다. 이는 매 요청마다 새로운 Controller 인스턴스를 생성하는 비용을 피하면서도 공유된 리소스에 대한 동시 액세스 문제를 방지하는 데 도움이 됩니다.

그러나 주의해야 할 점은 Controller 내부의 상태를 변경하지 않거나, 상태를 변경해야 하는 경우에는 스레드 안전성에 대해 신중하게 고려해야 합니다.

상태 변경이 필요한 경우에는 해당 상태를 적절하게 동기화하여 다중 스레드 환경에서 안전하게 작동하도록 해야 합니다.

profile
Backend_Developer

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

항상 좋은 글 감사합니다.

답글 달기