BackEnd/JPA

@Transient μ–΄λ…Έν…Œμ΄μ…˜μ— λŒ€ν•œ 이해

hyunki.Dev 2023. 4. 20. 10:52

πŸ“Œ λ“€μ–΄κ°€λ©°

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” @Transient μ–΄λ…Έν…Œμ΄μ…˜μ΄ 무엇인지, 그리고 κ·Έ μ“°μž„μ— λŒ€ν•˜μ—¬ μ •λ¦¬ν•˜κ³ μž ν•©λ‹ˆλ‹€. μƒˆλ‘­κ²Œ ν•©λ₯˜ν•œ λ„λ©”μΈνŒ€μ˜ μŠ€ν”„λ§λΆ€νŠΈ λ‘œμ§μ—μ„œ @Transient κ°€ λ‹€μˆ˜ λ°œκ²¬λ˜μ–΄ μ •λ¦¬ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ“Œ @Transient λž€

@TransientλŠ” μ—”ν‹°ν‹° 객체의 데이터와 ν…Œμ΄λΈ”μ˜ 컬럼(column)κ³Ό λ§€ν•‘ν•˜κ³  μžˆλŠ” 관계λ₯Ό μ œμ™Έν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€. 주둜 λ³΄μ•ˆμ •λ³΄λ‚˜ ꡳ이 ν…Œμ΄λΈ”μ— μ €μž₯ν•  ν•„μš”λŠ” μ—†μ§€λ§Œ 도메인 둜직 λ˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μƒ 계산을 μœ„ν•΄ ν•„μš”ν•œ 경우 ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ„ ν™œμš©ν•©λ‹ˆλ‹€.

 

더 μ •ν™•νžˆ ν‘œν˜„ν•˜λ©΄ JPA의 κ°€μž₯ 큰 νŠΉμ§• 쀑 ν•˜λ‚˜μΈ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ λŒ€μƒμ—μ„œ μ œμ™Έμ‹œν‚€κΈ° μœ„ν•˜μ—¬ μ‚¬μš©λ©λ‹ˆλ‹€.

λ˜ν•œ JPA 의 컬럼 맀핑 레퍼런슀 μ–΄λ…Έν…Œμ΄μ…˜μ€ Field, Property 방식을 μ§€μ›ν•˜κΈ° 떄문에 ν•„λ“œμ™€ λ©”μ„œλ“œμ— μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

@Transient μ–΄λ…Έν…Œμ΄μ…˜μ„ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” μ˜ˆμ‹œλŠ” νšŒμ›(Member) μ—”ν‹°ν‹°μ˜ confirmPassword ν•„λ“œ μž…λ‹ˆλ‹€.

 

@Entity
public class Member{
    @Id
    private Long id; // PK
    private String userId; // μ‚¬μš©μž 아이디
    private String password; // λΉ„λ°€λ²ˆν˜Έ
    private String confirmPassword; // λΉ„λ°€λ²ˆν˜Έ μž¬μž…λ ₯
}

 

μœ„μ˜ μ—”ν‹°ν‹° κ°μ²΄μ—μ„œ confirmPasswordλŠ” ꡳ이 μ €μž₯ν•  ν•„μš”κ°€ μ—†λŠ” ν•„λ“œκ°’μž…λ‹ˆλ‹€. password μ™€μ˜ μΌμΉ˜μ—¬λΆ€λ§Œ ν™•μΈν•˜λ©΄ λ˜λ―€λ‘œ 이와 같은 데이터 ν•„λ“œλ₯Ό @Transient μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ 관리할 ν•„μš”κ°€ μ—†λŠ” λ°μ΄ν„°μž„μ„ μ„ μ–Έν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

 

@Entity
public class Member{
    @Id
    private Long id;
    private String userId;
    private String password;

    // [1] @Transient μ„ μ–Έ
    javax.persistence.@Transient 
    private String confirmPassword; // λΉ„λ°€λ²ˆν˜Έ μž¬μž…λ ₯ 맀핑 μ œμ™Έ
}

 

 

πŸ“Œ μ‚¬μš©μ‹œ μ£Όμ˜ν•΄μ•Όν•  점

JPA의 μ—”ν‹°ν‹° 객체에 λŒ€ν•œ 접근방식이 μ–΄λ–»κ²Œ λ˜μ–΄μžˆλŠλƒμ— 따라 @Transient μ–΄λ…Έν…Œμ΄μ…˜μ˜ μœ„μΉ˜λ₯Ό 이에 맞게 μ„ μ–Έν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

JPA의 μ—”ν‹°ν‹° 접근방식은 @Id μ–΄λ…Έν…Œμ΄μ…˜μ˜ μœ„μΉ˜μ— 따라 κ²°μ •λ˜λ©° μ—”ν‹°ν‹°μ˜ λͺ¨λ“  ν•„λ“œ λ˜λŠ” μƒμ†λœ μ—”ν‹°ν‹°μ˜ 계측에 λŒ€ν•΄μ„œλ„ 일관성 있게 μ μš©λ˜μ–΄μ•Ό @Transient μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

// [1] ν•„λ“œ 방식
@Entity
public class Member{
    @Id
    private Long id;
    private String name;
    ...
}

// [2] λ©”μ„œλ“œ 방식
@Entity
public class Member{
    private Long id;
    private String name;
    
    @Id
    public Long getId(){return this.id;}
    public void setId(Long id){this.id = id;}
    
    public String getName(){return this.name;}
    public void setName(String name){this.name = name;}
}

 

 

@Entity
public class Member{
    @Id // ν•„λ“œ 방식
    private Long id;
    private String userId;
    private String password;
    private String confirmPassword;
    
    @Transient // JPAμ—μ„œ 인식 λΆˆκ°€ → λ™μž‘ μ•ˆν•¨ ν•„λ“œμ— @Transient μ–΄λ…Έν…Œμ΄μ…˜ μ„ μ–Έ ν•„μš”
    public String getComfirmPassword(){ return this.confirmPassword; }
}

 

 

 

 

μ°Έκ³ :