[1주차] Database 설계 및 아키텍처 설계 구현 완료#18
Open
dbdb1114 wants to merge 148 commits intohanghae-skillup:mainfrom
Open
[1주차] Database 설계 및 아키텍처 설계 구현 완료#18dbdb1114 wants to merge 148 commits intohanghae-skillup:mainfrom
dbdb1114 wants to merge 148 commits intohanghae-skillup:mainfrom
Conversation
spring-data-jpa. h2database, postgresql
추가 수정 예상되며, 테스트 혹은 개발하면서 수정 예정
1. BaseEntity 작성하여 상속 하도록 수정 및 빌더 패턴 설정 2. PK Id필드 strategy = GenerationType.IDENTITY 설정 추가 3. Lombok 의존성 추가 및 빌더 패턴 도입
private 필드에 접근하기위한 리플렉션 유틸 메소드
Feature/rds repo 1주차 요구사항 rds-repo 작업 완료
1. Orderby RDB에서 하는 게 무의미함 2. 메소드 변경에 따른 테스트 코드 수정 및 Assertions 메소드 수정
테스트 코드 작성시 빈을 로드하는 context 지점을 최상위로 둘 수 있어야 하기 때문에 java.main.module 패키지 생성후 기존 패키지 모두 하위로 이동
implementation: 모듈, model-mapper compileOnly : lombok, starter-web, data-jpa
stream 활용하여 상영정보를 영화 기준으로 groupby하고, 정해진 기준으로 정렬 ( 최신 개봉을 앞으로 정렬, 상영시간은 가장 이른 시간을 앞으로 정렬 )
1. �의존 주입 확인 2. groupBy 및 금일 기준 조회 여부 확인
티켓 조회, 유저 티켓 조회, 티켓 예매 요청
AopForTransaction : 트랜잭션 분리를 위한 클래스 CustomSpringELParser : SPEL표현식 파서 DistributedLock : 분산락 어노테이션 정의 DistributedLockAOP : aop 분산락 작성
FunctionalForTransaction : 트랜잭션 분리를 위한 클래스 FunctionalDistributedLock : 함수형 분산락 구현
PEAK 타임을 고려한 최대 동시간대 요청 건수 계산 ---------------------------------------------------------- Junghyun's hanghaeho 인기영화 100편 비인기 영화 489편 모든 영화 1일 1회씩 상영, 2일 뒤 상영정보까지 전시 ---------------------------------------------------------- 인기 영화 100편의 경우 상영정보 오픈과 동시에 반 정도의 티켓이 바로 판매된다고 가정 100 * 13 = 1300건 비인기 영화 489편의 경우 상영정보 오픈과 동시에 약 3매 티켓 정도 바로 판매된다고 가정 489 * 3 = 1467건 피크시간 전체 판매 티켓 수 : 2767건 ---------------------------------------------------------- 예매는 한 사람이 여러좌석 예매 가능하므로 피크시간 예상 요청건수 = 922.33333 건 (전체 판매 티켓 수/3) 상영정보 조회 및 선택 - 좌석 선정 프로세스 소요시간 : 최대 30초 추정 ---------------------------------------------------------- 테스트상 30초까지 점진적으로 1000건의 요청시 최대 요청 처리시간 : 483.43ms - waitTime 동안 Lock을 기다릴 이유는 무엇인가? 먼저 좌석을 선정한 고객이 불가피한 이유로 결제 과정까지 넘어가지 못 했을 때 결제 과정까지 넘어가지 못하는 상황 1. 로그인, 연령 부적합 등 애초에 좌석 선정 자체가 불가한 경우 2. 결제 중 이탈 3. 단순 변심 4. ... 사실상 1번 말고는 기다렸다가 재시도 해야하고, 1번의 경우 매우 적은 수일 것으로 예상되어 실제로 Lock 점유를 기다리는 시간이 그다지 길 필요가 없다는 판단이 됩니다. 최악의 경우를 생각하여 앞의 요청 처리 두 건에서 lock점유 후 다음 프로세스로 진행이 못 했을 때 까지만 보장하기로 하여, wait_time은 1초, lease_time은 2초로 선정 lease_time 선정 이유는 만약 여러 좌석 lock 중 일부 좌석에 대한 lock을 대기하여야 할 수 있으므로 wait_time을 고려한 선정
core module - SpringBootStarterWeb 의존성 추가 [ Custom Exception 정의 관련 ] app module - aop 및 limiter 관련 의존성 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[1주차] Database 설계 및 아키텍처 설계 구현 완료
작업 내용
. ├── dto │ ├── external │ │ └── ShowingResponse.java │ └── internal │ ├── GenreDTO.java │ ├── MovieDTO.java │ ├── RatingDTO.java │ ├── ScreenDTO.java │ └── ShowingDTO.java ├── exception └── util발생했던 문제와 해결 과정을 남겨 주세요.
그래서 제가 어떻게 하면 이전보다 나은 코드와 역할과 책임의 분리를 잘 지킬 수 있을지 고민하여 LayeredArchitecture를 기반으로 multimodule 프로젝트를 설계하게 됐습니다.
이번 주차에서 고민되었던 지점이나, 어려웠던 점을 알려 주세요.
리뷰 포인트
기타 질문
추가
늦어서 죄송합니다. 계속 부족한 부분들이 보여 급하게 하다보니,,, 오히려 더 늦어졌습니다. 차주에는 시간을 조금 더 잘 지키도록 하겠습니다.