Skip to content

🛠️ [refactor] Caching Service-Repository 리팩토링 #116

@binary-ho

Description

@binary-ho

🛠️ 리팩토링이 필요한 부분

1. 컬렉션을 반환하도록 개선

현재 OpenLectureRedisCacheRepository를 사용하는 예시 중,
객체들을 id set으로 가져와 스트림으로 정렬 이후, Set 컬렉션을 가진 일급 객체로 Wrapping하는 사례가 있다.
Repository가 스스로 Wrapping 객체를 반환하도록 FindAll과 같은 메서드를 구현하자.

2. 리포지토리 이름

현재 사용중인 레디스 레포지토리는 3가지이다.

  1. OpenLectureRedisCacheRepository
  2. AttendeeCacheRedisRepository
  3. VerificationCacheRedisRepository

1번만 이름을 만드는 방식이 다르다. OpenLectureCacheRedisRepository로 수정하자

3. 캐싱 객체 이름 개선

현재 Attendee라는 단어는 수강생이라는 의미를 가지고 있다.
수강생 정보를 저장하기 위해 Attendee라는 표현을 쓰고 있는데,
이는 "출석"이라는 단어로 현재 사용중인 Attendance와 매우 헷갈린다.
Student로 개선할 수 있겠다. 이후 새로운 객체 이름을 활용해 메서드 이름을 개선해보자.
다만 이는 캐싱 객체 개선 이슈에서 해결하겠다. -> #123

4. 메서드 이름 개선

  1. OpenLecture를 lecture id로 찾는 메서드 find는 좀 더 자세할 필요가 있다. findById로 개선한다.
  2. findAtttendanceNumber 또한 findAttendanceNumberById로 변경한다
  3. AttendeeeCacheRepository의 findAllAttendLectureId 또한 의미가 드러나지 않는다.
    StudentCacheRepository로 이름을 바꾼 다음 findAllLectureId

5. 서비스 개선

AttendeeCacheRepository는 OpenLecture의 수강생 정보를 캐싱하는 Repository이다.
이 레포지토리는 수강생의 id를 key로 강의 id를 value로 저장하고 있다.
이 레포지토리를 학생이 어떤 수강중인 수업 정보를 가져오는데 쓰고 있으므로, OpenLectureSerivce에 포함시키는 방식으로 변경하려 한다.

그럼 Serivce에 메서드를 호출하는 것이 더욱 자연스러워지는데

  1. "학생 아이디로 열린 수업 리스트를 줘"
  2. "학생 아이디와 수업 아이디로 수업이 열려있는지 확인해줘"

위 두 쿼리에 대해 기존 방식대로 AttendeeRepository에 질문하는 것은 어색하다.

  1. "수강생 리포지토리야 학생 아이디로 열린 수업 리스트를 줘"
  2. "수강생 리포지토리야 수업 아이디로 수업이 열려있는지 확인해줘"
    와 같이 쿼리하게 되는데,

이보다는 아래가 더욱 자연스럽다.

  1. "열린 수업 리포지토리야 학생 아이디로 열린 수업 리스트 줘"
  2. "열린 수업 리포지토리야 수업 아이디로 수업이 열려있는지 확인해줘"

그래서 AttendeeRepository에 관한 쿼리를 OpenLectureSerivce를 거치게 하고,
쿼리의 진짜 의미를 Service 메서드 이름으로 표현하겠다.

  1. findAllOpenLectureIdByStudentId
  2. isStudentOpenLectureExist

이는 응답 지연 개선 이슈에서 반영했다. #118

☑ Refactoring TODO

  • 컬렉션을 반환하도록 개선
  • 레포지토리 이름 개선
  • 캐싱 객체 이름 개선
  • 메서드 이름 개선

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions