[Spring Boot REST API 실습] 1강 — 프로젝트 세팅

zuno·2025년 12월 19일

이번 시리즈는 Spring Boot로 REST API를 직접 구현하면서
컨트롤러/서비스/JPA/Validation/Jackson 흐름을 단계별로 익히는 실습입니다.

1강은 “기능 구현 전 프로젝트 세팅”이 핵심이라서,
실습을 그대로 따라가기 위한 Gradle 의존성 + application 설정(Profiles 포함)을 정리합니다.



✅ 1) 개발 환경 & 목표

  • Java 21
  • Spring Boot 4.0.0
  • Build Tool: Gradle (Kotlin DSL)
  • ORM: Spring Data JPA
  • Validation: spring-boot-starter-validation
  • Web: spring-boot-starter-webmvc
  • DB: H2
  • 편의: Lombok, Devtools
  • Profiles: dev / test 분리

✅ 2) Gradle 설정 (build.gradle.kts)

아래 설정으로 프로젝트를 구성하면, 강의 실습 환경(REST API + JPA + H2 + 테스트)이 그대로 갖춰집니다.

plugins {
    java
    id("org.springframework.boot") version "4.0.0"
    id("io.spring.dependency-management") version "1.1.7"
}

group = "com"
version = "0.0.1-SNAPSHOT"
description = "Demo project for Spring Boot"

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-validation")
    implementation("org.springframework.boot:spring-boot-starter-webmvc")

    compileOnly("org.projectlombok:lombok")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("com.h2database:h2")

    annotationProcessor("org.projectlombok:lombok")

    testImplementation("org.springframework.boot:spring-boot-starter-data-jpa-test")
    testImplementation("org.springframework.boot:spring-boot-starter-validation-test")
    testImplementation("org.springframework.boot:spring-boot-starter-webmvc-test")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")

    runtimeOnly("org.springframework.boot:spring-boot-h2console")
    // Spring Boot 4.0 부터는 h2-console 라이브러리를 직접 추가해야 합니다.
}

tasks.withType<Test> {
    useJUnitPlatform()
}

✅ 3) 의존성 선택 이유 (왜 필요한가?)

1) spring-boot-starter-webmvc

  • REST API 컨트롤러 작성 (@RestController)
  • 요청 매핑 처리 (@GetMapping, @PostMapping 등)
  • JSON 변환(Jackson 포함) 기반 응답 처리

2) spring-boot-starter-data-jpa

  • JPA 엔티티(@Entity) 기반으로 DB와 매핑
  • JpaRepository로 CRUD 구현

3) spring-boot-starter-validation

  • 요청 DTO 검증 (@NotBlank, @Email, @Size 등)
  • 잘못된 입력을 조기에 차단하고 에러 응답 처리에 도움

4) H2 + H2 Console

  • 실습용으로 매우 빠르게 DB 환경 구성 가능
  • 개발 중 콘솔로 데이터 확인 가능

중요: Spring Boot 4.0부터는 H2 Console이 기본 포함이 아니라서
org.springframework.boot:spring-boot-h2console직접 추가해야 함

5) Lombok / Devtools

  • Lombok: 생성자/Getter 등 보일러플레이트 감소
  • Devtools: 개발 편의(리로드 등)

✅ 4) application 설정 (Profiles 포함)

이번 프로젝트는 기본 설정(application.yml) + dev/test 프로필 설정을 분리해서 사용합니다.


4-1) application.yml (기본 설정)

  • 기본 프로필을 dev로 활성화
  • SQL 로그 출력 옵션 강화
  • 트랜잭션/바인딩 로그까지 확인 가능하게 구성
spring:
  application:
    name: back
  profiles:
    active: dev
  output:
    ansi:
      enabled: always
  datasource:
    hikari:
      auto-commit: false
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
        highlight_sql: true
        use_sql_comments: true

logging:
  level:
    org.hibernate.orm.jdbc.bind: TRACE
    org.hibernate.orm.jdbc.extract: TRACE
    org.springframework.transaction.interceptor: TRACE

(실제 파일 기준) :contentReference[oaicite:0]{index=0}


4-2) application-dev.yml (개발 환경 DB)

개발 환경에서는 파일 기반 H2 DB를 사용합니다.

spring:
  datasource:
    url: jdbc:h2:./db_dev;MODE=MySQL
    username: sa
    password:
    driver-class-name: org.h2.Driver

(실제 파일 기준) :contentReference[oaicite:1]{index=1}


4-3) application-test.yml (테스트 환경 DB)

테스트는 인메모리 H2를 사용해서, 실행할 때마다 깨끗한 DB로 테스트합니다.

spring:
  datasource:
    url: jdbc:h2:mem:db_test;MODE=MySQL
    username: sa
    password:
    driver-class-name: org.h2.Driver

(실제 파일 기준) :contentReference[oaicite:2]{index=2}


✅ 5) 1강 정리

  • Spring Boot 4.0 + Java 21 기반 REST API 실습 프로젝트 세팅 완료
  • WebMVC / JPA / Validation / H2를 구성해서 실습 준비
  • application.yml에서 dev 프로필을 기본 활성화하고, dev/test를 분리하여 관리
  • Spring Boot 4.0부터는 H2 Console 의존성을 직접 추가해야 함

0개의 댓글