f-lab-edu / show-ticketing-service

[초봉 3000 후반 신입]다양한 공연 정보를 제공하며 예매를 할 수 있는 서비스
9 stars 3 forks source link

[#84] 공연 리스트 조회 #97

Closed tlsgkr7416 closed 3 years ago

tlsgkr7416 commented 3 years ago
  1. PerformanceController

    • RequestParam으로 공연 타입(showType)의 정보를 받음. 만약 받지 않을 시 null 값을 받아 전체 페이지 기능을 해준다.
    • RequestParam으로 한 페이지에서의 마지막 공연 Id를 받아 페이징 기능을 해준다. 만약 받지 않을 시 null 값을 받아 첫 번째 페이지 기능을 해준다.
  2. PerformanceService

    • checkValidPerfIdAndShowType : 공연 타입과 공연 마지막 id로 페이지 기능을 해줄 정보가 있는지 체크해 준다.
    • getPerformances : 공연 정보 리스트들을 전체 타입 또는 타입 별로 보여준다. 그리고 공연 리스트들은 USER들이 조회할 경우가 많아 캐시를 적용
    • 공연 정보 리스트 조회 캐시 기능 cacheNames :
      • MAIN_PERFORMANCE_LIST : 공연 타입을 선택했고 첫 번째 페이지인 경우
      • PERFORMANCE_LIST : 공연 타입을 선택했고 첫 번째 페이지를 제외한 경우
      • ALL_TYPE_MAIN_PERFORMANCE_LIST : 모든 타입의 공연을 선택했고 첫 번째 페이지인 경우
      • ALL_TYPE_PERFORMANCE_LIST : 모든 타입의 공연을 선택했고 첫 번째 페이지를 제외한 경우
  3. PerformanceMapper.xml

    • getPerformances(id)
      • 공연 id, 이름, 이미지, 공연장 이름, 공연 홀 이름을 응답함
      • 공연에 연결된 공연 홀과 공연장의 정보를 join하여 불러옴
      • 공연 타입 null x / 마지막id null x 경우 공연 타입을 구분하여 첫 번째 페이지를 제외한 나머지 페이지를 불러 옴
      • 공연 타입 null o / 마지막id null x 경우 모든 공연 타입과 첫 번째 페이지를 제외한 나머지 페이지를 불러 옴
      • 공연 타입 null x / 마지막id null o 경우 공연 타입을 구분하여 첫 번째 페이지를 불러 옴
      • 공연 타입 null o / 마지막id null o 경우 모든 공연 타입과 첫 번째 페이지를 불러 옴 (if문 처리 안함)
    • isPerfIdAndShowTypeExists(id) : 공연 타입 별로 페이지를 처리 할 id가 있는지 체크
  4. StringToShowTypeConverter : showType 같은 경우 enum 타입인데 클라이언트에서 RequestParam으로 요청 시 string으로 받기 때문에 여기서 enum으로 전환 시켜줌

  5. 캐시

    • 공연 리스트 같은 경우 많은 유저들이 동시에 접근할 가능성이 있어서 부화를 방지하기 위해 캐시를 적용
    • 캐시 소멸 시간 cacheNames
      • ALL_TYPE_MAIN_PERFORMANCE_LIST : 20초
      • MAIN_PERFORMANCE_LIST : 15초
      • ALL_TYPE_PERFORMANCE_LIST : 10초
      • PERFORMANCE_LIST : 5초 => 공연 정보 추가 시 향후 페이지 간의 동기화를 유지시키기 위해 캐시 소멸 시간을 위처럼 적용했고 캐시를 비슷한 시간으로 함께 소멸되는 걸 목표로 했다.
  6. 기능

    • 커서 기반으로 페이징 처리를 해줌
      • 커서 기반 같은 경우 한 페이지 내에서 마지막 요소의 id를 기준으로 하기 때문에 프론트에서는 id를 요청해 줘야 함
      • 첫 번째 페이지는 마지막 id가 null일 경우로 생각하여 로직을 구현
    • 공연 타입을 전체 또는 타입별로 조회를 할 수 있다.
      • 1:MUSICAL, 2:THEATRICAL, 3:CONCERT, null: 전체로 프론트에서 showType을 1 or 2 or 3 or null 요청
    • 공연 스케줄은 처음 시작하는 날짜와 마지막에 시작하는 날짜로 응답하게 함(처음 시작하는 날짜와 마지막에 시작하는 날짜가 같을 시 같은 값으로 보냄)

      기능 리스트

    • [x] 공연 리스트 조회 기능 구현
    • [x] 캐시 적용
    • [x] 커서 기반 페이지 적용
    • [x] 테스트 코드 작성
tlsgkr7416 commented 3 years ago

보기 편하게 리스트 별로 커밋을 했었어야 했는데 못했네요. 다음에는 커밋 하면서 할게요.