스프링부트 간편하게 해주는 도구 설치하기

prana·2023년 5월 8일

SpringBoot

목록 보기
2/22

Spring Boot Devtools

이전 컨트롤러 파일에서

package com.mysite.sbb;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello SBB"; --- 실행한 후, 문자열을 바꿔도 리로딩되지 않는다.
    }
}

프로그램을 수정하고, 변경된 사항을 확인하려면, 매번 서버를 재시작해야하기 때문이다.
이 문제를 해결하려면, Spring Boot Devtools 설치를 해야 한다.

1.

build.gradle 파일 수정

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	
    추가✅ 
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
}

developmentOnly란?

  • 개발 환경에만 적용되는 설정이다. 즉, 운영환경에 배포되는 jar, war 파일에는 developmentOnly 로 설치된 라이브러리는 제외된다.

2.

작성 완료 이후 Gradle Refresh

좌측 하단에 재시작 누르고, 변경 적용되는지 확인해보자.

3.

서버를 재시작 하지 않아도 문자열이 잘 출력된다.

문자열을 고치고, 새로고침을 하면 IDE에서는 리로딩되면서,
화면에서는 바뀐 문자열로 바뀐 것을 확인했다.

Live Reload++

위에서는 새로고침을 해야만 변경된 내용을 확인할 수 있다.
(Chrome 확장프로그램) Live Reload 기능을 사용하면, 브라우저 리프레시 없이 변경사항을 확인할 수 있다.

Live Reload 설치하기


확장 프로그램을 켜놓았고, 문자열을 바꿔보기로 한다.


약 2초 정도의 지연 시간이 있는 것 같으나, 빨리 바뀌는 편인 것 같다!

Lombok

자바 클래스에 Getter, Setter, 생성자 등을 자동으로 (깔끔하게 소스코드를) 만들어주는 도구.

1.

Intellij - 파일 - 설정

lombok 검색 후 확인

2.

build.gradle 파일에 내용을 추가하자. 수정한 다음에는 gradle refresh과정을 하도록 하자.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	✅ compileOnly 'org.projectlombok:lombok'
	✅ annotationProcessor 'org.projectlombok:lombok'
}

compileOnly : 해당 라이브러리가 컴파일 단계에서만 사용되도록 한다.
annotationProcessor : 컴파일 단계에서 애너테이션을 분석, 처리하기 위해 사용한다.

3.

Getter, Setter 넣고 동작되는지 확인하자.

디렉토리는 다음과 같다.

package com.mysite.sbb;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class HelloLombok {
    private String hello;
    private int lombok;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setHello("헬로");
        helloLombok.setLombok(5);

        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}

4.

main 실행시키기
롬복으로 컴파일 된 클래스에는 Getter와 Setter 메서드가 실제로 포함된다.


main함수에 오른쪽 마우스 눌러서 실행시키기

우측 하단에 물어보길래 확인 눌렀다.... ㅋㅋㅋㅋㅋ


콘솔에 "헬로"와 5가 출력되는 것을 확인할 수 있다.

5.

클래스 파일 수정하기

package com.mysite.sbb;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@RequiredArgsConstructor
@Getter
//@Setter
public class HelloLombok {
    private final String hello;
    private final int lombok;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok("hihi", 567);
        //helloLombok.setHello("헬로");
        //helloLombok.setLombok(5);

        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}

6.

@RequiredArgsConstructor
변수 hello, lombok 속성에 final을 적용하고, 롬복의 @RequiredArgsConstructor 애너테이션을 적용하면, 해당 속성을 필요로 하는 생성자가 롬복에 의해 자동으로 생성된다.
(✅ final이 없는 속성은 생성자에 포함되지 않는다)

final을 적용했기 때문에, @Setter는 의미가 없으며, Setter 메서드들도 사용할 수 없다. 한 번 설정한 값을 변경할 수 없게 하는 키워드이다.

package com.mysite.sbb;

import lombok.Getter;

@Getter
public class HelloLombok {

    private final String hello;
    private final int lombok;

	// 생성자를 직접 작성한 경우와 동일하다. 
    public HelloLombok(String hello, int lombok) {
        this.hello = hello;
        this.lombok = lombok;
    }

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok("헬로", 5);
        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}

@RequiredArgsConstructor 애너테이션은 이후 진행되는 챕터에서 의존성 주입(Dependency Injection)시 사용된다.

DI (Dependency Injection) : 스프링이 객체를 대신 생성하여 주입한다.

0개의 댓글