왜 Boot 자동 설정 스타터 내장 서버 설정 파일 📝 문제풀이
◀ 이전 📋 목차 CH 06 ▶
🚀 CHAPTER 05 · 중급

Spring Boot — 바로 실행되는 스프링

순수 스프링은 강력하지만 설정이 번거로웠어요. Spring Boot는 그 설정을 자동화해서 "바로 실행되는" 스프링을 만들어줘요. 이번 장은 자동 설정·스타터·내장 서버·설정 파일이라는 네 가지 열쇠를 잡습니다.

🎯 이 장을 끝내면
😣
왜 Spring Boot
순수 스프링의 "설정 지옥"
Boot가 왜 나왔는지부터 잡으면 전부 이해돼요.

순수 Spring Framework는 강력하지만, 프로젝트를 하나 시작하려면 설정이 번거로웠어요. XML 설정 파일을 잔뜩 쓰고, 라이브러리(의존성) 버전을 서로 맞추고, 웹 서버를 따로 설치·연동하는 등 "돌아가게 만들기까지"의 준비 작업이 많았어요.

🧱 순수 스프링 — 시작 전 준비가 많음 XML 설정, 의존성 버전 충돌 조율, 서버 설치·배포 설정… 정작 코드를 짜기도 전에 설정에 시간을 쏟게 돼요. "이 좋은 프레임워크를 더 쉽게 시작할 수 없을까?"라는 고민에서 Spring Boot가 태어났어요.
🚀 Spring Boot — 설정을 자동화 Spring Boot는 그 번거로운 설정을 대부분 자동으로 해줘요. 개발자는 최소한의 설정만 하고 바로 실행되는 스프링을 얻어요. "설정 지옥"에서 벗어나 비즈니스 로직에 집중할 수 있어요.
Spring Boot 자동 설정 @SpringBootApplication Starter 내장 톰캣 application.properties jar
🧭
큰 그림. Spring Boot는 스프링을 대체하는 게 아니라, Spring Framework 위에 편리함을 얹어 감싼 것이에요. 안쪽은 여전히 우리가 배운 IoC/DI 컨테이너가 돌아가요.
⚖️ 스프링 프레임워크 vs 스프링 부트 — 한눈에 비교
구분Spring Framework (순수 스프링)Spring Boot
설정XML·자바 설정을 직접 다 작성자동 설정(Auto-Configuration)이 기본값을 채워줌
의존성라이브러리·버전을 하나하나 맞춰 추가스타터(Starter) 한 줄로 묶음 추가
웹 서버외부 톰캣에 war로 배포내장 톰캣 포함, jar 하나로 실행
실행서버에 배포 후 구동java -jar 한 줄이면 바로 실행
시작까지준비할 게 많아 느림거의 바로 개발 시작
둘의 관계IoC/DI·AOP 등 핵심 기반(뿌리)그 프레임워크를 "쉽게 쓰게" 감싼 것
💡
면접 한 줄 답변. "스프링 부트는 스프링 프레임워크를 대체하는 게 아니라, 자동 설정·스타터·내장 서버설정 부담을 없애 바로 실행되게 해주는 것"이에요. 안쪽 심장(IoC/DI)은 똑같이 스프링이 돌려요.
⚙️
자동 설정
자동 설정(Auto-Configuration)
"알아서 합리적으로" 세팅해주는 Boot의 핵심.

Spring Boot는 클래스패스에 어떤 라이브러리가 있는지를 보고, 합리적인 기본 설정을 자동으로 해줘요. 예를 들어 웹 라이브러리가 있으면 "아, 웹 서버가 필요하겠네" 하고 알아서 준비해요. 덕분에 개발자가 직접 쓰는 설정이 최소화돼요.

