-
Notifications
You must be signed in to change notification settings - Fork 4
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
Conversation
.findById(id) | ||
.orElseThrow(() -> new EntityNotFoundException("Spot을 찾을 수 없습니다.")); | ||
return toDto(spot); | ||
public SpotDetailResponse getSpot(Long id) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전체적으로 조회만 수행하는 메서드에 대해서 트랜잭션 어노테이션을 명시하지 않은 이유가 있을까요?
readOnly
옵션을 활성화하여 트랜잭션 어노테이션을 붙이면 어떤 장점이 생길까요?
공부하고 댓글로 알려주면 유익할 것 같습니다
There was a problem hiding this comment.
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으로 등록 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Mapper
의 componentModel
, unmappedTargetPolicy
각 옵션들은 무슨 역할을 수행하나요?
그리고 MapStruct 를 사용한 이유가 궁금합니다!
There was a problem hiding this comment.
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을 직접 코딩할 필요 없이 자동으로 매핑해주기 때문에 확장에 용이하다고 생각해서 적용해봤습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 부족하여 궁금한 점들은 단체방에 남겨뒀습니다! 고생하셨어요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
엇 늦게 봤네요ㅜㅜ 죄송해요.. 일단 approve 드리고 궁금한 사항은 톡방으로 전달하겠습니다!
📌 관련 이슈
✨ PR 내용
Controller 계층 Dto 따로 만들었고 MapStruct 적용해서 매핑 방식 변경했습니다.
테스트 부분은 아직 환경이 갖춰지지 않아서 이거 PR 먼저 날리고 그 다음에 하겠습니다.