강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của iohyeon
iohyeon

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

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

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

Viết

·

55

0

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

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

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

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

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

javaspring동시성

Câu trả lời 2

0

169developer9973님의 프로필 이미지
169developer9973
Người chia sẻ kiến thức

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

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

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

감사합니다.

0

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

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

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

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

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

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

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

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

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

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

Hình ảnh hồ sơ của iohyeon
iohyeon

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

Đặt câu hỏi