Skip to content

Comments

refactor: 그루밍 테스트 관련 로직 리팩토링#92

Merged
hisonghy merged 6 commits intodevelopfrom
refactor/grooming-tests-89
Apr 11, 2025
Merged

refactor: 그루밍 테스트 관련 로직 리팩토링#92
hisonghy merged 6 commits intodevelopfrom
refactor/grooming-tests-89

Conversation

@hisonghy
Copy link
Member

🌱 관련 이슈

📌 작업 내용 및 특이사항

[ 그루밍 테스트 목록 조회 기능 ]

  • LoadGroomingTestsService 에서 @Cacheable 어노테이션을 분리했습니다. 캐싱도 외부 기술이므로 외부 기술 의존성을 없애고자 LoadGroomingTestsWithCachePortCaffeineCacheAdapter 로 분리하고 Adapter 구현체에서 캐싱을 관리하도록 리팩토링 했습니다.
  • 캐싱 전략을 Redis -> Caffeine 으로 바꾸게 되면서 기존 그루밍 테스트 목록을 조회할 때 랜덤으로 응답되지 않는 이슈가 발생했습니다. Redis 는 캐싱된 데이터를 읽어올 때 역직렬화를 통해 가져오기 때문에 Set 의 순서가 항상 랜덤하게 응답되었는데, Caffeine 캐시는 로컬 캐시로 직렬화, 역직렬화를 하지 않고 객체 자체를 저장하기 때문에 조회할 때마다 순서가 랜덤하지 않아 port 를 통해 고정된 순서의 그루밍 테스트 목록 캐싱 데이터를 가져오고 이후에 Collections.shuffle() 로 랜덤한 순서를 보장하도록 했습니다.
  • 리팩토링 이전에는 각 답변의 점수(score) 정보를 클라이언트에 함께 응답했지만, 점수는 조작되거나 변조되면 안 되는 도메인 핵심 정보이기 때문에 클라이언트에 전달하지 않도록 변경했습니다.

[ 그루밍 테스트 유효성 검증 기능 ]

  • 요청한 그루밍 테스트 제출 내역을 캐싱된 그루밍 테스트 목록 정보와 비교해 유효성을 검증하는 GroomingTestValidator 클래스를 추가했습니다. (유효한 질문/답변 ID 여부, 중복된 질문/답변 존재 여부, 질문/답변 올바른 매핑 여부)
  • 이 클래스는 특정 UseCase에 종속되지 않고 도메인 정책의 일관된 검증을 담당하는 독립적인 애플리케이션 서비스로 도메인 로직 기반의 일관된 검증을 담당하고 application.service.grooming 계층 내에서 재사용 가능한 컴포넌트로 설계했습니다.

[ 그루밍 테스트 제출 기능 ]

  • 요청한 그루밍 테스트 제출 데이터의 유효성을 검증하도록 했습니다.
  • 기존 그루밍 테스트 제출 로직에서 만약 인증된 유저인 경우 요청한 테스트 결과를 기반으로 유저의 그루밍 점수, 그루밍 레벨을 업데이트하고 그루밍 테스트 결과 내역을 저장하도록 했지만, POST /api/grooming/tests 그루밍 테스트 결과를 저장하는 api가 이미 존재하고 제출(완료)와 저장의 역할을 명확히 분리하고자 그루밍 테스트 제출 api 에서는 인증된 유저든 인증되지 않은 유저든 오로지 그루밍 테스트에 대한 결과 (점수, 등급, 레벨) 계산만 담당하도록 리팩토링 했습니다.
  • 그루밍 테스트 목록 조회 요청 시 클라이언트로 각 답변의 점수(score) 정보를 함께 응답하지 않기 때문에 클라이언트로부터 점수를 직접받지 않고, 서버에서 캐싱된 그루밍 테스트 목록 데이터와 요청한 그루밍 테스트 제출 데이터를 비교해 점수와 등급을 계산하도록 리팩토링 했습니다.

[ 그루밍 테스트 결과 저장 기능 ]

  • 요청한 그루밍 테스트 제출 데이터의 유효성을 검증하도록 했습니다.

🔍 참고사항

  • 그루밍 테스트 목록 조회 요청 시 그루밍 테스트 질문, 관련 답변 데이터를 조합해 캐싱하는데, 캐싱할 때는 답변의 score 정보를 함께 저장하고 클라이언트로 응답할 경우에는 score 정보는 포함되지 않도록 했습니다.

📚 기타

@hisonghy hisonghy added ⚡ feature 새로운 기능 추가 및 수정 🚀 refactor 기능 개선 labels Apr 11, 2025
@hisonghy hisonghy requested a review from myqewr April 11, 2025 08:22
@hisonghy hisonghy self-assigned this Apr 11, 2025
@hisonghy hisonghy merged commit c30b494 into develop Apr 11, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚡ feature 새로운 기능 추가 및 수정 🚀 refactor 기능 개선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🚀 그루밍 테스트 관련 로직 개선

2 participants