inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Cách giải quyết các vấn đề đồng thời bằng hệ thống kiểm kê

Hãy thử sử dụng Khóa có tên

동시성 검증 코드에 관한 문의

91

DevelopersNan

1 câu hỏi đã được viết

0

안녕하세요. 동시성 검증 코드 관련하여 궁금한 점이 있어 문의드립니다.

강의에서 ExecutorService를 사용하여 동시성 검증을 수행하신 것으로 보았는데, 이 방식만으로 실제 동시성 문제를 충분히 검증할 수 있을지 궁금합니다.

컨텍스트 스위칭 타이밍에 따라 경합이 발생하지 않을 가능성도 있을 것 같습니다.

예전에 면접에서 비슷한 질문을 받았는데, ExecutorService 기반 테스트만으로는 실제 운영 환경(수십만 건의 요청)에서 발생할 수 있는 동시성 이슈를 완전히 검증하기 어렵다는 지적을 받은 적이 있습니다.

혹시 이러한 한계를 보완할 수 있는 다른 검증 방법이나 접근 방식이 있을까요?

java spring 동시성

Câu trả lời 2

0

169developer9973

DevelopersNan 님 안녕하세요!
좋은질문 주셔서 감사드립니다.

1차적으로는 코드내에 Thread.sleep 같은 코드를 일시적으로 추가해서 경합이 발생할 수 있도록 코드를 제어할 수 있을듯합니다.

하지만, 이것도 완벽한 방법은 아니기 때문에 실제로 많은 환경에서의 케이스를 테스트 하고싶으시다면 부하테스트 툴을 활용할 수 있을 것같습니다.
많은 트래픽을 받을 수 있도록 서버를 세팅해놓고 부하테스트 툴을 통해 많은 트래픽을 유발시킨 후, 데이터가 의도한 대로 저장이 되었는지 확인해볼 수 있을듯합니다.

감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
DevelopersNan님, 동시성 검증에 대한 질문을 주셨군요.

ExecutorService를 사용한 동시성 검증은 매우 유용한 방법이지만 말씀하신 것처럼 실제 운영 환경에서의 모든 동시성 문제를 포착하기에는 한계가 있을 수 있습니다. 컨텍스트 스위칭이나 스레드 스케줄링에 따라 테스트 간에 경합 조건이 항상 발생하는 것은 아니기 때문입니다.

이러한 동시성 검증의 한계를 보완하기 위해 여러 가지 접근 방법을 고려해 볼 수 있습니다:

  1. 시스템 프로퍼티 조정: 테스트 환경에서 자바 프로세스의 스레드 수나 CPU 코어 수를 조정하여 경합이 더 잘 발생하도록 할 수 있습니다.

  2. 쓰기 락과 같은 메커니즘 사용: ReentrantLock이나 synchronized 블록을 사용하여 경합 조건을 명시적으로 제어하고 테스트할 수 있습니다.

  3. 프로파일링 도구 사용: JProfiler나 VisualVM과 같은 프로파일링 도구를 이용하여 시스템에서 실제로 발생하는 스레드 간 경합과 대기 시간을 분석할 수 있습니다.

  4. 대규모 테스트 환경 구성: 다수의 스레드를 운용할 수 있는 대규모 테스트 환경을 구성하여, 실제로 발생할 수 있는 스레드 경합 상황을 재현하는 방법입니다.

  5. 모의 환경에서의 대규모 테스트: 실제 유사한 부하를 모의 테스트 환경에서 시뮬레이션을 통해 검증하는 것도 좋은 방법입니다.

이와 같은 방법들을 통해 더 현실적인 동시성 문제를 검증할 수 있습니다. 운영 환경과 최대한 유사한 부하를 테스트해보는 것이 중요합니다.

추가적으로, 테스트 및 검증에 대한 더 많은 정보를 원하는 경우 Spring Boot Reference Documentation의 테스트 가이드를 참고하시면 상세한 예제를 볼 수 있을 것입니다.

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

40

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

99

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