질문
- 멀티 스레드 환경에서 테스트를 한 경험?
- 멀티 스레드에서 테스트 할 때
- synchronized 사용
- mysql database lock 사용
- pessimistic lock
- Optimistic lock
- Named lock
- Redis database lock 사용
요약
- 병렬 프로그램이 올바르게 동작하는지 테스트하는 일은 굉장히 어려운 작업
- 병렬 프로그램에서 발생하는 오류는 대부분 발생 확률이 아주 작은 타이밍 문제, 부하 문제, 아니면 기타 쉽게 발현되지 않는 여러 원인에 의해 발생하기 때문
- 숨어 있는 버그를 상용 서비스 이전에 발견할 수 있는 가장 좋은 방법은 바로 전통적인 테스트 방법과 코드 리뷰, 자동화된 분석 도구를 사용하는 방법
- 각 방법은 모두 다른 방법이 잘 찾아내지 못하는 오류를 찾아낼 수 있으니, 다양한 방법을 동원해 테스트해야 오류를 최대한 줄일 수 있음
- 명시적으로 Lock 클래스를 사용해 스레드를 동기화하면 암묵적인 락보다 더 많은 기능을 활용할 수 있음
- 예를 들어 락을 확보할 수 없는 상황에 유연하게 대처하는 방법이나 대기 큐에서 기다리는 방법과 규칙도 원하는대로 정할 수 있음
- ReentrantLock에서만 제공되고 synchronized 구문은 제공하지 않는 동기화 관련 기능이 꼭 필요한 경우에만 ReentrantLock을 사용하도록 권장
- 읽기-쓰기 락을 사용하면 읽기 작업만 처리하는 다수의 스레드는 동기화된 값을 얼마든지 동시에 읽어갈 수 있음
- 읽기 작업이 대부분인 데이터 구조에 읽기-쓰기 락을 사용하면 확장성을 높여주는 훌륭한 도구가 됨