Skip to content

Conversation

@chanwonlee
Copy link
Contributor

관련 Issue (필수)

주요 변경 사항 (필수)

테스트를 진행하는 과정에서 로직 오류를 발견하여 아래와 같이 수정하였습니다.

객차 타입 검증 로직 수정

유효하지 않은 좌석에 대한 검증 순서에 문제가 있어, 검증 로직의 흐름을 보다 명확하게 조정하였습니다.

DTO로 전달된 승객 정보 List 복사 처리

record 내부의 List는 불변이 아니기 때문에 정렬 등 가공 시 원본이 변경될 수 있습니다. 데이터 무결성을 위해 new ArrayList<>()로 복사하여 사용하도록 수정했습니다.

운행 순서 검증 로직 추가

기차 스케줄과 일치하지 않는 순서로 예매를 시도하는 경우 적절한 예외를 반환하도록 검증 로직을 추가하였습니다.

리뷰어 참고 사항

테스트 작성 중 동시성 이슈가 발생하여, 이를 해결하기 위해 다양한 락 처리 방식들을 공부하면서 적용하려고 하였습니다.
다만, 트랜잭션이 분리되어 있고 좌석이 아닌 겹치는 구간을 기준으로 락을 걸어야 하는 구조적 특성상, 최적의 방법을 찾기 어려웠습니다.
일단 이중 락 방식으로 일단 동시성 문제를 해결하였고 k6로 400명 테스트에서 기존 코드와 비교하여 성능 차이는 크지 않음을 확인했습니다.
비관적 락이 두 번 발생하다 보니 성능에 영향을 줄 수 있는 여지가 있어, 추후 시간적 여유가 생기면 더 나은 구조와 방법으로 성능 개선을 진행할 예정입니다.

추가 정보

없음

PR 작성 체크리스트 (필수)

  • 제목이 Issue와 동일함을 확인했습니다.
  • 리뷰어를 지정했습니다.
  • 프로젝트를 연결했습니다.

Copy link
Contributor

@Friox Friox left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테스트 대상 서비스 로직의 문제점을 찾아 수정까지 해주셨네요,
ExecutorService와 같이 동시성을 포함한 테스트라 상당히 까다로웠을텐데 잘 작성해주신 것 같습니다.
저 또한 동시성과 관련한 테스트를 어떻게 해야하나 싶었는데, 참고하여 공부해보겠습니다.
고생하셨습니다! 👍👍

Copy link
Contributor

@Jimin730 Jimin730 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동시성 테스트 부분은 테스트 코드도 아주 복잡하네요..
단순한 테스트 코드만 작성해보았는데 이렇게 복잡한 테스트 코드도 한 번 참고 해 볼 수 있어서 좋았습니다! 고생하셨습니다!

Copy link
Contributor

@Yunsung-Jo Yunsung-Jo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다! 👍

@chanwonlee chanwonlee force-pushed the test/207-reservation-create-test branch from 9179f75 to 73e6ca4 Compare August 7, 2025 02:06
Copy link
Contributor

@Ogu1208 Ogu1208 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

윤성님이 말씀하신 것처럼 좌석 자체에 락을 걸면 물리적으로 같은 열차를 사용하는 다른 스케줄에서 같은 좌석 예약 시에 이슈가 있을 것 같습니다.
초반에 그래서 SeatReservation 구조를 고민을 많이 했었는데 다시 원점으로 돌아가네요 ㅠㅠ
모두가 같이 열차 스케줄, 구간을 고려해서 어떻게 동시성 락을 해결할 수 있을지 고민해봐야 할 것 같습니다 ㅠ
고생하셨습니다!! 👍

@chanwonlee chanwonlee merged commit 0401b11 into develop Aug 7, 2025
3 checks passed
@chanwonlee chanwonlee deleted the test/207-reservation-create-test branch August 7, 2025 02:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[TEST] 예약 생성 기능 테스트

6 participants