패스잇
백엔드 개발 · 심화

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 / Spring 면접 질문 전체 보기