순수 자바(Java)와 멀티스레드를 활용하여,
동시 요청 환경에서 발생하는 데이터 정합성 문제를 재현하고 해결한다.
- ExecutorService를 활용한 멀티스레드 환경 구성
- CountDownLatch를 이용한 정확한 동시 요청 시점 제어
- synchronized와 ReentrantLock의 동작 원리 및 차이 이해
- 동시성 제어 실패 시 발생하는 중복 예약 문제 검증 및 해결
- 파일 I/O를 활용한 예약 로그 관리
- 프로그램 실행 시 지정된 개수의 좌석을 메모리에 생성한다.
- 각 좌석은 고유한 번호와 예약 상태를 가진다.
- 여러 스레드가 동일한 좌석 번호로 예약 요청을 수행한다.
- 예약 가능한 좌석은 예약 완료 상태로 변경된다.
- 이미 예약된 좌석은 다시 예약할 수 없다.
- 동시에 발생한 예약 요청 중 하나만 성공해야 한다.
- 예약 성공 및 실패 결과를 콘솔에 출력한다.
- 예약 성공 및 실패 결과를 reservation.log 파일에 기록한다.
- 순수 Java만 사용하여 구현한다.
- Spring Framework 및 외부 라이브러리를 사용하지 않는다.
- 데이터는 메모리에서 관리한다.
- 동시성 검증을 위한 테스트 코드를 작성한다.
- 좌석은 객체로 관리하며 예약 상태를 가진다.
- 여러 사용자는 여러 개의 스레드로 표현할 수 있다.
- 스레드 관리는
ExecutorService를 활용한다. - 동시 실행 시점 제어는
CountDownLatch를 활용할 수 있다. - 시간 지연 및 경쟁 상황 재현은
Thread.sleep()을 활용할 수 있다.