Spring MVC Project 구성 시 필요했던 복잡한 환경 설정을 최소화 하여
개발자로 하여금 비즈니스 로직 구현에 집중할 수 있도하기 위해 개발됨
내장된 서버(Tomcat 등)를 제공해서 war 배포 없이 독립 실행이 가능한 웹애플리케이션을 개발할 수 있음
→ Spring MVC Project처럼 Tomcat 서버를 Start 하는 것이 아닌 Java Project 처럼
main 메서드가 작성된 class를 Run해서 실행 → 자동으로 내장된 Tomcat 서버가 시작됨
다양한 Starter POM 파일을 제공해서 Maven, Gradle 등의 빌드 도구 구성, 라이브러리 관리를 간소화
Spring Starter를 이용해서 프로젝트를 생성 및 초기 설정을 간소화
1 . STS4 다운로드 https://spring.io/tools

2. STS 설정
메뉴 → Window → Preferences
▪ General → Show heap status 체크

▪ General → Workspace → Refresh using native hooks or polling 체크

▪ General → Appearance → Colorts and Fonts → Basic → Text Font → 원하는 폰트로 수정

3. DevStyle (이클립스 테마) 설치
Help → Eclipse MarketPlace → Dev Style 검색 → Install

4. lombok 설치
1. STS 마법사(wizard)를 이용해서 Spring Boot 프로젝트 생성
New → Spring Boot → Spring Starter Project 선택

2. 생성할 프로젝트의 기본 설정

각 항목별 설명
Service URL : 데모 프로젝트를 다운 받을 서비스 경로
(Spring 공식 페이지의 initiolizr를 통해 설정된 내용대로 데모 프로젝트를
생성해서 받아옴)
Name : 프로젝트 이름
Type : 빌드 도구(Maven 또는 Gradle)
Packaging : 배포 시 압축 형태
Java Version : 프로젝트에서 사용할 자바 버전
Language : 프로젝트에서 사용할 언어 종류
Group : 사용할 그룹(배포시 도메인, 보통 회사명을 작성, 대분류의 개념)
Artifact : 만들어진 산출물이름(프로젝트명, 소분류의 개념)
Version : 프로젝트 버전
Description : 프로젝트 설명
package : 프로젝트 기본 패키지 3레벨 (Group + Artifact로 작성)
3. 프로젝트에서 사용할 모듈, 라이브러리 의존성 추가

선택 완료 후 Finish → 다운로드가 진행됨
Spring Boot Version : 3.2.3(버전은 SNAPSHOT을 제외한 최신 버전 선택)
Selected
Spring Boot DevTools : Spring Boot 개발성 향상을 위한 도구 모음
(클래스 로딩 문제 진단, 속성 기본값, 자동 재시작, 라이브 리로드, 전역 설정, 원격 애플리케이션)
→ 브라우저에 표시되는 내용의 코드가 변하면 자동으로 애플리케이션을 재시작하여
브라우저 내용을 업데이트
Lombok : DTO(VO) 자동 완성
Spring Configuration Processor : .properties 또는 .yml 파일 자동 완성 지원
Java Mail Sender : Java로 메일 발송 코드 지원
WebSocket : 전이중 통신 관련 코드 지원(ex : 채팅)
JDBC API : Spring에서 JDBC를 사용 가능하게 하는 라이브러리 모음
MyBatis Framework : Spring에서 MyBatis를 이용하기 위한 라이브러리 모음
Oracle Driver : Oracle DB 연결에 필요한 드라이버 클래스가 포함된 라이브러리
Spring Security : Spring 보완 관련 라이브러리 모음(암호화)
Thymeleaf : View Template Engine으로 클라이어은트 응답 화면을 만들 때 사용하는
탬플릿 (Thymeleaf 사용을 공식적으로 권장)
Spring Web : Spring Web Application에 개발에 필요한 라이브러리 모음
4. application.properties 내용 추가

5. 프로젝트 실행 테스트


@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) // import 필요

또는
xxxApplication.java 파일에서 Run

http://localhost/ 접속해서 에러 페이지가 뜨면 성공
1. 프로젝트 구조

src/main/java : 자바 소스 코드를 모아두는 폴더
src/main/resources : 자바에서 사용할 자원, 설정 파일을 모아두는 폴더
templates : Java 템플릿을 모아두는 폴더(thymeleaf)static : templates에 적용될 정적 자원을 모아두는 폴더(JS, CSS, 이미지)application.properties : Spring Boot 프로젝트 관련 설정을 정의하는 파일 (중요!)Project and External Dependencies : build.gradle에 명시된 라이브러리 모음
build.gradle : gradle(빌드도구 == maven의 pom.xml)
프로젝트에 필요한 라이브러리, 배포, 빌드 관련 설정을 작성하는 파일
2. BoardProjectBootApplication.java (XXXApllication.java)
package edu.kh.project;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class BoardProjectBootApplication {
public static void main(String[] args) {
SpringApplication.run(BoardProjectBootApplication.class, args);
}
}
@SpringBootApplication : Spring Boot Application에 필요한
필수 어노테이션을 모아둔 어노테이션
(exclude = {SecurityAutoConfiguration.class})
Spring Security 자동 설정을 사용하지 않음

@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration
3. bulid.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.3'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'edu.kh'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
//implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
//implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
//runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
testImplementation 'org.springframework.security:spring-security-test'
}
tasks.named('test') {
useJUnitPlatform()
}
