동시성 검증 코드에 관한 문의
91
1 asked
안녕하세요. 동시성 검증 코드 관련하여 궁금한 점이 있어 문의드립니다.
강의에서 ExecutorService를 사용하여 동시성 검증을 수행하신 것으로 보았는데, 이 방식만으로 실제 동시성 문제를 충분히 검증할 수 있을지 궁금합니다.
컨텍스트 스위칭 타이밍에 따라 경합이 발생하지 않을 가능성도 있을 것 같습니다.
예전에 면접에서 비슷한 질문을 받았는데, ExecutorService 기반 테스트만으로는 실제 운영 환경(수십만 건의 요청)에서 발생할 수 있는 동시성 이슈를 완전히 검증하기 어렵다는 지적을 받은 적이 있습니다.
혹시 이러한 한계를 보완할 수 있는 다른 검증 방법이나 접근 방식이 있을까요?
Answer 2
0
DevelopersNan 님 안녕하세요!
좋은질문 주셔서 감사드립니다.
1차적으로는 코드내에 Thread.sleep 같은 코드를 일시적으로 추가해서 경합이 발생할 수 있도록 코드를 제어할 수 있을듯합니다.
하지만, 이것도 완벽한 방법은 아니기 때문에 실제로 많은 환경에서의 케이스를 테스트 하고싶으시다면 부하테스트 툴을 활용할 수 있을 것같습니다.
많은 트래픽을 받을 수 있도록 서버를 세팅해놓고 부하테스트 툴을 통해 많은 트래픽을 유발시킨 후, 데이터가 의도한 대로 저장이 되었는지 확인해볼 수 있을듯합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
DevelopersNan님, 동시성 검증에 대한 질문을 주셨군요.
ExecutorService를 사용한 동시성 검증은 매우 유용한 방법이지만 말씀하신 것처럼 실제 운영 환경에서의 모든 동시성 문제를 포착하기에는 한계가 있을 수 있습니다. 컨텍스트 스위칭이나 스레드 스케줄링에 따라 테스트 간에 경합 조건이 항상 발생하는 것은 아니기 때문입니다.
이러한 동시성 검증의 한계를 보완하기 위해 여러 가지 접근 방법을 고려해 볼 수 있습니다:
시스템 프로퍼티 조정: 테스트 환경에서 자바 프로세스의 스레드 수나 CPU 코어 수를 조정하여 경합이 더 잘 발생하도록 할 수 있습니다.
쓰기 락과 같은 메커니즘 사용:
ReentrantLock이나synchronized블록을 사용하여 경합 조건을 명시적으로 제어하고 테스트할 수 있습니다.프로파일링 도구 사용: JProfiler나 VisualVM과 같은 프로파일링 도구를 이용하여 시스템에서 실제로 발생하는 스레드 간 경합과 대기 시간을 분석할 수 있습니다.
대규모 테스트 환경 구성: 다수의 스레드를 운용할 수 있는 대규모 테스트 환경을 구성하여, 실제로 발생할 수 있는 스레드 경합 상황을 재현하는 방법입니다.
모의 환경에서의 대규모 테스트: 실제 유사한 부하를 모의 테스트 환경에서 시뮬레이션을 통해 검증하는 것도 좋은 방법입니다.
이와 같은 방법들을 통해 더 현실적인 동시성 문제를 검증할 수 있습니다. 운영 환경과 최대한 유사한 부하를 테스트해보는 것이 중요합니다.
추가적으로, 테스트 및 검증에 대한 더 많은 정보를 원하는 경우 Spring Boot Reference Documentation의 테스트 가이드를 참고하시면 상세한 예제를 볼 수 있을 것입니다.
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
39
2
낙관적 락을 사용할 떄 차이점
0
118
2
단일연산
0
69
2
낙관적락vs. 레디스락
0
106
2
안녕하세요. 레디슨 질문있습니다..!!
0
65
2
@Lock(OPTIMISTIC)이 필요한 이유
0
88
2
get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?
0
128
2
DataSource Hikari 사용 이유
0
144
2
saveAndFlush 사용 이유 문의
0
111
3
비관적 락 VS 네임드 락
0
158
3
application.yaml 에 redis 정보
0
97
2
왜 클래스 이름에 Facade 가 붙나요?
0
181
2
@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.
0
217
2
@modifying 이용한 동시성 제어
0
167
2
DB락과 분산락
0
260
2
NamedLock 테스트 실패
0
186
2
테스트에서 트랜잭션 어노테이션 질문 있습니다.
0
171
2
optimistic Lock 재시도 질문입니다.
0
229
2
낙관적 락 테스트 실패
0
239
2
오류?
0
1624
4
LettureLockStockFacadeTest에서 오류가 발생합니다.
1
267
2
Pessimistic Lock 전체 테스트 오류 문의
0
357
3
비관적 락 vs 레디스(Lettuce)락 비교 관련 질문
0
458
2
낙관적락 vs 네임드락
0
386
2

