Open seokjun7410 opened 9 months ago
공연 및 전시 도메인 특성상, 하나의 전시가 진행되는 시간대에 따라 여러 예약이 가능할 것이라 생각했습니다. 때문에 전시행위(perfrom)를 entity로 식별하여 perfrom : Performance = N : 1 의 관계로 개발을 진행했습니다.
추상클래스를 이용하여 새로운 할인정책의 등장으로부터 OCP원칙을 지키도록 구성하였습니다.
예약기능을 개발하면서 예약도메인과 전시도메인이 강하게 결합되는 것을 식별했습니다.
도메인간의 결합도를 낮추기 위한 이벤트 혹은 메시징큐를 쉽게 도입할 수 있도록 구조를 변경했습니다. 실제 코드에선 이벤트를 발생시키지 않고 구조만 반영한 후 마무리했습니다.
예약 취소로직이 알림의 성공/실패 여부에 영향을 받으면 안되므로 비동기 이벤트로 구성했습니다.
@Test public void 예약_취소_시_구독자_알림_발송_실패_예약취소에_영향_없음() throws InterruptedException { Mockito.doThrow(new RuntimeException("알림 외부서비스 에러")).when(notificationOutput).reservationCancelNotify(any(),any()); ... reservationService.cancel(cancelRequest); ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) customThreadPoolTaskExecutor; executor.getThreadPoolExecutor().awaitTermination(1, TimeUnit.SECONDS); ... assertThat(reservation.status()).isEqualTo(ReservationStatus.CANCEL);
테스트는 mokito를 이용하여 예외를 발생시키고, 비동기 로직을 진행하는 스레드가 끝날때까지 대기한 뒤 취소되었는지 확인하도록 구현했습니다.
도메인 다이어그램
ERD
1. Perform 과 Perfomance
공연 및 전시 도메인 특성상, 하나의 전시가 진행되는 시간대에 따라 여러 예약이 가능할 것이라 생각했습니다. 때문에 전시행위(perfrom)를 entity로 식별하여 perfrom : Performance = N : 1 의 관계로 개발을 진행했습니다.
2.전시 및 공연에 다양한 할인정책 적용
추상클래스를 이용하여 새로운 할인정책의 등장으로부터 OCP원칙을 지키도록 구성하였습니다.
3. 도메인간 결합
예약기능을 개발하면서 예약도메인과 전시도메인이 강하게 결합되는 것을 식별했습니다.
도메인간의 결합도를 낮추기 위한 이벤트 혹은 메시징큐를 쉽게 도입할 수 있도록 구조를 변경했습니다. 실제 코드에선 이벤트를 발생시키지 않고 구조만 반영한 후 마무리했습니다.
4.예약 취소시 알림 기능, 비동기 이벤트 발행
예약 취소로직이 알림의 성공/실패 여부에 영향을 받으면 안되므로 비동기 이벤트로 구성했습니다.
테스트는 mokito를 이용하여 예외를 발생시키고, 비동기 로직을 진행하는 스레드가 끝날때까지 대기한 뒤 취소되었는지 확인하도록 구현했습니다.
이후 개선사항