Spring

Lombok과 JPA 충돌 가능성 & 해결 방법

Albosa2lol 2025. 2. 6. 11:47

JPA 엔티티에서 Lombok을 사용할 때 충돌이 발생할 수 있는 대표적인 원인은:

  1. 프록시 초기화 문제
  2. Setter 자동 생성으로 인한 객체 일관성 문제
  3. @EqualsAndHashCode로 인한 무한 루프

Lombok을 안전하게 사용하는 방법

필수적으로 사용하면 안 되는 어노테이션

  • @Builder → 대신 @AllArgsConstructor + 정적 메서드 사용
  • @EqualsAndHashCode → 대신 @Id 기반의 equals() 직접 구현
  • @Setter → 대신 명시적인 변경 메서드 작성

안전한 대체 방법

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

 

 

  • @NoArgsConstructor(access = AccessLevel.PROTECTED): 기본 생성자를 외부에서 직접 호출하지 못하게 막아 객체 일관성을 유지한다.
  • Setter 대신 명시적인 변경 메서드 추가:

 

public void updateAge(int age) {
    this.age = age;
}