작성
·
1.3K
0
멀티스레드 병렬 프로그래밍은 싱글 스레드와 다르게 디버깅하기가 매우 까다롭더라구요 ㅠㅠ
I/O 출력을 하거나 로그 파일로 따로 빼서 로깅을 확인하는건 싱글스레드까지만 가능하고 멀티스레드에서는 별 도움이 되지 못하더라구요
이 외에 다른 방법으로는 디버깅 모드로 실행 시 문제가 발생했을 때, memory를 확인하면서 역추적하면서 문제를 해결하는 방법밖에 떠오르질 않는데, 이 방법이 맞을까요?
예를 들면 여러 스레드를 실행하면서 call 횟수, 작업하는 변수의 주소값, 수행 시간 등을 list에 저장한 다음에 조사식에 해당 list를 끌어와서 확인해보려고 하는데...
현업에서는 멀티스레드 로깅 및 문제 역추적할 때 어떤 방법을 사용하나요..?
답변 2
0
사실 메모리를 봐도 쉽지 않고, 코드를 보면서 상상력(?)을 동원하며 볼 수밖에 없습니다.
그 정도로 세세하게 보는 것은 의미 없고 경합이 일어났을 시 어떤 일이 벌어지는지를 중점으로 봐야합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
멀티스레드 프로그래밍에서 디버깅은 실제로 매우 까다롭습니다. dustjdtns00님께서 언급하신 것처럼 변수의 추적, 시간 측정 등을 통해 문제를 역추적하는 방법은 맞습니다. 실제로 현업에서도 사용하는 몇 가지 방법을 소개드리겠습니다:
더불어, Spring Boot 애플리케이션의 로깅 설정을 참고하면 멀티스레드 환경에서 로깅을 좀 더 체계적으로 수행할 수 있는 방법을 얻을 수도 있습니다. 예를 들어, Spring Boot에서는 다음과 같은 방식으로 로깅 레벨을 조정하거나 추가적인 로깅 모드를 활성화 할 수 있습니다:
--debug
또는 --trace
플래그를 이용하여 애플리케이션을 실행하면 기본 로깅 외에 더 많은 정보를 출력하여 문제를 진단하는 데 도움을 줄 수 있습니다.CustomizableTraceInterceptor
를 사용하여 JpaRepository
내부에서 호출되는 메소드에 대한 더 상세한 로깅 정보를 얻을 수 있습니다.이러한 방법들을 자신이 사용하고 있는 언어나 환경에 맞게 적용해볼 수 있습니다.
참조 URL:
- Spring Boot 로깅 문서: Console Output
- Spring Data JPA 로깅 예제: FAQ.Common
이러한 기법들을 혼합하여 사용하면 멀티스레드 환경에서 발생하는 복잡한 문제들을 효과적으로 분석하고 해결할 수 있게 됩니다.