🔤
자동 설정(Auto-Configuration) — 개발자가 일일이 손대지 않아도 스프링이 상황을 보고 알아서 기본값을 채워주는 기능이에요. 새 스마트폰을 처음 켜면 시간·언어·와이파이 같은 기본 설정이 대부분 자동으로 잡혀 있어 바로 쓸 수 있는 것과 비슷해요. 마음에 안 드는 값만 나중에 직접 바꾸면 되고요.
🔤
클래스패스(classpath) — 자바가 실행할 때 "어떤 라이브러리·클래스 파일들을 쓸 수 있는지" 훑어보는 경로 목록이에요. 스타터로 라이브러리를 추가하면 이 목록에 들어가고, Boot는 그걸 보고 무엇을 자동 설정할지 판단해요.
🔄 자동 설정이 일어나는 순서
📚
① 라이브러리 감지
클래스패스에 어떤 라이브러리가 있는지 훑어봐요.
🤔
② 상황 판단
"웹 라이브러리가 있네? 서버가 필요하겠다"고 추론해요.
⚙️
③ 기본값 적용
상황에 맞는 합리적 기본 설정을 자동으로 채워요.
④ 바로 실행
개발자는 최소한의 설정만 하고 바로 시작해요.
🪄 @SpringBootApplication — 스위치 하나 이 어노테이션 하나가 (자동 설정 + 컴포넌트 스캔 + 설정) 을 한꺼번에 켜줘요. main 메서드에서 SpringApplication.run(...) 을 호출하면 스프링 애플리케이션이 실행돼요.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication  // 자동설정 + 컴포넌트스캔 + 설정을 한 번에
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args); // 여기서 앱이 실행!
    }
}
💡 @SpringBootApplication 은 사실 @EnableAutoConfiguration(자동 설정) + @ComponentScan(컴포넌트 스캔) + @SpringBootConfiguration(설정) 을 합쳐 놓은 편의 어노테이션이에요.
💡
자동 설정의 감각. "내가 넣은 라이브러리를 보고 스프링이 알아서 기본값을 채워준다"가 핵심이에요. 필요하면 나중에 설정 파일에서 덮어쓰기(override) 할 수 있어요.
📦
스타터
스타터(Starter) 의존성
라이브러리를 "묶음"으로 한 줄에 추가.

기능 하나를 쓰려면 원래는 여러 라이브러리를 버전을 맞춰가며 일일이 추가해야 했어요. Spring Boot의 스타터(Starter)관련 라이브러리를 묶음으로 제공해서, 버전 충돌 걱정 없이 한 줄로 추가할 수 있어요.

🔤
스타터(Starter) — 어떤 기능에 필요한 라이브러리들을 버전까지 맞춰 한 봉지에 담아 둔 "밀키트"예요. 요리할 때 재료를 하나하나 사서 양을 맞추는 대신 밀키트 한 봉지만 사면 되는 것처럼, 스타터 한 줄만 추가하면 관련 라이브러리가 서로 충돌 없이 통째로 딸려 와요.
🔤
의존성(dependency) · 라이브러리 — 라이브러리는 남이 미리 만들어 둔 기능 꾸러미(코드)예요. 내 프로젝트가 그 꾸러미에 "기대어" 돌아가므로, 이렇게 가져다 쓰는 라이브러리를 의존성이라고 불러요. (스타터는 이 의존성들을 묶어 놓은 것이에요.)
스타터무엇을 묶어주나
spring-boot-starter-web웹(REST/MVC) 개발에 필요한 것들 + 내장 톰캣까지 묶음.
spring-boot-starter-data-jpaJPA로 데이터베이스 접근에 필요한 라이브러리 묶음. (CH 08)
spring-boot-starter-security인증·인가(로그인·권한)에 필요한 묶음.
spring-boot-starter-test테스트에 필요한 라이브러리 묶음.
🔧 예 — 웹 스타터 한 줄 웹 애플리케이션을 만들려면 spring-boot-starter-web 하나만 추가하면 돼요. (Gradle 예시)
// build.gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
이 한 줄에 톰캣·JSON 처리·검증 등 웹에 필요한 것들이 버전까지 맞춰서 딸려 와요.
🖥️
내장 서버
내장 서버(Embedded Tomcat)
서버 설치 없이 jar 하나로 바로 뜨는 마법.

