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: MapStruct 적용 #38

Merged
merged 10 commits into from
Oct 4, 2024
Merged

feat: MapStruct 적용 #38

merged 10 commits into from
Oct 4, 2024

Conversation

rbm0524
Copy link
Contributor

@rbm0524 rbm0524 commented Oct 3, 2024

📌 관련 이슈

✨ PR 내용

Controller 계층 Dto 따로 만들었고 MapStruct 적용해서 매핑 방식 변경했습니다.
테스트 부분은 아직 환경이 갖춰지지 않아서 이거 PR 먼저 날리고 그 다음에 하겠습니다.

@rbm0524 rbm0524 self-assigned this Oct 3, 2024
@rbm0524 rbm0524 added the feature label Oct 3, 2024
.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Spot을 찾을 수 없습니다."));
return toDto(spot);
public SpotDetailResponse getSpot(Long id) {
Copy link
Contributor

Choose a reason for hiding this comment

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

전체적으로 조회만 수행하는 메서드에 대해서 트랜잭션 어노테이션을 명시하지 않은 이유가 있을까요?
readOnly 옵션을 활성화하여 트랜잭션 어노테이션을 붙이면 어떤 장점이 생길까요?

공부하고 댓글로 알려주면 유익할 것 같습니다

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Transactional이 조회에서 사용될 필요가 있을까? 생각해서 붙이지 않았습니다. 생성이나 수정이 아니라서 새로고침하면 된다고 생각했었습니다. @Transactional(readOnly=true)를 보니 트래픽 분산으로 속도가 향상되고 예상치 못한 수정 방지, dirty checking을 위한 Snapshot을 보관하지 않아서 메모리도 절약할 수 있네요. 추가하겠습니다!


@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.IGNORE) // Spring Bean으로 등록
Copy link
Contributor

Choose a reason for hiding this comment

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

@MappercomponentModel, unmappedTargetPolicy 각 옵션들은 무슨 역할을 수행하나요?

그리고 MapStruct 를 사용한 이유가 궁금합니다!

Copy link
Contributor Author

@rbm0524 rbm0524 Oct 4, 2024

Choose a reason for hiding this comment

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

componentModel = "spring"을 통해서 Spring bean으로 관리합니다. unmappedTargetPolicy = ReportingPolicy.IGNORE은 매핑되지 않는 필드에 대해 null처리를 하거나 무시합니다. createdAt이나 id 필드는 dto에서 값을 받아오는 것이 아니기 때문에 Controller dto에서 Service dto로 매핑할 때 null 처리를 해놓고 Spot 엔티티를 새로 생성하거나 업데이트할 때 null이 아닌 dto의 값만 활용할 수 있게 한 것입니다.
MapStruct는 Mapper 클래스나 Mapping을 직접 코딩할 필요 없이 자동으로 매핑해주기 때문에 확장에 용이하다고 생각해서 적용해봤습니다!

Copy link
Contributor

@ajy9851 ajy9851 left a comment

Choose a reason for hiding this comment

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

제가 부족하여 궁금한 점들은 단체방에 남겨뒀습니다! 고생하셨어요.

Copy link
Contributor

@westzeroright westzeroright left a comment

Choose a reason for hiding this comment

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

엇 늦게 봤네요ㅜㅜ 죄송해요.. 일단 approve 드리고 궁금한 사항은 톡방으로 전달하겠습니다!

@rbm0524 rbm0524 merged commit fe489ea into weekly_5 Oct 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants