Home Spring Bean은 상태를 가져도 되는가
Post
Cancel

Spring Bean은 상태를 가져도 되는가

Spring Bean은 상태를 가져도 되는가?

🎊 시작하기 전에..

EntryDSM에서 Entry 6.0을 작업하면서, 중간에 생겼던 오류 중 pdf 미리보기에서 다른 사용자의 사진이 보여지는 현상이 있었는데 QA를 진행하면서 원인을 찾았다.

해당 코드를 짧게 보자면

1
2
3
4
5
6
7
@Component
class PdfConverter {
    
    private final Map<String, Object> values = HashMap<>();
    
    ...
}

와 같은 구조였는데 Bean은 상태를 가지면 안된다. 위의 코드에서는 Bean이 싱글톤이므로 요청이 들어와도 이전의 인스턴스를 그대로 사용하는데 이 상황에서 values까지 그대로 있었으므로 덮어쓰기 되지 않는 부분은 이전 사람의 값이 남아있는 것이었다. 따라서 Spring Bean은 State less해야한다는 것을 깨닫고 이 글을 작성하게되었다.

📌 Spring Bean이란?

Spring Bean이란 Spring IoC Container(Application Context)가 관리하는 자바 객체를 Spring Bean이라 합니다.

😵 Spring Bean이 상태를 가지면 안되는 이유

위에서 서술했던 예시처럼 생각치 못한 크리티컬한 오류가 발생할 수 있다, 또한 상태를 가지게 된다면 Thread-Safe하지 않는다.

❓ 상태가 뭔데?

값이 변할 수 있는 인스턴스 멤버 변수가 존재하는 것.

This post is licensed under CC BY 4.0 by the author.