[Spring] 멀티 스레드 환경에서 오류 발생

maxxyoung·2022년 1월 10일
0

오류 발생 상황

이미지 미리보기 서비스를 운영서버 실행 중 오류 사항이 나타남
A라는 사용자와 B라는 사용자가 거의 동시에 이미지 미리보기를 눌렀을 경우
A사용자는 제대로된 이미지 미리보기가 보였다면 B 사용자는 A사용자가 누른 이미지가 미리보기로 뜸

발생 원인

SpringFramework 기반으로 만든 어플리케이션은 기동 시 ApplicationContext라는 Static Sharing Pool을 생성함
하나의 싱글톤 패턴 방식의 구현된 오브젝트가 생성됨

이렇게 등록된 오브젝트를 Spring Bean이라고 함
static으로 선언을 하지 않아도 ApplicationContext
가 이미 공유 되어 있기때문에 등록된 Bean은 멀티 Thread 환경에서 서로 공유를 하게됨

Spring Bean의 멤버변수 또한 멀티쓰레드 환경에서 공유가 된다는 것이 중요함.

해결 방법

스프링 빈에 선언된 멤버 변수를 지역변수로 변경

느낀점

Spring이 Thread safe하다는 것만 알고 있고 어디까지 safe한지 몰라 일어난 오류사항이였다. 이 오류를 바로잡기 특히 더 어려웠던 것이

  1. 간헐적으로 오류가 남
  2. 오류 로그가 없음. 당연함 코드는 정확하게 동작했으니

1주일을 이 서비스와 관련된 모든 것을 찾는데 썼다. 하지만 결과는 잘못이해하고 쓴 멤버변수 하나 때문에 이런 오류가 났다. 앞으로는 더 파고들며 공부해야겠다.

참고

profile
오직 나만을 위한 글. 틀린 부분 말씀해 주시면 감사드립니다.

0개의 댓글