본문 바로가기
프로그래밍/Spring

@Transient 사용 예, - Entity클래스에 임시 프로퍼티 정의할 때

by Mr-후 2023. 4. 12.
반응형

지난번  MSA관련 책을 읽을 때 JPA파트에서 얼핏 읽었던 것 같아 기억을 더듬어 검색을 해보니 기억이 맞았다. 

이번에 1.0서비스의 데이터베이스 중 일부 테이블의 데이터를 2.0으로 마이그레이션을 해야하는 일이 있는데, SQL에서 하는 것이 아니라 사용자별 마이그레이션이고 어플리케이션 단에서 처리를 해서 마이그레이션을 해야 하는 상황이다. 

Legacy 테이블의 Entity에서 2.0 테이블로 마이그레이션을 위해 로직을 구현하다 보니, 건당 repository조회를 해야할 상황이 너무 많아, 최초로 조회해 리스트를 순환하면서 해당 Entity클래스에 필요하는 관계를 맺은 객체(Entity)를 담아, 최종적으로 save()를 하면 좋겠다는 생각이 들었다. 

 

Legacy 테이블의 Entity에 정형화 되지 않은 관계를 갖는 객체(Entity)를 담아 이후 재순환 하는 과정에서 해당 객체를 참조하기 위해 테이블의 Column과 1:1 매치가 아닌, 임의의 프로퍼티(변수)를 추가하고 setter/getter를 통해 값을 핸들링하기 위해 @Transient를 사용했다. 검색을 통해 찾아본 결과 이 어노테이션은 '임시' 라는 뜻을 가지고 있다고 하니, 이번에 사용하는 것이 가장 유용한 사용 사례라 할 수 있을 것 같다. 

 

    @Column
    Boolean deleted=false;

    @Transient
    LegacyProject legacyProject;  //1.3 Project

    @Transient
    Project project;                //2.0 Project

이렇게 추가된 Entity의 Properties들은 별도의 Json이나 직렬화를 통해 영속성을 가질 필요가 없는 말 그대로 임시적인 것들이므로 마이그레이션이 끝나면 사용할 일이 없고 더군더나, 마그레이션을 위한 임시 참조 값이므로 별도의 DAO, DTO를 만들어서 사용할 필요도 없어 좋은 것 같다. 

 

Entity에 테이블의 컬럼 외의 필드를 추가하고 싶을 때는 @Transient를 사용하면 좋다. 

반응형