C
Spring Boot/입문/Lesson 03

Spring Boot 기초 — *왜 Spring Boot 인가*

45분·theory

Spring Boot 기초 — *왜 Spring Boot 인가*

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ Spring 의 3대 사상 (IoC · AOP · POJO) 한 줄 정의
  • ✅ @Component / @Service / @Repository / @Controller 역할 분리
  • ✅ 왜 Spring Boot 가 옛 Spring 의 XML 지옥을 끝냈는지

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

Spring 이 뭐냐 — *복잡한 자바 백엔드를 단순화*

핵심 한 줄

Spring = 자바로 서버를 만들 때 반복되는 복잡한 일자동으로 처리 해주는 프레임워크. 2003 년 호주의 로드 존슨 이 만들었습니다.

왜 Spring 이 탄생했나

2000 년대 초반 자바 백엔드는 EJB (Enterprise JavaBeans) 라는 표준으로 만들어졌는데, 너무 복잡했습니다. 단순한 기능 하나 만드는데도 수많은 설정 파일·인터페이스·구현 클래스 가 필요했죠. 개발자들은 "비즈니스 로직보다 설정 코딩이 더 많다" 며 불만이었습니다.

Spring 은 이 복잡함을 걷어내고 평범한 자바 객체 (POJO) 로 서버를 만들 수 있게 해줬습니다. DI·AOP·트랜잭션 같은 부가 기능을 프레임워크가 알아서 처리해주는 패러다임이 폭발적으로 퍼졌습니다.

Spring vs Spring Boot — 무엇이 다른가

Spring 만으로도 복잡한 EJB 보다 훨씬 단순했지만, 여전히 설정이 많았습니다. XML 설정 파일 수십 줄, 외부 톰캣 설치, WAR 파일 빌드·배포...

Spring Boot (2014~)"설정도 우리가 알아서" 라는 한 단계 더 나아간 진화입니다.

항목Spring (전통)Spring Boot
서버외부 Tomcat 설치내장 Tomcat (java -jar 실행)
설정XML/Java Config 직접자동 설정 (classpath 보고 알아서)
의존성버전 매번 명시Starter (spring-boot-starter-web 한 줄)
운영별도 모니터링 도구Actuator 내장 (/actuator/health)
시작5~10 분 (설정)30 초

대부분 Spring Boot 를 씁니다. 그냥 "Spring" 이라고 하면 보통 Spring Boot 를 의미하는 경우가 많아요.

왜 한국에서 Spring 이 압도적 인가

한국 백엔드 채용 공고의 80%+ 가 Spring 을 요구합니다. 카카오·네이버·쿠팡·토스·당근 — 모두 Spring 기반. 이유는:

  • 2010 년대 초 전자정부 프레임워크 가 Spring 기반으로 표준화
  • 대기업 SI 가 Spring 으로 시스템 구축
  • 그 결과 개발자·자료·교육 이 모두 Spring 중심

한국에서 백엔드 개발자가 되려면 Spring 은 사실상 필수 입니다.

자동 설정 (Auto-configuration) — Spring Boot 의 마법

spring-boot-starter-web 의존성 하나만 추가하면:

  • 내장 Tomcat 시작
  • DispatcherServlet 등록
  • Jackson JSON 직렬화 활성화
  • 정적 파일 (/static/·/public/) 서빙
  • 기본 에러 페이지

이게 코드 0줄 로 동작합니다. Spring Boot 가 classpath 에 뭐가 있는지 보고 합리적 기본값 으로 설정해준 거죠.

설정을 바꾸고 싶으면 application.properties 또는 application.yml 한 줄로:

yaml
server.port: 8080
spring.datasource.url: jdbc:postgresql://localhost/myapp
logging.level.root: INFO

한 번 정리

  • Spring = 자바 백엔드 프레임워크 (2003~)
  • Spring Boot = Spring + 자동 설정·내장 서버 (2014~)
  • 한국 백엔드 채용 80%+ Spring 기반
  • 5분 만에 운영 가능한 서버 시작 가능

Spring Boot 프로젝트 *시작하는 법*

가장 빠른 시작 — start.spring.io

https://start.spring.io — Spring 팀이 만든 프로젝트 생성기. 5분이면 동작하는 서버 시작.

선택할 옵션:

  • Project: Gradle 권장 (Maven 도 OK)
  • Language: Java
  • Spring Boot 버전: 최신 안정판 (3.x)
  • Dependencies: 최소 Spring Web (REST API). 자주 함께: Spring Data JPA, H2 Database, Lombok

GENERATE 누르면 zip 파일 다운로드. 압축 풀고 IDE 로 열면 끝.

핵심 파일 3개

1. Main 클래스 — 서버 진입점:

java
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@SpringBootApplication 한 줄이 세 가지 를 동시에 합니다:

  • @Configuration — 이 클래스가 설정 클래스
  • @EnableAutoConfiguration — 자동 설정 켜기
  • @ComponentScan — 같은 패키지 하위의 @Component·@Service 등 자동 등록

2. application.yml — 설정:

yaml
server:
  port: 8080

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/myapp
    username: admin
    password: ${DB_PASSWORD}      # 환경변수에서

  jpa:
    hibernate:
      ddl-auto: update             # 개발용. production 은 validate
    show-sql: true

logging:
  level:
    root: INFO
    com.myapp: DEBUG               # 내 코드만 DEBUG

3. 첫 컨트롤러:

java
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

./gradlew bootRun 실행 → http://localhost:8080/hello 접속 → "Hello, Spring Boot!" 응답.

디렉터리 구조

code
src/main/java/com/myapp/
├── DemoApplication.java          # Main
├── controller/                    # HTTP 처리
│   └── UserController.java
├── service/                       # 비즈니스 로직
│   └── UserService.java
├── repository/                    # DB 접근
│   └── UserRepository.java
├── entity/                        # JPA 엔티티
│   └── User.java
└── dto/                           # 요청·응답 DTO
    └── UserDto.java

src/main/resources/
├── application.yml
└── static/                        # 정적 파일

src/test/java/                     # 테스트

이게 Spring 표준 구조 입니다. 회사 가서 가장 먼저 만나는 모습.

흔한 첫 실수

1. @SpringBootApplication 위치: Main 클래스가 최상위 패키지 에 있어야 합니다. 자식 패키지의 @Component 들을 자동 스캔 하기 때문. 잘못된 위치면 Bean 등록 안 됨.

2. 포트 충돌: 다른 프로세스가 8080 쓰고 있으면 시작 실패. server.port: 8081 로 변경 또는 기존 프로세스 종료.

3. application.yml 들여쓰기: YAML 은 공백 2칸 들여쓰기에 민감. 탭 사용하면 에러. 공백 2칸 으로 통일.

한 번 정리

start.spring.io 에서 zip 받기 → IDE 로 열기 → @RestController + @GetMapping → bootRun → 끝. 이게 5분 안에 가능한 흐름입니다. 한 번 해보면 Spring Boot 의 매력을 즉시 느낍니다.

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 Spring Boot 코드에 Spring Boot 기초 — 왜 Spring Boot 인가 패턴을 적용해줘"
  • "Spring Boot 기초 — 왜 Spring Boot 인가 관련 @SpringBootTest 통합 테스트 작성해줘"
  • "실무에서 Spring Boot 기초 — 왜 Spring Boot 인가 사용 시 주의할 함정 3가지 알려줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

Spring Boot 기초 — 왜 Spring Boot 인가 - Spring Boot