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

Feat/#46 Certification 테이블 생성, 회사 인증 등록 API 구현 #53

Merged
merged 26 commits into from
Oct 26, 2023

Conversation

smartandhandsome
Copy link
Collaborator

@smartandhandsome smartandhandsome commented Oct 25, 2023

이슈번호

close: #46
close: #54

작업 내용 설명

  • 순환 참조 발생해서 Service와 Repository 사이에 Repository 가공하는 역할(Repository Facade?)을 가진 클래스 생성
  • 유저에서 컬럼으로 관리하던 인증정보 Certification Table로 파티셔닝
  • 회사 인증 등록 API 구현

Repository 가공 클래스

스크린샷 2023-10-26 오전 4 21 48

순환참조 발생 상황

스크린샷 2023-10-26 오전 4 25 50

리뷰어에게 한마디

Repository 가공하는 역할을 가진 Layer

image
(package 이름을 어떻게 해야 될지 몰라 현재 cq라고 했습니다. 잘 생각이 나지 않는데 좋은 이름 추천좀 부탁드립니다.)

*아직 모든 도메인에 적용하지는 않았습니다.

순환 참조가 발생해서 Repository 가공하는 역할을 가진 Layer(라고 볼 수 있나????) 구현했습니다. 다른 도메인의 Service 참조가 아닌 해당 Layer의 참조를 하려고 하는데 어떤가요?

Transactional을 짧게 처리할 수 있고, 에러 코드를 한 곳에서 관리하고, Repository 접근은 Command와 Query로 나누고 Service는 비즈니스 로직으로 나눌 수 있어서 좋은 것 같습니다. ex) 초기 인증 서비스 이메일 인증 서비스 재인증 서비스

혹시 제가 모르는 단점이나 더 잘 사용할 수 있는 방법(~~~ 를 참고해봐라) 있으면 피드백 부탁드립니다.

추가로 아래 부분이 Command로 보아야 될지 Query로 보아야 할 지 잘 모르겠습니다.

일단 CertificationCommand에 구현해 놓았습니다.
스크린샷 2023-10-26 오전 5 16 55

스크린샷 2023-10-26 오전 5 17 46

만약 인증이 완료된 사용자라면 S3에 이미 올려져 있는 사진을 삭제하는 로직입니다.

sealed interface와 inner record 로 DTO 구현 (final class와 private 기본 생성자로 대체)

항상 DTO가 너무 많아지는 것 같아서 고민이 됐었는데 한 클래스에서 Request, Response를 관리 할 수 있고 API 명세를 한 눈에 볼 수 있어 좋다고 생각합니다.

함께 java 17애 적용된 sealed 기능도 사용해봤습니다.

사용사례가 많지 않지만, 제 생각에는 문제가 없는 것으로 생각되서 시도해봤습니다.

좀 우려되는 부분은 Request와 Response가 다형성이 적용되는 부분인데요.

ex)
1. 부주의하게 파라미터를 EmailDto로 설정
2. EmailDto.Request를 넣어야 하는 로직에 EmailDto.Response를 실수로 대입
3. 에러 발생

위와 같은 경우가 발생할 수 있지만, interface와는 조금 다르게 sealed interface를 사용할 때 구현이 허락된 객체가 무엇인지 아는 상태에서 사용하는 것이기 때문에 방지할 수 있다고 생각합니다.

스크린샷 2023-10-26 오전 4 56 30

Comment on lines 32 to 35
@Transactional(readOnly = true)
public void applyIfCertifiedUser(Long userId, Consumer<? super Certification> consumer) {
certificationRepository.findByUserId(userId).ifPresent(consumer);
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Command로 보아야 될지 Query로 보아야 할 지 잘 모르겠습니다.

Copy link
Collaborator

Choose a reason for hiding this comment

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

저는 Query로 보는게 맞다고 생각됩니다

@smartandhandsome smartandhandsome self-assigned this Oct 25, 2023
@smartandhandsome smartandhandsome changed the title Feat/#46 Feat/#46 Certification 테이블 생성, 회사 인증 등록 API 구현 Oct 25, 2023
Copy link
Collaborator

@yumyeonghan yumyeonghan left a comment

Choose a reason for hiding this comment

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

수고하셨습니다.!
추가적으로 pr 올리기 전에 리베이스 과정을 한번 거쳐서 merge conflict가 나지 않게끔 올리면 더 좋을것 같습니다!
conflict가 생기면, CI 가 정상적으로 돌지 않는 이유로

Comment on lines 32 to 35
@Transactional(readOnly = true)
public void applyIfCertifiedUser(Long userId, Consumer<? super Certification> consumer) {
certificationRepository.findByUserId(userId).ifPresent(consumer);
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

저는 Query로 보는게 맞다고 생각됩니다

@1o18z
Copy link
Collaborator

1o18z commented Oct 26, 2023

수고하셨습니다~!!!🙌🏻🦭👍🏻🥇🫡

@github-actions
Copy link

github-actions bot commented Oct 26, 2023

Test Results

3 tests   3 ✔️  1s ⏱️
2 suites  0 💤
2 files    0

Results for commit fd1ce0b.

♻️ This comment has been updated with latest results.

@1o18z 1o18z merged commit 4ffbd4a into dev Oct 26, 2023
3 checks passed
@1o18z 1o18z deleted the feat/#46 branch October 26, 2023 05:32
@yumyeonghan yumyeonghan added this to the 1차 스프린트 milestone Oct 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

🚀 [Feature] 회사 인증 등록 API 구현 🦾 [Refactor] Certification 테이블 생성
3 participants