예전에는 웹 애플리케이션을 배포하려면 톰캣 같은 웹 서버를 따로 설치하고, 만든 파일을 그 서버에 올리는 과정이 필요했어요. Spring Boot는 톰캣 같은 웹 서버가 내장돼 있어서, 별도 서버 설치·배포 없이 실행 파일(jar) 하나만으로 바로 서버가 떠요.

🔤
톰캣(Tomcat) · 내장 톰캣 — 톰캣은 웹 요청을 받아 처리해주는 웹 서버 프로그램이에요. 원래는 이걸 컴퓨터에 따로 설치하고 그 위에 앱을 올려야 했는데, Spring Boot는 톰캣을 앱 안에 아예 넣어(내장) 두었어요. 캠핑 갈 때 화장실을 찾아다니는 대신 화장실이 딸린 캠핑카를 타는 것과 같아요 — 앱만 실행하면 서버도 함께 켜지거든요.
🔤
빌드(build)·jar — '빌드'는 작성한 소스 코드를 실행 가능한 형태로 묶어 내는 과정이에요. 그 결과물이 .jar 파일 하나이고, 여기에 우리 앱과 내장 톰캣이 함께 담겨 있어서 그 파일만으로 서버가 떠요.
▶️ 실행은 명령 한 줄 빌드한 jar 파일을 java -jar 로 실행하면 내장 톰캣이 켜지고 서버가 바로 동작해요.
// 빌드된 실행 파일을 그대로 실행
// (별도 톰캣 설치·배포 불필요)
java -jar myapp.jar
💡 그래서 Spring Boot 앱은 배포·이식이 간단해요. jar 파일만 있으면 자바가 설치된 어디서든 java -jar 로 실행돼요.
📦
실행 jar
앱 + 내장 톰캣 포함
▶️
java -jar
명령 한 줄로 실행
🌐
서버 기동
바로 요청 처리 시작
🧩
내장의 의미. 톰캣이 앱 "안에" 들어 있다는 뜻이에요. 외부 서버에 의존하지 않으니 개발-실행-배포가 훨씬 단순해져요.
📝
설정 파일
application.properties / application.yml
바꾸고 싶은 설정은 한 곳에서.

자동 설정이 대부분을 처리하지만, 포트 번호·DB 접속 정보처럼 우리가 정하고 싶은 값은 한 곳에서 관리해요. 그 파일이 application.properties (또는 application.yml) 예요. 여기에 적으면 자동 설정의 기본값을 덮어쓸 수 있어요.

🔤
application.properties / application.yml — 앱의 각종 설정값을 한 파일에 모아 적어두는 "설정 노트"예요. 포트 번호, DB 접속 정보처럼 바꾸고 싶은 값을 여기 적으면 자동 설정의 기본값을 덮어써요. .properties키=값 형식, .yml들여쓰기(계층) 형식으로, 같은 내용을 표현하는 두 가지 방식일 뿐이니 취향대로 하나만 골라 쓰면 돼요.
🗂️ properties 방식 키=값 형식으로 간단하게 적어요. 예를 들어 서버 포트를 8080으로 지정.
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
🌲 yml 방식 — 같은 내용, 계층 구조 application.yml 은 들여쓰기로 계층을 표현해요. 취향에 따라 골라 쓰면 돼요.
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
💡 server.port=8080 은 "내장 서버를 8080 포트로 열어라"는 뜻이에요. 안 적으면 기본값(8080)이 자동 적용돼요.
🧠 이 장 핵심 요약
📝
문제풀이 · 점검
배운 걸 가볍게 점검해봐요
시험이 아니라 "내가 이해했나" 확인용이에요. 틀려도 바로 해설이 나와요.
🧪
문제를 풀면 즉시 정답과 해설이 나오고, 위쪽 바에 점수가 쌓여요. 네 가지 유형(객관식 · O/X · 빈칸 · 개념)을 섞어 두었어요.
CH 06 🏗️ 계층 구조 — Controller · Service · Repository로 코드를 나누는 법