반응형
Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다.
Web 확장 - 도메인 클래스 컨버터
- HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩하는 기능이다.
도메인 클래스 컨버터 사용 전
- MemberController.class
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/members/{id}")
public String findMember(@PathVariable("id") Long id) {
Member member = memberRepository.findById(id).get();
return member.getUsername();
}
@PostConstruct
public void init() {
memberRepository.save(new Member("userA"));
}
}
코드 작성 후 애플리케이션을 실행하고 브라우저에 주소를 입력하고 userA의 값을 확인한다.
도메인 컨버터 사용 후
- MemberController.class
@GetMapping("/members2/{id}")
public String findMember2(@PathVariable("id") Member member) {
return member.getUsername();
}
놀랍게도 위의 코드가 끝이다. 이렇게 코드를 작성하면 아래 과정을 스프링 데이터 JPA가 알아서 컨버팅을 끝내고 파라미터에 인젝션을 해주는 것이다.
Member member = memberRepository.findById(id).get();
- HTTP 요청은 회원 id를 받지만 도메인 클래스 컨버터가 중간에 동작해서 회원 엔티티 객체를 반환한다.
- 도메인 클래스 컨버터도 리파지토리를 사용해서 엔티티를 찾는다.
- 도메인 클래스 컨버터로 엔티티를 파라미터로 받으면, 이 엔티티는 단순 조회용으로만 사용해야 한다.
- 트랜잭션이 없는 범위에서 엔티티를 조회했으므로 변경 감지 등이 일어나지 않는다.
! 사실 이 기능을 잘 사용하진 않는다. PK를 이용해서 처리를 하는 것도 그렇고 복잡한 기능이면 사실상 쓰질 못하기 때문이다.
반응형