본문 바로가기

DEVELOPER/Spring & JPA

[JPA] 도메인 클래스 컨버터 사용하기

안녕하세요😎 백엔드 개발자 제임스입니다 :)

오늘은 Spring Data JPA에서 제공하는 도메인 클래스 컨버터에 대해서 알아보겠습니다.

 

도메인 클래스 컨버터란?


도메인 클래스 컨버터Spring Data JPA에서 제공하는 클래스입니다. 해당 클래스는 엔티티의 ID를 엔티티로 변환하는 기능을 수행합니다.  따라서 컨트롤러에서 파라미터로 받는 ID를 엔티티로 바인딩하여 바로 객체로 받아 사용할 수 있습니다.

 

도메인 클래스 컨버터 사용 전

아래 이미지의 코드는 회원 Rest 컨트롤러입니다. 그 안에는 Get 메서드의 회원 관련된 API가 있습니다.
이 API는 Path 파라미터로 사용자의 ID를 받고, 해당 사용자의 닉네임을 변경한 뒤 응답 메시지를 전송합니다.
(보통 트랜잭션은 서비스 계층에서 처리되지만, 현재는 컨트롤러에 있는 상황입니다.)

현재 코드는 도메인 클래스 컨버터를 사용하기 전입니다. 우리는 보통 ID에 해당하는 객체를 조작하기 위해 Spring Data JPA의 findById()를 사용합니다. 또는 변경 감지를 원하는 객체를 Persist 상태로 만들기 위해 사용하기도 합니다.

 

도메인 클래스 컨버터 사용

* 사용 방법
@PathVariable에 프로퍼티로 “id”를 명시합니다.

도메인 클래스 컨버터 기능을 사용하기 위해서, PathVariable에 파라미터로 받는 값의 key를 문자열로 명시합니다.

만약 파라미터로 받는 값의 key가 다른 형태라면, PathVariable에 명시하는 이름도 동일해야 합니다.

도메인 클래스 컨버터는 findById()와 같은 기능을 수행합니다. 위와 같이 파라미터에 객체 타입을 명시하면, id를 통해 도메인을 찾아서 바인딩합니다. 만약 Path로 넘어오는 ID가 많다면, 각각의 Repository를 통해 일일이 객체를 찾아야합니다. 하지만 도메인 클래스 컨버터를 통해 코드가 간단해진다는 것을 알 수 있습니다.

주의해야할 점이 있습니다. 보통은 컨트롤러에 트랜잭션이 포함되지 않기 때문에, 컨트롤러에서 바인딩된 객체에 변경을 요청해도 변경이 적용되지 않습니다. 위 예시는 findById()처럼 객체가 영속성 컨텍스트에 Persist되는지 알기위해, 컨트롤러에 트랜잭션을 위임한 상황입니다.

만약 위 객체의 데이터를 변경하려면, 해당 객체를 트랜잭션이 있는 서비스 계층으로 전달해서 사용해야 합니다.

 

반응형