Spring/Spring JPA
[JPA]@ToString.Exclude
개발자잡
2024. 11. 25. 09:36
@ToString.Exclude는 Lombok 라이브러리에서 제공하는 어노테이션입니다. 이는 @ToString 어노테이션과 함께 사용되며, 객체를 문자열로 변환할 때(ToString 메서드 생성 시) 특정 필드를 제외하도록 설정할 수 있습니다.
주요 기능
- 무한 순환 참조 방지:
- 엔티티 간 양방향 관계가 있는 경우, @ToString 메서드에서 무한 순환 참조가 발생할 수 있습니다.
- 예를 들어, A가 B를 참조하고 B가 다시 A를 참조하는 경우, toString() 호출 시 무한 루프에 빠질 수 있습니다.
- 이 경우 @ToString.Exclude를 사용하여 순환 참조 문제를 방지합니다.
- 필드 제외:
- toString() 메서드 출력에서 특정 필드를 제외할 수 있습니다.
- 예를 들어, 비밀번호와 같은 민감한 데이터를 출력에서 제외하려는 경우 유용합니다.
예제
1. 순환 참조 방지
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class User {
private Long id;
private String name;
@ToString.Exclude
private Profile profile; // 이 필드는 toString() 출력에서 제외됩니다.
}
@Getter
@Setter
@ToString
public class Profile {
private Long id;
private String bio;
@ToString.Exclude
private User user; // 이 필드도 toString() 출력에서 제외됩니다.
}
- User와 Profile이 서로를 참조하는 양방향 관계.
- @ToString.Exclude로 toString() 출력에서 서로 참조하는 필드를 제외함으로써 순환 참조 문제를 방지.
2. 민감한 데이터 숨기기
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Account {
private String username;
@ToString.Exclude
private String password; // 민감한 데이터를 제외
}
Account account = new Account();
account.setUsername("john_doe");
account.setPassword("securepassword");
System.out.println(account);
출력 결과
Account(username=john_doe)
password 필드는 출력되지 않습니다.
사용 시 주의점
- 필드 누락:
- @ToString.Exclude로 제외된 필드는 toString() 결과에 포함되지 않으므로 디버깅 시 필요한 정보를 의도치 않게 누락할 수 있습니다.
- 사용 전 제외 여부를 신중히 고려해야 합니다.
- 순환 참조와 성능:
- 순환 참조 문제를 방지하면서도 객체의 구조를 효율적으로 표현할 수 있습니다.
정리
- @ToString.Exclude는 Lombok에서 @ToString 어노테이션과 함께 특정 필드를 toString() 출력에서 제외하는 데 사용됩니다.
- 주로 순환 참조 문제 해결 또는 민감한 정보 보호를 위해 활용됩니다.