백엔드 개발 · 심화
Spring에서 싱글톤 빈의 동시성 문제는 어떻게 해결하나요?
힌트 · 상태를 가지지 않는 설계, ThreadLocal 등을 고려해보세요.
ThreadLocalsynchronizedAtomic불변객체상태_관리_회피
모범답안
Spring의 싱글톤 빈은 애플리케이션 내에서 단 하나의 인스턴스만 생성되므로, 여러 스레드가 동시에 접근할 때 동시성 문제가 발생할 수 있습니다.
가장 좋은 해결책은 싱글톤 빈이 상태를 가지지 않도록 설계하는 것입니다. 즉, 멤버 변수를 최소화하고, 필요한 경우 불변 객체를 사용하거나, 로컬 변수만을 활용하는 것이죠.
만약 불가피하게 상태를 가져야 한다면, ThreadLocal을 사용하여 각 스레드마다 독립적인 상태를 유지하도록 할 수 있습니다. 또는 synchronized 키워드나 Atomic 변수를 사용하여 동기화를 처리할 수도 있지만, 성능 저하를 고려해야 합니다.
// ThreadLocal 예시
private ThreadLocal<String> myContext = new ThreadLocal<>();
public void process(String input) {
myContext.set(input);
// ... 작업 수행 ...
myContext.remove(); // 사용 후 반드시 제거
}
핵심은 싱글톤 빈의 상태를 최소화하고, 동시성 문제가 발생할 수 있는 부분을 명확히 파악하여 적절한 동기화 메커니즘을 적용하는 것입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Java / Spring 면접 질문
- Java 8의 Stream API와 병렬 스트림(Parallel Stream)의 사용법과 주의사항에 대해 설명해주세요.
- Spring Security의 인증(Authentication)과 인가(Authorization)의 차이점과 동작 방식을 설명해주세요.
- JWT(JSON Web Token)의 구조와 Spring에서의 활용 방법에 대해 설명해주세요.
- Java의 Garbage Collection 동작 원리와 G1 GC의 특징에 대해 설명해주세요.
- Java의 synchronized 키워드와 ReentrantLock의 차이점은 무엇인가요?
- Spring WebFlux와 기존 Spring MVC의 차이점은 무엇인가요?