Race Condition → synchronized + 데드락 → 잠금 순서 통일 + 스레드 풀 크기 조정 경험
학교 수업과 팀 프로젝트에서 멀티스레드 환경의 버그를 처음 직접 경험했습니다. 가장 먼저 맞닥뜨린 건 데이터 경쟁(Race Condition) 문제였는데, 같은 변수를 여러 스레드가 동시에 쓰면서 결과가 실행마다 달라지는 상황이었습니다. synchronized 키워드로 임계 구역을 보호하면서 접근 순서를 직렬화해서 일관성을 확보했습니다. 데드락은 두 스레드가 서로 다른 순서로 잠금을 획득하려다가 서로 기다리는 상황에 빠지는 케이스를 실습에서 경험했고, 잠금 획득 순서를 전역적으로 통일하는 방식으로 해결했습니다. 스레드 풀 크기를 너무 크게 설정하면 컨텍스트 스위칭 비용이 오히려 성능을 낮추는 경험도 했습니다.
멀티스레드 버그는 재현이 어려워서 예방하는 설계가 사후 디버깅보다 훨씬 낫다는 걸 배웠습니다.