항해플러스 서버구축 프로젝트 [콘서트예약]
- 동시성 이슈
- 대기열 시스템(REDIS)
https://thoracic-catamaran-22f.notion.site/4bcf9632b896492d89b20041ec69abce?pvs=4
https://thoracic-catamaran-22f.notion.site/de17237568694b2386a43715543aa4f1?pvs=4
- 문제
좌석 도메인 컴포넌트인 SeatReader에서 순환참조 문제 발생
- 원인
UseCase에서 책임을 최소화 하기 위하여 간단한 값에 대한 검증로직을 컴포넌트영역 내에서만 구현하기 위해 하향 조정하면서 컴포넌트 레이어 안에서 순환참조가 발생!
데이터의 값에 대한 검사를 진행하는 SeatValidator와 SeatReader간 상호 참조형태
SeatValidator에서 좌석 데이터를 조회한다는 이유로 SeatReader를 사용하는 불상사가 발생
SeatValidator와 SeatReader의 책임과 역할이 불분명 하였으며, 참조방향을 정해놓고 개발하지 않아 서로 참조하는 형태가 되버림.
- 해결
도메인 컴포넌트간에도 '참조'가 필요하다면 참조 방향을 정의할 필요가 있음.
그 방향을 설정하기 위해 컴포넌트 책임 역할을 정의할 필요가 있어 아래와 같이 정의.
-> SeatValidator는 상위 레이어(UseCase)혹은 같은 레이어의 값 검증을 위한 보조도구 용도로 컴포넌트나 그 상위 레이어를 참조하지 않는다.
-> SeatReader는 상위 는 정말 순수 조회형태로 SeatValidator를 이용하여 값 검증기능이 존재하여 SeatValidator를 사용할 수 있으나 SeatValidator를 위하여 데이터를 조회한다고 해서 SeatReader를 사용할 수는 없다.
-> SeatSupportor는 UseCase를 지원하는 기능모음이다. SeatSupportor에서는 SearReader나 SeatValidator를 참조할 수 있으나 방대 방향은 존재하지 않는다.
따라서 컴포넌트간에서 참조 방향을 아래와 같이 설정하였다.
Supportor -> Reader,Modifier -> Validator
반대방향은 허용X
- 문제
Token값을 검증하는 인터셉터인 TokenValidationInterceptor가 Runtime시 적용되지가 않음 (Request시 인터셉터를 무시)
- 원인
TokenValidationInterceptor는 @Component로 정의하여 사용하면서
WebMvcConfigurer 구현체인 WebConfig 클래스에는 addInterceptor에서 적용할 때는 new로 객체생성하여 사용함
- 해결
WebConfig클래스에 @RequeiredArgsConstructor를 통해 TokenValidationInterceptor객체를 생성자 주입으로 적용하여 해결
- 문제
테스트 코드에서는 SpringBootTest로 테스트하여도 Slf4j가 사용이 안됨
- 원인
테스트코드에서는 lombok에 대하여 별도의 dependency가 필요함
- 해결
Gradle에 아래 내용 추가하고 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
https://thoracic-catamaran-22f.notion.site/6b5a4ec795134cf9a80484b601effb61?pvs=4
https://thoracic-catamaran-22f.notion.site/Project-Milestone-29339f9c0e114750a5a1c3096609304f?pvs=4
https://thoracic-catamaran-22f.notion.site/API-2ae57d00a361458bbec85797d42c0712?pvs=4
아래 소스경로 하위 도메인 src/main/java/io/hpp/concertreservation/biz/api