본문 바로가기
Spring

[Spring] MVC (5) Lombok 사용

by moca7 2024. 10. 17.

 

 

 

ㅁ Lombok (롬복)

- 해당 클래스에 작성되어있는 필드를 가지고 내부적으로 생성자, getter/setter, toString 등을 만들어주는 어노테이션을 제공하는 라이브러리다. (스프링과는 전혀 상관 없다)

- 클래스에 필드만 작성하고 클래스 상단에 필요로하는 생성자 또는 메소드 어노테이션을 기술하면 된다.

- 필드가 나중에 변경(타입, 이름, 추가 등)될 경우 매번 일일이 생성자 또는 메소드를 수정할 필요가 없다.

 

 

 

 


ㅁ pom.xml

 

 
<?xml version="1.0" encoding="UTF-8"?>
   
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.br</groupId>
    <artifactId>mvc</artifactId>
    <name>02_Spring_MVC</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
   
    <properties>
        <java-version>11</java-version>
        <org.springframework-version>5.3.27</org.springframework-version>
        <org.aspectj-version>1.9.19</org.aspectj-version>
        <org.slf4j-version>2.0.7</org.slf4j-version>
    </properties>
   
    <dependencies>
   
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                 </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
               
        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>  
       
        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>

        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
               
        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
   
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>        
       
       
        <!-- Lombok 라이브러리 추가 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
       
       
       
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java-version}</source>
                    <target>${java-version}</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

 

 

- 나온지 좀 되고 usages가 많은 1.18.12 버전을 사용해본다.

- 1.18.12 버전을 클릭해서 dependency 태그를 복사해서 pom.xml에 추가한다.

- maven을 쓰지 않았다면 직접 jar 파일을 다운받아서 lib 폴더에 둬야 한다.

 

 

 

 

 

 


- pom.xml에 dependency 태그를 복사해서 저장하면 progress 바에서 다운받느게 보인다. 저기에도 뜬다.

- 그런데 lombok 특징이 라이브러리를 추가했다고 바로 반영이 되지 않는다. 설치하고 재실행까지 해야 반영된다.

저 경로를 직접 찾아가서 jar 파일을 더블릭해서 설치한다.

- 설치하지 않아도 라이브러리는 추가되어 있으므로 import는 되는데 빨간 에러가 뜬다.

 

 

 

 

 

- "lombok-1.19.12.jar"를 더블클릭한다.

 

 

 

 

 

 

 

- Lombok을 쓰려면 어떤 IDE 환경에서 쓸건지 선택해야 한다. 

- c드라이브에 있으면 잘 뜨는데 안뜨면 Specify locaion..으로 직접 ~를 선택해야 한다.

- 설치가 되어있으면 저 경로 옆에 아이콘이 보인다. 아이콘이 없으니 설치되지 않은 것이다.

- 이클립스에도 설치했다.

 

 

 

 

=================================================================================

 

 

 

 

ㅁ MemberDto

 

 
package com.br.mvc.dto;

public class MemberDto {

    private String name;
    private int age;
    private String addr;
   

}

 

- 필드만 두고 다 지웠다.

 

 

 

 

 

 

 

 

 

ㅁ 

 

 

 

 

 

- Getter, Setter는 lombok 걸로 import한다.

 

 

 

 

 

- 필드 age의 자료형을 int에서 String으로 변경했다.

- 필드를 추가, 삭제, 수정하면 바로 반영된다.

 

 

 

 


ㅁ 그런데 롬복이 알아서 메소드를 만드는데 이때 명명규칙이 프레임워크가 요구하는 이름이 아닐 수 있다.

- mName 필드일 경우 setmName, getmName 이름으로 만들어져야 하는데 롬복은 setMName, getMName으로 만든다.

- el구문이나 바이바티스나 필드명 제시해서 값을 꺼낼 때가 많다.

이때 setmName, getmName 메소드를 찾기 때문에 데이터가 제대로 안꺼내질 수 있다.

- 프레임워크 기능을 이용해서 필드에 매핑시키거나 값을 꺼낼 때 제대로 매핑을 못하거나 값을 가져오지 못할 수 있다.

#{mName}, ${mName}

- 필드명에 소문자 1개 이후에 대문자가 오지않게 하면 된다.

롬복을 쓸거면 필드는 소문자 최소 2개 이상으로 시작하는 이름으로 지어야 한다.

 

 

 

 

 

ㅁ 유의사항

- 롬복 라이브러리 추가만으로 바로 사용이 불가능하다.

- 해당 IDE(통합개발환경, Eclipse, STS)에서 롬복을 사용할 수 있도록 설치해주는 과정이 필요하다. 설치후 재실행해야 한다.

- 롬복 라이브러리(.jar)를 실행시키면 설치창이 뜬다.

 

 

 

 

 

 

 

- 롬복을 사용하면 age의 값을 넘기지 않아도 오류가 나지 않는다.