인프런 커뮤니티 질문&답변

김경민님의 프로필 이미지
김경민

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

volatile, 메모리 가시성2

동적 의존성 주입과 Volatile

작성

·

115

0

[질문]

2024.08.07 까지는 정액할인, 2024.08.08 부터는 비율할인 정책이 반영되어야 하는 비즈니스 로직이 있고, 이를 스케줄러를 활용하여 2024.08.08 00:00:00에 Setter를 활용하여 비율할인을 구현한 Bean을 Injection 하여 처리하도록 구현했다고 가정하면,

 

이런 경우에도 아주 아주 엄밀하게 00:00:00에 모든 할인 정책이 완벽히 적용되어야 한다면, 인스턴스 변수에 volatile을 반드시 명시해줘야 하는 것인가요?

 

경험이 미천하여 웹프로그래밍 할 때 volatile를 사용한 것을 거의 보지 못하였고, 위의 가정처럼 아주 엄밀한 동작을 요구하는 경우는 없었고 그간 별다른 일도 없긴 하였는데, 개념을 듣고 복기해보니 장애의 요인이 될 수 있을 것 같아 여쭙습니다.

 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 김경민님

아주 엄밀하게 보면 해당 상황에 volatile을 명시해야 할 수 있습니다.

하지만 실용적인 관점에서 보면 00:00:00에 정확하게 inject하는 것 자체도 쉽지 않기 때문에(00:00:00에 inject 하는 코드가 있다고 해도 해당 코드가 정확하게 00:00:00에 멀티스레드에서 실행된다는 보장이 어렵습니다.) 이런 경우 미리 컴포넌트 들을 불러두고 시간으로 분기하는게 더 나은 선택이라 생각합니다.

감사합니다.

김경민님의 프로필 이미지
김경민
질문자

답변 감사합니다!

김경민님의 프로필 이미지
김경민

작성한 질문수

질문하기