← 질문 목록
#35깊이 0

스프링 빈이 싱글톤인 것이 언제 문제가 되는가?

프레임워크심화동시성

빈이 상태를 들고 있을 때다. 인스턴스가 하나뿐이라 모든 요청이 같은 필드를 공유한다. 한 요청이 써 넣은 값을 다른 요청이 읽는다.

두는 자리공유 범위안전한가
빈의 필드애플리케이션 전체아니다. 요청끼리 섞인다
메서드 지역 변수호출 하나안전하다
ThreadLocal스레드 하나반납을 빠뜨리면 샌다

주의

가장 흔한 사고는 빈에 사용자 정보를 담아두는 것이다. 테스트에서는 요청이 하나씩 들어와 안 드러나고, 동시 접속이 생기는 순간 남의 데이터가 보인다.

해법은 상태를 빈 밖으로 빼는 것이다. 필요한 값은 인자로 넘기고, 빈은 동작만 들고 있게 한다. 스코프를 요청 단위로 바꾸는 방법도 있지만 대개 마지막 수단이다.

상태 없는 빈은 매 요청마다 새로 만들 필요가 없어 싱글톤이 기본이다. 대부분의 빈이 상태 없는 서비스라 하나면 충분하다. 요청마다 만들면 생성 비용과 GC 부담이 그대로 늘어난다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

스프링 빈이 싱글톤인 것이 언제 문제가 되는가?