C
Spring Boot/환경/Lesson 02

Spring Boot 첫 프로젝트 — start.spring.io 에서 실행까지

30분·theory

Spring Boot 첫 프로젝트 — start.spring.io 에서 실행까지

🎯 이 lesson 을 읽고 나면

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

  • ✅ start.spring.io 로 5분 안에 프로젝트 생성·실행
  • ✅ application.yml 의 multi-profile (dev/prod) 분리
  • ✅ @SpringBootApplication 이 안에서 하는 3가지 일

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

start.spring.io 로 프로젝트 만들기

Spring Boot 의 공식 생성기

https://start.spring.ioSpring 팀이 제공하는 공식 프로젝트 생성기 입니다. 의존성을 클릭으로 골라 zip 으로 받습니다.

첫 프로젝트 설정값

웹 페이지에서 왼쪽 폼 을 이렇게 채우세요:

  • Project: Gradle - Kotlin (Maven 도 가능하지만 신규는 Gradle 권장)
  • Language: Java
  • Spring Boot: 3.2.x (LTS 계열, 2026년 기준)
  • Group: com.example
  • Artifact: demo (= 프로젝트 폴더명)
  • Name: demo
  • Description: "My first Spring app"
  • Package name: com.example.demo
  • Packaging: Jar (war 는 옛 톰캣 배포용)
  • Java: 17 (Spring Boot 3 최소 요구사항)

의존성 선택 — 학습용 5개

ADD DEPENDENCIES 버튼 → 검색해서 추가:

1. Spring Web — REST API 만들기
2. Spring Boot DevTools — 코드 수정하면 자동 재시작
3. Lombok@Getter·@Setter 보일러플레이트 제거
4. H2 Database메모리 DB (학습용 매우 편함)
5. Spring Data JPA — DB 작업 자동화

생성 → 받기 → 열기

GENERATE 클릭 → demo.zip 다운로드 → 압축 풀기 → IntelliJ 에서 Open 으로 폴더 선택.

IntelliJ 가 Gradle 의존성을 자동으로 다운로드 합니다 (처음엔 1~3분). 우측 하단 진행바가 멈추면 준비 완료.

실행

프로젝트 트리에서 src/main/java/com/example/demo/DemoApplication.java 열기:

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

좌측 초록 ▶ 클릭 또는 Shift + F10. 콘솔에 스프링 부트 배너Tomcat started on port 8080 이 보이면 성공.

브라우저에서 http://localhost:8080 접속 → 404 페이지 가 나옵니다 (아직 라우트가 없으니 정상).

축하합니다 — 진짜 웹 서버가 돌아가는 중 입니다.

application.yml vs application.properties

둘 다 같은 설정 파일

src/main/resources/ 안에 둘 중 하나 만 있으면 됩니다.

properties — 키=값 형식

properties
server.port=8080
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.jpa.show-sql=true
logging.level.org.springframework=INFO

yml — 계층 들여쓰기

yaml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
  jpa:
    show-sql: true
logging:
  level:
    org.springframework: INFO

어떤 걸 쓰나

거의 모든 신규 프로젝트는 application.yml — 계층 구조가 보여서 가독성 압승.

properties 는 옛 프로젝트·간단한 설정에 남아있는 정도.

자주 쓰는 설정 5가지

yaml
server:
  port: 8080                 # 기본 포트 변경
  servlet:
    context-path: /api       # 모든 URL 앞에 /api 추가

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: ${DB_PASSWORD}  # 환경변수 참조

  jpa:
    hibernate:
      ddl-auto: update        # 테이블 자동 생성 (운영X)
    show-sql: true            # SQL 콘솔 출력

logging:
  level:
    org.springframework.web: DEBUG

환경별 분리 — application-{profile}.yml

code
resources/
├── application.yml           # 공통
├── application-dev.yml       # 개발용
└── application-prod.yml      # 운영용

실행 시 --spring.profiles.active=prod 또는 환경변수 SPRING_PROFILES_ACTIVE=prod프로파일 선택. 운영 비밀번호를 git 에 안 올리는 표준 패턴.

@SpringBootApplication — 어노테이션 1개의 정체

한 줄에 3가지가 합쳐진 어노테이션

@SpringBootApplication 은 사실 3개의 어노테이션을 묶어둔 메타 어노테이션 입니다:

java
@SpringBootConfiguration      // = @Configuration
@EnableAutoConfiguration       // Spring Boot 마법의 핵심
@ComponentScan                 // 이 패키지 하위를 스캔
public @interface SpringBootApplication { }

각 어노테이션이 하는 일

1. @Configuration

이 클래스는 Bean 설정 클래스 라고 알림. 안에 @Bean 메서드를 둘 수 있게 함.

2. @EnableAutoConfiguration

Spring Boot 의 마법. 클래스패스에 있는 라이브러리를 보고 자동으로 설정 합니다.

  • spring-boot-starter-web 발견 → 톰캣 + Spring MVC 설정 자동
  • H2 Database 발견 → 메모리 DB 자동 연결
  • Spring Data JPA 발견 → JPA EntityManager 자동 설정

XML 설정 100줄을 0줄로 만든 핵심. 이게 없으면 옛 Spring 시대의 설정 지옥 으로 돌아갑니다.

3. @ComponentScan

이 클래스가 있는 패키지부터 하위 패키지 까지 모든 @Component/@Service/@Repository/@Controller 를 찾아서 Bean 으로 등록.

그래서 DemoApplication 위치가 중요 합니다 — 모든 코드는 DemoApplication 패키지 아래에 둬야 자동 인식됩니다.

첫 컨트롤러 — Hello, World!

같은 패키지에 HelloController.java 추가:

java
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

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

서버 재시작 (DevTools 가 있으면 자동) 후 http://localhost:8080/hello 접속 → Hello, Spring Boot!

이게 서버 사이드 첫 페이지를 그려본 순간 입니다.

정리

@SpringBootApplication 한 줄에 수십 개의 자동 설정이 활성화 됩니다. 면접에서 "@SpringBootApplication 이 뭐 하는 거예요?" 라고 물으면 위 3가지를 답할 수 있어야 합니다.

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

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

  • "Spring Boot 3.2 + Java 17 + Gradle + H2 로 프로젝트 골격 만들어줘"
  • "application.yml 에 다중 프로파일 (dev/prod) 분리 추가해줘"
  • "이 프로젝트가 8080 대신 9000 포트로 뜨도록 설정해줘"

왜 이게 토큰을 줄이나

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

Spring Boot 첫 프로젝트 — start.spring.io 에서 실행까지 - Spring Boot