SpringBoot는 결국 Spring을 더욱 쉽고 빠르게 이용할 수 있도록 만든 도구다.
특징을 나열해보자면 다음과 같다.
1. WAS 내장
2. 단순화된 빌드 구성
3. XML 대신 Java 코드 사용
4. JAR을 사용한 배포 가능
5. Spring Actuator 제공
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
return "Hello, world!";
}
}
의존성이 모여있는 그룹. spring-boot-starter-{작업유형}이라는 명명규칙이 존재한다.
web, test, validation, actuator, data-jpa와 같은 스타터가 자주 사용된다.
현재 예제 프로젝트에 적용된 스타터는 web, test 스타터이다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
스프링부트에서는 애플리케이션이 최소한의 설정만으로도 실행되게 여러 부분을 자동으로 구성한다.
프로젝트에 쓰일 구성 후보들
자바 17의 주요 변화
String query17 = """
SELECT * FROM "items"
WHERE "status" = "ON_SALE"
ORDER BY "price";
""";
String textBlock17 = """
{
"id": %d,
"name": %s
}
""".formatted(2, "juice");
record Item(String name, int price) {
// 파라미터가 private final로 정의된다.
}
Item juice = new Item("juice", 3000);
juice.price(); // 3000
if (o instanceof Integer i) {
...
}
static double get IntegerValue(Object o) {
return switch (o) {
case Double d -> d.intValue();
case Float f -> f.intValue();
case String s -> Integer.parseInt(s);
default -> 0d;
};
}
예제를 따라 진행하던 도중 DB관련 오류가 생겼다.
오류 로그를 확인해보니 다음 줄이 눈에 띄었다.
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]
검색해보니 application.yml에 defer-datasource-initialization: true 코드를 추가하면 된다고 한다.
문제는 내 코드에는 이미 옵션이 포함되어 있었다!

잘 살펴보면 제법 멍청한 짓을 했음을 눈치챌 수 있다.
전송 쿼리 확인이라고 주석을 달아놓고 그 아래 행부터 TAB이 제대로 적용되어있지 않던 것...
다음과 같이 변경하니 오류가 바로 사라졌다. 제대로 확인하자.
