묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
무조건적인 @Transactional?
@Service @RequiredArgsConstructor public class SignUpMemberService implements SignUpMemberUseCase { private final MemberRepository memberRepository; @Override public Long invoke(final Command command) { validateEmailIsUnique(command.email()); validateNicknameIsUnique(command.nickname()); validatePhoneIsUnique(command.phone()); final Member member = command.toDomain(); return memberRepository.save(member).getId(); } } @Service @Transactional @RequiredArgsConstructor public class SignUpMemberService implements SignUpMemberUseCase { private final MemberRepository memberRepository; @Override public Long invoke(final Command command) { validateEmailIsUnique(command.email()); validateNicknameIsUnique(command.nickname()); validatePhoneIsUnique(command.phone()); final Member member = command.toDomain(); return memberRepository.save(member).getId(); } }사용자 가입 UseCase에 대한 구현에서 앞단에서는 unique field에 대한 validation을 진행합니다그 후에 memberRepository.save(member)를 진행하는데 (memberRepository는 Data Jpa Repo)아시다시피 SimpleJpaRepository의 save흐름에는 @Transactional이 적용되어 있습니다따라서 이 SignUpMemberService의 invoke 흐름부터 굳이 @Transactional을 걸어야 하는 생각이 듭니다물론 붙임으로써 이 메소드가 writable한 로직을 가진다고 코드레벨에서 알고 JPA를 모르는사람은 SimpleJpaRepository의 구조를 모르기 때문에 가독성?적인 측면에서는 붙이는게 이해에 수월하다고 생각하는데 tx scope를 최대한 짧게 가져가는게 좋다는 생각이 들어서 약간의 고민을 하게 되었습니다
-
미해결실전! 스프링 데이터 JPA
사용자 정의 리포지토리 구현 방법 관련 질문
안녕하세요? 김영한 강사님.제가 Windows 계열의 웹개발만 하다가 이번 Java 웹개발을 시도하면 강의를 접하게 되었는데.. 이렇게 좋은 강의를 들을 수 있게 해주셔서 무한한 감사드립니다. ㅎㅎㅎ 강의를 듣고 사용자정의 레포지토리 구현방법에 대한 궁금증이 생겨서 이렇게 글을 남김니다. 강의에서 JpaRepository 인터페이스를 상속받은 인터페이스에 일부 확장 쿼리문을 만들고querydsl, native query등의 확장은 xxxxImpl 식으로 확장해서 만들고 있습니다. 이점이 제가 보기에는 많이 번거롭다는 느낌이 들었습니다. JpaRepository 인터페이스의 구현체인 SoleoSimpleJpaRepository 클래스를 직접 상속받아서 확장하면 더 편리하지 않을까 하는 생각이 들었습니다. 구현체가 다양한 것도 아닌듯 하고 Hibernate로 거의 고정되어 있는 듯한데 편리성을 고려해서 이렇게 진행한다면 제가 생각하지 못한 문제점 들이 있는지 문의 드립니다. 제가 아직은 지식이 짧아서 질문이 적절한지는 모르겠으나 시간 허락되시면 답변 부탁드리겠습니다. 감사합니다.