우와한 개발자

[Spring Boot] Spring Boot란? - 프로젝트 생성과 구조 / application.properties 설정

by 우와한개발자

1. SpringBoot 란

  • Spring Framework를 더 쉽고 빠르게 시작할 수 있도록 만든 도구
  • 복잡한 XML 설정 없이 프로젝트 생성 가능
  • Tomcat, Jetty 등 WAS를 내장하고 있어 별도 설치 불필요
  • Spring Security, Spring Data JPA 등 다른 스프링 프로젝트와 쉽게 연동 가능
  • spring-boot-starter-* 형태의 의존성으로 필요한 라이브러리를 한 번에 가져올 수 있음

1) Spring Framework vs Spring Boot 비교

구분 Spring Framework Spring Boot
초기 설정 web.xml, servlet-context.xml 등 직접 설정 자동 설정 (Auto Configuration)
서버 외부 Tomcat 설치 필요 Tomcat, Jetty 내장
의존성 관리 버전 직접 관리 Starter로 자동 관리
실행 방식 WAR 파일로 배포 JAR 파일로 바로 실행

 

2. 스프링 부트 프로젝트

1) 생성 방법

 

2) 설정 항목

항목 설명 예시 값
Service URL 스프링 부트 프로젝트를 생성할 때 사용하는 Spring Initializr 주소 http://start.spring.io
Name 프로젝트 이름. demo
Type 빌드 도구. 의존성 관리와 빌드 방식이 달라짐 Maven / Gradle
Packaging 패키징 방식. 실행형 애플리케이션은 보통 Jar, 외부 톰캣 배포는 War를 사용 Jar / War
Java Version 사용할 자바 버전 17
Language 프로젝트를 작성할 언어 Java / Kotlin / Groovy
Group 프로젝트의 그룹명. com.example
Artifact 빌드 결과물 이름. jar/war 파일명과 기본 프로젝트 식별자에 사용됨 demo
Version 프로젝트 버전 정보. 개발 중인 버전은 보통 SNAPSHOT을 붙임 0.0.1-SNAPSHOT
Description 프로젝트 설명 Demo project for Spring Boot
Package 기본 패키지명. 생성되는 자바 클래스들의 기본 위치로 사용됨 com.example.demo

 

 

3) Packaging 선택 기준

  • SNAPSHOT : 아직 개발 중인 버전을 의미
뷰 기술 추천 패키징 이유
JSP WAR (권장) 외부 톰캣에서 안정적으로 동작
Thymeleaf JAR (권장) 내장 톰캣 템플릿 엔진이라 잘 맞음

 

3. 의존성 (Starter)

  • STS나 이클립스에서 프로젝트 생성 후 추가하려면 프로젝트 우클릭 → Spring → Add Starter
  • spring-boot-starter-* 형태로 관련 라이브러리를 한 번에 가져옴
starter 설명
spring-boot-starter-web Spring MVC, REST API, 내장 Tomcat 포함
spring-boot-starter-thymeleaf Thymeleaf 템플릿 엔진
spring-boot-starter-validation Bean Validation (@NotBlank, @Email 등)
spring-boot-starter-data-jpa JPA, Hibernate ORM
spring-boot-starter-security Spring Security 인증/인가
spring-boot-starter-test JUnit, Mockito 등 테스트 도구
spring-boot-starter-jdbc JDBC, DataSource 설정
spring-boot-starter-logging Logback 기본 로깅 (기본 포함)

 

4. 프로젝트 구조

src
├── main
│   ├── java
│   │   └── com.example.demo
│   │       ├── DemoApplication.java       ← 메인 클래스 (@SpringBootApplication)
│   │       ├── ServletInitializer.java    ← WAR 배포용 (WAR 선택 시 자동 생성)
│   │       ├── controller                 ← Controller
│   │       ├── service                    ← Service
│   │       ├── mapper                     ← Mapper 인터페이스
│   │       └── dto                        ← DTO
│   └── resources
│       ├── mapper                         ← MyBatis XML
│       ├── static                         ← CSS, JS, 이미지 등 정적 파일
│       ├── templates                      ← Thymeleaf HTML
│       └── application.properties         ← 설정 파일
└── test
    └── java                               ← 테스트 코드

 

1) DemoApplication.java

  • 항상 자동 생성되는 메인 클래스
  • @SpringBootApplication 어노테이션으로 아래 3가지를 한 번에 포함
어노테이션 역할
@SpringBootConfiguration Spring 설정 클래스임을 선언
@EnableAutoConfiguration 자동 설정 활성화
@ComponentScan 하위 패키지의 컴포넌트 자동 스캔
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

 

2) ServletInitializer.java

  • WAR 패키징 선택 시에만 자동 생성
  • 외부 Tomcat에 WAR로 배포할 때 필요한 클래스
  • SpringBootServletInitializer를 상속받아 외부 Tomcat이 Spring Boot 앱을 인식할 수 있게 해줌
public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }
}
파일 생성 조건 역할
DemoApplication.java 항상 생성 애플리케이션 시작점
ServletInitializer.java WAR 선택 시 생성 외부 Tomcat 배포용

 

5. 설정파일 : application.properites

  • Spring Boot 애플리케이션의 전반적인 설정을 관리하는 파일
  • 서버 포트, DB 연결, 로그, 파일 업로드 등 다양한 환경 설정을 정의
  • 기존 Spring의 root-context.xml과 servlet-context.xml로 나눠서 설정하던 것을 하나로 통합한 구조
  • src/main/resources 아래에 위치
# 서버 포트 변경
server.port=8090

# DB 연결 (Oracle)
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=user
spring.datasource.password=1234

# Thymeleaf 캐시 off (개발 시 템플릿 수정 즉시 반영)
spring.thymeleaf.cache=false

# 파일 업로드 크기 제한
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

# MyBatis mapper 위치
mybatis.mapper-locations=classpath:mapper/**/*.xml

# MyBatis 스네이크케이스 → 카멜케이스 자동 변환
mybatis.configuration.map-underscore-to-camel-case=true

# 로그 레벨
logging.level.com.example=DEBUG

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기