본문 바로가기
쿤즈 Dev/Spring Boot

[Spring Boot] 롬복(Lombok)과 Mybatis 사용시 IndexOutOfBoundsException 발생 그리고 해결 방법

by :)Koon 2023. 8. 9.

스프링 부트(Spring Boot)를 사용해서 백엔드 API를 개발할 때, 롬복(Lombok)을 많이 사용한다. 편하기도 하고 반복된 메서드를 만들 필요도 없기 때문에 잘만 사용하면 매우 훌륭한 라이브러리라 생각된다.

최근 Mybatis를 함께 사용하여 프로젝트를 진행 중에 갑자기 발생된 문제를 해결한 방법에 대해서 공유하려 한다.


롬복(Lombok)의 사용 시 @Builder의 사용

롬복에는 여러 가지 애노테이션이 있습니다. 주로 @Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor, @Data, @ToString을 사용한다. 거의 대부분의 모든 것을 사용하는 것 같다. 저의 경우는 @Builder는 잘 사용하지 않는다. 빌더 패턴을 이용해서 체이닝을 사용하기보다는 static 메서드를 사용하여 객체를 만드는 것을 선호하기 때문이다.

 

그렇다면 @Builder는 어떤 역할을 하는 것일까?

롬복의 @Builder는 빌더 패턴을 구현하는 데 사용되는 애노테이션이니다. 빌더 패턴은 객체를 생성할 때 복잡한 생성자 매개변수를 줄이고 가독성을 높이기 위해 사용되는 디자인 패턴이다.

 

이 @Builder 애노테이션은 클래스에 적용할 수 있으며, 해당 클래스를 빌더 패턴의 일부로 만들어준다. 이를 통해서 인스턴스 생성을 간편하게 할 수 있으며, 필요한 속성만 선택적으로 지정할 수 있다.

 

간단하게 사용 예시를 보자.

import lombok.Builder;
import lombok.Getter;
import lombok.ToString;

@Getter
@Builder
public class Person {
    private String name;
    private int age;
    private String address;
}

// 사용 예시:
Person person = Person.builder()
                      .name("John")
                      .age(30)
                      .build();

클래스에 @Builder 애노테이션을 붙여주었기 때문에 객체 생성 시 체이닝 메서드를 사용할 수 있다.


롬복과 Mybatis 함께 사용 시 주의할 점

롬복과 Mybatis를 함께 사용할 경우 몇 가지 주의할 점이 있다. 이를 지켜야 원활한 동작을 보장 할 수 있다.


의존성 관리

롬복과 Mybatis를 함께 사용할 경우, 의존성 관리를 잘 조정해야 한다. 프로젝트 빌드 시스템에 두 라이브러리의 버전 충돌이 없도록 확인하고, 최신버전을 사용하는 것이 좋다.


애노테이션 제약사항

롬복의 @Builder 애노테이션을 사용할 때, 빌더 패턴과 함께 일부 Mybatis 기능을 사용하는 경우 제약사항이 있을 수 있다. 롬복이 생성하는 코드가 Mybatis의 동작과 충돌하지 않도록 주의해야 한다.


쿼리 결과 매핑

데이터베이스의 결과를 자동으로 매핑해 주는 라이브러리가 Mybatis다. 이때 롬복의 @Builder만을 사용하면 문제가 발생한다. 이유는 @Builder에는 기본생성자를 만들어주는 기능이 없기 때문에 매핑에서 문제가 발생할 수 있다. 이런 경우 @NoArgsConstructor와 @AllArgsConstructor를 함께 사용해 주어야 이 문제를 해결할 수 있다. 이 문제로 IndexOutOfBoundsException이 발생할 수 있다.


생성자 주입과 세터 메서드

Mybatis에서는 주로 생성자 주입 또는 세터메서드를 사용하여 매개변수에 값을 바인딩한다. 롬복의 @Builder는 생성자 주입을 사용하지만, Mybatis가 세터 메서드 기반의 바인딩을 선호하는 경우가 있다. 이런 경우 롬복의 빌더 패틴 대신 기본 생성자와 세터 메서드를 사용하는 것이 좋을 수도 있다.


이번 포스팅에서는 롬복과 Mybatis를 동시에 사용할 때 발생된 문제에 대해서 알아보고 근본적인 원인에 대해서 알아보았다. 결국은 롬복의 애노테이션의 정확한 기능들을 알 필요가 있었고, Mybatis와 함께 사용될 때 발생될 문제가 명확했다. 객체를 생성의 문제, 그리고 바인딩의 문제. 역시 기본이 가장 중요하다는 사실을 다시 알게 되었다.

댓글