1. SpringBoot 개요
1) SpringBoot는 무엇인가?
SpringBoot는 Spirng Framework를 사용하여 독립 실행형 Production급 Application을 빠르고 쉽게 생성할 수 있도록 설계된 프로젝트이다.
자동 설정( Auto Configuration )
SpringBoot는 개발자가 Application을 시작할 때 필요한 설정을 자동으로 구성해준다. 이는 Application의 주요 기능을 자동으로 설정하고 구성하여, 개발자가 별도로 설정 파일을 작성하지 않아도 되도록 합니다.
독립 실행형 Application( Standalone Applications )
SpringBoot는 내장된 서버( 예 : Tomcat, Jetty 등 )를 사용하여 애플리케이션을 실행할 수 있다. 따라서 개발자는 별도의 외부 서버 설정 없이 Application을 실행할 수 있다.
SpringBoot의 목표는 개발자가 복잡한 설정 없이도 쉽게 Spring 기반 Application을 개발하고 실행할 수 있도록 돕는 것이다. 이를 통해 개발자는 비즈니스 로직에 더 집중할 수 있다는 것이 장점이다.
Production-ready Features
SpringBoot는 Application 모니터링, 로깅, 설정 관리를 포함한 다양한 프로덕션 레디( Production-ready ) 기능을 제공한다. 이는 운영 환경에서 필요한 다양한 기능을 쉽게 통합할 수 있도록 도와줍니다.
Spring POMs 제공
SpringBoot는 Spring Application을 쉽게 시작할 수 있도록 다양한 의존성 관리를 제공한다. 이를통해 개발자는 원하는 기능에 맞는 의존성을 손쉽게 추가할 수 있다.
명령줄 인터페이스( CLI )
SpringBoot는 명령줄 인터페이스를 제공하여 개발자가 간단한 Script를 통해 Application을 실행하고 관리할 수 있도록 도와준다.
Microservices 지원
SpringBoot는 마이크로서비스( Microservices ) 아키텍처를 쉽게 구현할 수 있도록 다양한 도구와 기능을 제공한다. 이는 작은 독립적인 서비스를 빠르게 개발하고 배포하는 데 유용합니다.
SpringBoot의 목표는 개발자가 복잡한 설정 없이도 쉽게 Spring 기반 Application을 개발하고 실행할 수 있도록 돕는것이다. 이를 통해 개발자는 비즈니스 로직에 더 집중할 수 있게 된다.
2) Spring Framework와 SpringBoot의 차이
Spring Framework
Spring Framework는 강력하고 유연한 프레임워크로, 다양한 모듈과 세부 설정을 통해 세밀하게 Application을 구성할 수 있다.
Spring Boot
Spring Boot는 Spring Framework의 설정을 단순화하고 자동화하여, 개발자가 빠르게 Application을 시작하고 실행할 수 있도록 도와주는 도구이다.. 자동 설정, 내장 서버, 스타터 종속성 등을 통해 개발 생산성을 높이고, 프로덕션 환경에서도 쉽게 운영할 수 있도록 설계되어 있다.
두 기술은 상호 보완적이며, Spring Boot는 Spring Framework의 복잡성을 줄이고 개발 경험을 개선하는 데 중점을 두어 개발되었다.
3) SpringBoot에서 Boot의 의미
Spring Boot에서의 "Boot"은 두 가지 의미를 내포하고 았다.
Framework의 초기화와 설정
Spring Boot는 "부트스트랩핑( Bootstrapping )"이라는 개념을 사용하여, Application의 초기화를 단순화하고 자동화하는 기능을 제공한다. 이는 개발자가 Application 을 시작하기 위해 필요한 많은 설정과 초기화 작업을 자동으로 처리하여, 개발자가 직접 많은 설정을 하지 않게 하여준다.
내장된 서버
SpringBoot는 Application을 실행할 때 통합된 내장 서버( 예: Tomcat, Jetty 등 )를 제공한다. 이는 Web Application을 배포하거나 실행할 때 별도의 외부 서버 설정 없이도 바로 실행할 수 있도록 한다. 이러한 내장 서버 기능은 애플리케이션 배포와 운영을 단순화하며, 개발 시간을 절약할 수 있도록 서포트 하여 준다.
따라서 Spring Boot에서의 "Boot"은 프레임워크 초기화 및 설정의 단순화와 내장된 서버 제공이라는 두 가지 주요 의미를 가지고 있다.
부트스트랩핑의 기본 개념은 "외부의 도움 없이 스스로 초기화하고 발전하는 과정"으로 이해할 수 있다.
2. 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을 독립적으로 실행할 수 있어 배포 및 유지 보수 과정을 간소화하 할 수 있다. |
Amazon Corretto 프로덕션용 OpenJDK 배포
Amazon Corretto를 사용하여 클라우드, 온프레미스 및 로컬 머신에서 동일한 환경을 실행할 수 있습니다. Corretto 17은 Linux(x64 및 aarch64), Windows(x64), macOS(x64 및 M1), Alpine Linux(x64) 및 Amazon Linux 2(x64 및 aarch
aws.amazon.com
다음으로 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 프로젝트의 생성이 완료되면 아래와 같은 화면이 나타날 것이다.
3. 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
## Spring Application 이름 설정
spring.application.name = SpringBoot
## 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
Spring Application 이름 설정
• 생성한 SpringBoot 프로젝트의 Application의 이름을 설정한다.
• 여러 마이크로서비스를 운영할 때, Application을 식별하기 위해 사용한다.
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.properties
~~ 이하 생략 ~~
# Logging Setting
logging.level.org.boot.blog = warn
logging.file.name = src/main/resources/spring_boot.log
~~ 이하 생략 ~~
Application을 사용하다가 문제가 발생하면 가장 먼저 살펴보는 것이 로그 메시지이다. 이런 로그는 디버깅 할 때도 필요하지만 실행 중인 Application의 성능을 분석하거나 다양한 용도로 사용할 수 있다.
Spring Bott는 SLF4J( Simple Logging Facade for Java )를 이용하여 로그를 관리한다.
※ log 관련하여 수정중 - logback-spring.xml 파일은 직접 만들지 않아도 된다.
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>
</appender>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n
</pattern>
</encoder>
</appender>
<logger name="org.boot" level="warn" additivity="false">
<appender-ref ref="consoleAppender"/>
<appender-ref ref="fileAppender"/>
</logger>
<root level="error">
<appender-ref ref="consoleAppender"/>
</root>
</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(Application.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을 실행하여 설정이 잘 마무리 되었는지 확인해 보자.
5. 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 캐시 설정
application.properties
## Spring Application 이름 설정
spring.application.name = SpringBoot
## 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
## Logging Setting
logging.level.org.boot.blog = warn
logging.file.name = src/main/resources/spring_boot.log
## Thymeleaf 캐시 설정
spring.thymeleaf.cache = false
Thymeleaf 캐시 설정
• 템플릿을 수정할 때마다 Application을 다시 시작하지 않고 변경 사항을 즉시 반영할지 여부를 결정한다.
• true( 기본값 ) : 템플릿 캐싱을 활성화하여 성능을 최적화( 프로덕션 환경 권장 )
• false : 템플릿 변경 사항이 즉시 반영되도록 설정( 개발 환경 권장 )
3) View 페이지 제작
src/main/resources 경로에 templates라는 디렉토리를 추가하고 hello.html 파일을 생성한다.
example.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 파일을 생성한다.
ExampleController.java
package org.boot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ExampleController {
@GetMapping("/hello")
public void hello(Model model) {
model.addAttribute("greeting", "Hello 타임리프.^^");
return "example"; // 뷰 이름을 반환
}
}
Browser를 실행하여 http://localhost:9191/hello를 입력하면 생성한 화면이 정상적으로 노출되는 것을 확인 할 수 있다.
https://velog.io/@bjtiger516/Spring-boot-레이아웃-Tiles-설정하기
[Spring boot] 레이아웃 Tiles 설정하기
Tiles는 뷰 패턴 구현에서 웹페이지의화면 구성(레이아웃)을 쉽게 구성할 수 있게 도와주는 프레임워크다. 레이아웃 설정을 통해 헤더, 푸터, 메뉴 등을 동일하게 설정해 효율적인 코딩을 도와준
velog.io
추가
resources/static/index.html 파일 생성후 초기 리다이렉트 페이지 지정
<!DOCTYPE html>
<html lang="kr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Redirecting...</title>
<script type="text/javascript">
// 페이지 로드 시 리다이렉트 실행
window.location.href = "/swagger-ui/index.html"; // 리다이렉트할 경로
</script>
</head>
<body>
</body>
</html>
'Spring Web > Spring Boot' 카테고리의 다른 글
[SpringBoot] IntelliJ Community Edition을 사용한 SpringBoot 프로젝트 제작 (0) | 2024.12.31 |
---|---|
[SpringBoot] Error - Command line is too long 해결방법 (1) | 2024.06.21 |
[SpringBoot] MyBatis 프레임워크를 사용한 CRUD 게시판 구현 (0) | 2024.04.08 |