1. Spring Initializr를 이용한 Spring Boot 신규 프로젝트 생성
① | Name | 프로젝트 이름 |
② | Location | 프로젝트 생성 경로 |
③ | Language | Java / Kotlin / Groovy 중 선택 |
④ | Type | 빌드 자동화 도구 선택 ( Gradle - Groovy / Gradle - Kotlin / Maven 중 택일 ) |
⑤ | Group | 프로젝트 그룹 |
⑥ | Artifact | 프로젝트 식별자 |
⑦ | Package name | 패키지 이름은 클래스나 파일이 속하는 패키지를 나타냄( 소스 코드 상단에 선언된다. ) |
⑧ | JDK | JDK는 IntelliJ IDEA의 기본설정인 Amazon Corretto에서 지원하는 Open JDK를 사용 |
⑨ | Java | Java 버전은 설정한 JDK와 동일한 버전으로 선택 |
⑩ | Packaging | Spring Boot는 내장 서버를 지원기에 Packaging을 Jar로 설정하게되면 Application을 독립적으로 실행할 수 있어 배포 및 유지 보수 과정을 간소화하 할 수 있다. |
다음으로 Dependencies 선택항목에서 Spring Web과, Spring Web Services를 선택하여 최소한의 항목만 선택하여 준다.
Spring Web
• Spring Web은 웹 애플리케이션을 개발하는 데 필요한 기본적인 기능을 제공하는 모듈
• 주요 기능으로는 HTTP 요청 및 응답 처리, 컨트롤러 및 핸들러의 작성, MVC (Model-View-Controller) 아키텍처 지원,
RESTful 웹 서비스를 개발하는 데 필요한 기능 등이 있다.
• Spring Web 모듈은 DispatcherServlet을 포함하여 웹 애플리케이션의 요청을 처리하고 적절한 컨트롤러에 전달하는 데
필요한 다양한 구성 요소를 제공한다.
• 주로 Web Application의 BackEnd 개발에 사용된다.
Spring Web Services
• Spring Web Services는 SOAP (Simple Object Access Protocol) 웹 서비스를 개발하는 데 사용된다.
• 주로 기업 간 시스템 통합이나 비즈니스 프로세스 간 통신을 위해 사용된다.
• Spring Web Services는 SOAP 메시지 처리, 웹 서비스 엔드포인트 구현, WSDL (Web Services Description Language)
작성, 웹 서비스 클라이언트 생성 등의 기능을 제공한다.
• 주로 XML 기반의 Web Service 개발에 사용된다.
두 가지 모듈은 Spring Framework를 사용하여 다양한 유형의 Web Application을 구축하는 데 필요한 핵심 기능이다.
Intellij IDEA에서 Spring Boot 프로젝트의 생성이 완료되면 아래와 같은 화면이 나타날 것이다.
2. Gradle 의존성 주입 및 기본 설정 변경
1) Spring Boot 라이브러리 추가
Spring Boot 프로젝트가 완성되면 build.gradle을 열고 dependencies에 몇가지 라이브러리 들을 추가하여 준다.
build.gradle
plugins {
id "java"
id "org.springframework.boot" version "3.2.2"
id "io.spring.dependency-management" version "1.1.4"
}
group = "org.boot"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = "17"
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.springframework.boot:spring-boot-starter:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-web:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-web-services:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-logging:3.2.2"
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
tasks.named("test") {
useJUnitPlatform()
}
Spring Bott Starter - org.springframework.boot:spring-boot-starter:버전
• Spring Boot를 시작하기 위한 핵심 의존성 집합을 제공하는 라이브러이다.
• Spring Boot Application을 개발하는 데 필요한 다양한 모듈 및 의존성을 포함하고 있다.
Spring Boot Starter Logging - org.springframework.boot:spring-boot-starter-logging:버전
• Spring Boot Application에서 로깅을 위한 필수적인 의존성을 제공하는 Spring Boot 라이브러이다.
• Spring Boot는 기본적으로 Commons Logging, Logback, Log4j2 중 하나를 로깅 구현체로 사용하며,
spring-boot-starter-logging은 이러한 로깅 프레임워크들에 대한 의존성을 포함하고 있다.
로깅 의존성 제공 | Spring Boot에서 사용할 로깅 프레임워크에 대한 필수적인 의존성을 제공 |
기본 로깅 설정 | Spring Boot의 기본 로깅 설정을 자동으로 구성하고 활성화 |
로그 레벨 설정 | Application의 로그 레을 조정할 수 있다. |
로그 출력 형식 설정 | 로그의 출력 형식을 지정하고 커스터 마이징 할 수 있다. |
로깅 구현체 선택 | Spring Boot가 내장하고 있는 로깅 프레임워크중에서 사용할 구현 체를 선택 할 수 있다. |
2) Spring Boot Application의 설정 변경
application.properties는 Spring Boot Application의 설정 파일로, Application의 동작에 대한 다양한 설정을 지정하는데 사용된다.
application.properties
## Web Application의 타입 설정
spring.main.web-application-type = servlet
## Banner 설정
spring.main.banner-mode = console
spring.banner.location = banner/banner.txt
## Server Port 설정
server.port = 9191
Web Application의 타입 세팅
• Spring Boot Application의 Web Application 유형을 지정한다.
• servlet으로 설정하게 되면 Spring MVC를 기반으로 한 Servlet 기반의 Web Application으로 설정된다.
Banner 설정
• spring.main.banner-mode와 spring.banner.location은 Spring Boot Application의 배너 설정을 지정한다.
• spring.main.banner-mode의 값을 console로 지정하여 콘솔에 배너를 표시한다.
• spring.banner.location은 배너 파일의 위치를 지정한다.
Server Port 설정
• Spring Boot Application의 내장 서버가 바인딩 할 포트 번호를 지정하는데 사용된다.
• Application이 실행될 때 내장 서버가 사용할 포트 번호를 지정한다.
3) Banner 설정
Sprig Boot Application을 실행하면 노출되는 배너정보를 아래와 같이 변경하여 준다.
banner.txt
#######################################################################
Spring Boot 프로젝트 Start
${spring-boot.formatted-version}
#######################################################################
4) logback을 이용한 로그 출력
Application을 사용하다가 문제가 발생하면 가장 먼저 살펴보는 것이 로그 메시지이다. 이런 로그는 디버깅 할 때도 필요하지만 실행 중인 Application의 성능을 분석하거나 다양한 용도로 사용할 수 있다.
Spring Bott는 SLF4J( Simple Logging Facade for Java )를 이용하여 로그를 관리한다.
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>src/main/resources/logs/boot_log.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
src/main/resources/logs/boot.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n
</pattern>
</encoder>
<logger name="org.boot" level="warn" additivity="false">
<appender-ref ref="consoleAppender"></appender-ref>
<appender-ref ref="fileAppender"></appender-ref>
</logger>
<root level="error">
<appender-ref ref="consoleAppender"></appender-ref>
</root>
</appender>
</configuration>
Application.java
package org.boot;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
private static final Logger logger = LoggerFactory.getLogger(SpringBootApplication.class);
public static void main(String[] args) {
logger.trace("TRACE 로그 메시지");
logger.debug("DEBUG 로그 메시지");
logger.info("INFO 로그 메시지");
logger.warn("WARN 로그 메시지");
logger.error("ERROR 로그 메시지");
SpringApplication.run(Application.class, args);
}
}
Level | Color | 의 미 | |
① | ERROR | Red | 사용자 요청을 처리하는 문제 |
② | WARN | Yellow | 처리 가능한 문제지만, 향후 시스템의 에러의 원인이 될 수 있는 문제 |
③ | INFO | Green | 로그인이나 상태 변경과 같은 정보성 메시지 |
④ | DEBUG | Green | 개발 시 디버깅 목적으로 출력하는 메시지 |
⑤ | TRACE | Green | DEBUG 레벨보다 좀더 상세한 메시지 |
로그 레벨은 우선 순위가 정해져 있어서 특정 로그 레벨을 지정하면 상위 우선 순위 로그가 모두 출력된다. 예를 들어 DEBUG로 지정하면 DEBUG를 시작으로 INFO, WARN, ERROR 메시지가 모두 출력된다. 만약 WARN으로 지정하면 WARN, ERROR에 해당하는 로그 메시지만 출력된다. 따라서 개발 단계에서는 DEBUG나 TRACE로 설정하지만 실제 운영 단계로 넘어가면 WARN 이상의 레벨로 저정해야 한다.
이제 Spring Boot Application을 실행하여 설정이 잘 마무리 되었는지 확인해 보자.
4. Thymeleaf를 이용한 화면 출력
1) Thymeleaf 라이브러리 추가하기
implementation "org.springframework.boot:spring-boot-starter-thymeleaf:3.2.2"
build.gradle
plugins {
id "java"
id "org.springframework.boot" version "3.2.2"
id "io.spring.dependency-management" version "1.1.4"
}
group = "org.boot"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = "17"
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.springframework.boot:spring-boot-starter:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-web:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-web-services:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-logging:3.2.2"
implementation "org.springframework.boot:spring-boot-starter-thymeleaf:3.2.2"
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
tasks.named("test") {
useJUnitPlatform()
}
org.springframework.boot:spring-boot-starter-thymeleaf:버전
• Thymeleaf 템플릿 엔진을 사용할 때 필요한 의존성을 제공하는 Spring Bott Start 라이브러이다.
• Thymeleaf는 Server 사이드 Web 및 Application 개발을 위한 Java 템플릿 엔진으로,
HTML, XML, JavaScript, CSS등의 마크업 언어를 처리할 수 있다.
• Thymeleaf를 사용하면 Server 사이드 템플릿 엔진으로 사용하여 동적으로 Web 페이지를 렌더링 할 수 있다.
2) Spring Boot Application에 Thymeleaf 캐시 설정
## Web Application의 타입 설정
spring.main.web-application-type = servlet
## Banner 설정
spring.main.banner-mode = console
spring.banner.location = banner/banner.txt
## Server 세팅
server.port = 9191
## Thymeleaf 캐시 설정
spring.thymeleaf.cache = false
3) View 페이지 제작
src/main/resources 경로에 templates라는 디렉토리를 추가하고 hello.html 파일을 생성한다.
hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>타임리프 테스트</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body th:align="center">
<h1 th:text="${greeting}"></h1>
</body>
</html>
4) Controller 설정하기
프로젝트의 Package 경로에 board.controller를 추가하여 주고 BoardController.java 파일을 생성한다.
BoardController.java
package org.boot.board.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class BoardController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public void hello(Model model) {
model.addAttribute("greeting", "Hello 타임리프.^^");
}
}
Browser를 실행하여 http://localhost:9191/hello를 입력하면 생성한 화면이 정상적으로 노출되는 것을 확인 할 수 있다.
https://velog.io/@bjtiger516/Spring-boot-레이아웃-Tiles-설정하기