Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor/#548 notification 리팩토링 #549

Open
wants to merge 8 commits into
base: dev
Choose a base branch
from

Conversation

BackFoxx
Copy link
Collaborator

🔥 연관 이슈

📝 작업 요약

반려생활 면접 과정에서 CTO님과 함께 논의했던 리팩토링 포인트들을 반영했습니다.

🔎 작업 상세 설명

크게 3개의 개선 포인트를 찾아냈습니다.

  • Receiver 객체의 파라미터로 엔티티 대신 필요한 정보만 뽑아 건네주어 테스트하기 쉬운 구조 만들기
    -> Reciever에서는 회원의 토큰 정보만 필요로 하므로, 생성자로 Member 대신 토큰 문자열만 받도록 변경하여 Reciever와 Member의 의존관계를 끊어냈습니다.

  • 디바이스 토큰이 존재하는지 검사하는 코드 개선하기
    -> Optional 반환이 안티 패턴이라는 피드백을 받아 알아보았더니 일리가 있었습니다. 반환값이 Optional인 메서드에서 규칙을 무시하고 null을 반환한다면 optional.isEmpty() 같은 메서드를 호출하는 순간 NPE가 발생하기 떄문이었습니다.
    그래서 deviceToken이 존재하는 지 확인하는 hasDeviceToken 메서드를 따로 만들고, getDeviceToken 메서드는 Optional 대신 값 원본을 리턴하도록 변경했습니다. 리턴값이 존재하지 않을 경우 예외가 발생합니다.

  • 회원의 탈퇴 여부를 검증하는 코드를 대체할 수 있는 방안 찾기
    -> 요건 해결하지 못했습니다! '탈퇴한 회원의 디바이스로 알림을 전송하지 않겠다' 라는 요구사항은 어떤 알림을 보내든 공통인데, sendNotification()에서 한 번에 관리하던 코드가 외부 코드에 분산되니 응집성이 너무 떨어져 정말 마음에 안 들더라구요 🥹
    상태 별(회원가입 안됨, 회원가입 됨, 탈퇴함) 회원 객체를 만들어 사용하면 어떨까라는 건의를 인터뷰 중에 했었는데, 회원 도메인이 크게 변경되는 작업이라 별도의 이슈를 파서 작업해야 할 것 같아요!

🌟 리뷰 요구 사항

큰 변경이 없는 작업이라 빠르게 리뷰할 수 있을 거에요~

Copy link

Unit Test Results

  70 files  ±0    70 suites  ±0   24s ⏱️ -1s
369 tests ±0  369 ✔️ ±0  0 💤 ±0  0 ±0 
372 runs  ±0  372 ✔️ ±0  0 💤 ±0  0 ±0 

Results for commit c065bc4. ± Comparison against base commit e2dfa4d.

public String getActiveDeviceToken() {
return devices.stream().filter(Device::isActive)
.map(Device::getDeviceToken)
.findAny().orElseThrow();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

throw하는 에러를 적어주면 좋지 않을까요!
BusinessLogicException이라덩가......

@BackFoxx
Copy link
Collaborator Author

이돈이면 팀 : sendNotificaiton의 파라미터로 Member 대신 MemberId와 디바이스 토큰만 받도록 최적화하자

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

NotificationService 리팩토링하기
2 participants