[Spring Boot] maven 개념, Lombok 세팅

deannn.Park·2021년 6월 3일
3
post-thumbnail

Maven


maven이란 프로젝트 빌드 툴이다.

역할

여러 개의 프로젝트가 있을 때, 프로젝트마다 필요한 라이브러리를 다운받아 적용하는 것은 비효율적이다.
이 때에 maven을 통해 필요한 라이브러리를 손쉽게 다운받아서 프로젝트마다 필요한 라이브러리를 제공해준다.

사용 방법

프로젝트에서 pom,xml파일에 원하는 라이브러리를 기술하기만 하면 된다.
이전에 프로젝트에서 pom.xml 파일에 입력하고 주석한 적이 있다. 이 것이 라이브러리를 추가, 제거하는 방법이다.

예시

blog 프로젝트와 쇼핑몰 프로젝트가 있고, 둘 다 mysql를 사용해야 해서 jdbc가 필요하다고 가정하자.

maven 사용하지 않을 경우

  1. MySQL 사이트에서 JDBC를 다운받는다.
  2. JDBC가 필요한 각 프로젝트에 lib 폴더를 만든 후, 그곳에 JDBC를 복사한다.
  3. 각 프로젝트를 빌드한다.

이 경우에는 각 프로젝트마다 각자 JDBC를 복사해야 하므로 번거롭고, 프로젝트의 수 만큼 JDBC가 존재하므로 비효율적이다.

그렇다면 하나의 폴더를 만들어서 그곳에 JDBC를 넣고 각 프로젝트마다 이 폴더를 참고하도록 하고 빌드를 한다고 하자.
이렇게 하게 되면 위에서 있었던 문제점인 여러곳에 복사해서 번거로운 점과 JDBC가 여러개 존재하는 단점을 보완하게 된다.

하지만 아직도 단점은 존재한다.
프로젝트 내부에 라이브러리 파일이 존재하는것이 아니기 때문에, 배포를 할 때에는 배포하는 서버에도 별도의 lib 폴더를 만들고 이곳에 라이브러리를 다운받아야 한다.
또한, 라이브러리를 각각의 사이트에서 다운받아야 하기 때문에 다운받기 번거롭다.

maven 사용할 경우

하나의 중앙 저장소에 많은 라이브러리의 파일들을 업로드되어 있다.
maven을 설치한 후에 pom.xml에 필요한 라이브러리를 기술하면 별도의 .m2라는 폴더에 repository라는 곳에 필요한 라이브러리를 중앙저장소에서 다운로드 한다.
그리고 프로젝트 빌드 시 필요한 라이브러리를 repository 폴더를 참고하면 된다.
배포 시에도 서버에서 maven을 설치하고 빌드하면 pom.xml에 기술된 라이브러리를 자동으로 중앙 저장소에서 다운받은 후에 빌드되므로 사용하기 전의 단점들을 보완하여 손쉽게 빌드할 수 있다.

Lombok 세팅

  1. pom.xml
  2. <dependencies>안에 아래 코드의 내용이 있는지 확인한다. 없다면 추가한다.
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

IntelliJ가 아닌 STS를 사용중이라면 lombok을 자동으로 인식하지 못하기 때문에 수동으로 설치를 해줘야 합니다.
제가 STS를 안써봐서 자세한 것은 잘 모르겠지만 그런 경우도 있다고 합니다.
방법은 여기에서 확인해보세요.

 

Lombok 사용


src - main - java - com.***.blog - test - Memver.java 파일을 열고 Member 클래스의 생성자와 Getter, Setter, 생성자를 지운다.

 

@Getter, @Setter

클래스 위에 @Getter, @Setter 어노테이션을 추가한다. 그럼 빌드 시 자동으로 Getter와 Setter가 생성된다.

 

@Data

@Getter, @Setter 어노테이션을 둘 다 사용할 때에는 이 대신 @Data 어노테이션을 추가해도 된다. 하나의 어노테이션으로 Getter와 Setter의 역할을 할 수 있게 된다.

 

@AllArgsConstructor

@AllArgsConstructor는 생성된 모든 멤버변수를 인자로 받는 생성자를 만드는 어노테이션이다.

 

@RequiredArgsConstructor

만약 객체의 멤버변수 값이 수정될 일이 없는 클래스라면 @RequiredArgsConstructor을 사용해서 생성자를 만들 수 있다. 이 어노테이션은 클래스를 만들 때 필수적인 멤버변수(final 변수)를 인자로 받는 생성자를 만든다.

 

@NoArgsConstructor

@NoArgsConstructor는 빈 생성자를 만드는 어노테이션이다.

 

Lombok 테스트


1. Member.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Member {
    private int id;
    private String username;
    private String password;
    private String email;

}

2. HttpControllerTest.java

@RestController
public class HttpControllerTest {

    private static final String TAG = "HttpControllerTest : ";
    
    @GetMapping("/http/lombok")
    public String lombokTest() {
        Member m = new Member(1, "deannn", "123", "deannn@test.com");
        System.out.println(TAG + "getter : " + m.getId());
        m.setId(5000);
        System.out.println(TAG + "setter : " + m.getId());
        return "lombok test finished";
    }
    
    ...
    
 }

테스트 결과

http://localhost:8080/http/lombok 접속
http://localhost:8080/http/lombok

콘솔창

 

Builder


위에서 사용한 생성자 어노테이션을 사용하면 객체를 만들 때 항상 정해진 순서에 맞춰서 필요한 모든 파라미터를 넣어줘야 한다. 하지만 builder를 사용하면 순서 상관없이 만들 뿐 아니라 입력하지 않은 값은 자동으로 null을 넣어 생성하거나 할 수 있다.

1. Member.java

@Data
@NoArgsConstructor
public class Member {
    private int id;
    private String username;
    private String password;
    private String email;

    @Builder
    public Member(int id, String username, String password, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
    }
}

2. HttpControllerTest.java

@RestController
public class HttpControllerTest {

    private static final String TAG = "HttpControllerTest : ";

    @GetMapping("/http/lombok")
    public String lombokTest() {
        Member m = Member.builder().username("deannn").password("123").email("deannn@test.com").build();
        System.out.println(TAG + "getter : " + m.getId());
        m.setId(5000);
        System.out.println(TAG + "setter : " + m.getId());
        System.out.println(TAG + "getter : " + m.getUsername());
        m.setUsername("park");
        System.out.println(TAG + "setter : " + m.getUsername());
        return "lombok test finished";
    }

테스트 결과

http://localhost:8080/http/lombok 접속
http://localhost:8080/http/lombok

콘솔창

참고
데어프로그래밍 Springboot - 나만의 블로그 만들기
데어프로그래밍 블로그

profile
컴퓨터 관련 여러 분야 공부중

1개의 댓글

comment-user-thumbnail
2023년 8월 30일

maven개념에 대해서 가장 잘 설명된 포스팅인 것 같아요! 좋은 글 감사합니다.

답글 달기