공유된 따라하기 · 스프링부트

Spring Boot 3계층 실습 — JdbcTemplate로 Menu API 만들기

대상 오전에 수업에 참여해서 Spring Boot 프로젝트 구조와 3계층(Controller → Service → Repository)을 이해하기 있는 사람, 이전 수업에서 JdbcTemplate으로 데이터를 가져온 경험이 있는 사람

목표 menus와 categories 테이블의 데이터를 JdbcTemplate으로 가져와서, Service에서 DTO로 조립하고 Controller에서 서빙하는 과정을 직접 코딩하며 3계층의 역할을 체감한다

완성물 /api/v1/menus와 /api/v1/menus/categories 두 API가 Postman이나 브라우저에서 JSON 응답을 반환하는 상태. 내부 구조는 엔티티가 테이블과 1:1로 대응하고, 조립 로직이 Service에 있는 상태

📝 학습방법 : 1단계에서 10단계까지는 복습 단계입니다. 눈으로만 확인하면 됩니다.

그리고 11단계부터는 이전 시간에 다루었던 코드의 문제점을 찾고 수정하는 실습 단계입니다.

11단계부터는 본인의 코드를 수정하시기 바랍니다.

준비물

  • 미리 배포한 Spring Boot backend/ 프로젝트 (Gradle 기반)
  • 기존 코드: Menu 엔티티, MenuRepository 인터페이스, DfMenuRepository (구현 미완), MenuService 인터페이스, DfMenuService (구현 미완), MenuController (기본 구조만 존재)

STEP 1 / 18build.gradle — JDBC 의존성 추가

0개 완료 · 18개 남음

  1. Spring Boot가 데이터베이스와 대화하려면 두 가지 도구가 필요합니다. 하나는 SQL을 실행하는 도구(JdbcTemplate)이고, 다른 하나는 PostgreSQL과 통신하는 드라이버입니다. 이 두 가지를 프로젝트에 추가해 볼게요.

    1-1. build.gradle 파일 열기

    프로젝트 루트 폴더의 build.gradle 파일을 엽니다.

    파일: build.gradle

    1-2. dependencies 블록에 의존성 추가

    dependencies { ... } 블록 안에 아래 두 줄을 추가합니다.

    dependencies {
        // ... 기존 의존성들 ...
        
        // JdbcTemplate와 DataSource 자동 설정을 위한 스타터
        implementation 'org.springframework.boot:spring-boot-starter-jdbc'
        
        // PostgreSQL JDBC 드라이버 (런타임에만 필요)
        runtimeOnly 'org.postgresql:postgresql'
    }

    왜 runtimeOnly인가? PostgreSQL 드라이버는 우리가 코드를 작성할 때 직접 import해서 사용하지 않습니다. 프로그램이 실행될 때(run할 때) Spring이 자동으로 드라이버를 찾아서 연결하기 때문에, 컴파일 시점에는 필요 없고 실행 시점에만 필요하므로 runtimeOnly로 설정합니다.

    ✅ 확인

    터미널에서 아래 명령을 실행하여 컴파일이 정상적으로 되는지 확인합니다.

    cd backend
    ./gradlew compileJava
    • BUILD SUCCESSFUL 이 표시됩니다.
    • 에러가 없다면 성공입니다.

    🎓 newlec 쌤의 코멘트

    식당 비유로 설명하면, spring-boot-starter-jdbc 는 주방에 있는 '전자레인지' 같은 도구입니다. 우리가 직접 불을 다루지 않고, 버튼만 누르면(코드를 적으면) 내부적으로 복잡한 과정(연결, 쿼리 실행)을 처리해 줍니다. postgresql 드라이버는 그 전자레인지가 우리 가게의 특수한 재료(PostgreSQL)를 처리할 수 있도록 해주는 '어댑터'입니다. 이 두 가지가 없으면 Spring은 데이터베이스와 어떻게 대화해야 할지 모릅니다.

    ❌ 자주 하는 실수

    증상 원인 해결
    Could not resolve org.springframework.boot:spring-boot-starter-jdbc Gradle 캐시 문제 또는 네트워크 문제 ./gradlew clean 후 다시 compileJava 실행
    Unresolved reference: postgresql runtimeOnly 대신 implementation으로 잘못 적었거나 오타 runtimeOnly 'org.postgresql:postgresql' 문법을 정확히 확인

    📝 이 단계의 핵심

    • spring-boot-starter-jdbc: JdbcTemplate 사용 가능하게 해주는 스타터
    • org.postgresql:postgresql: PostgreSQL 연결용 드라이버 (runtimeOnly)

이 주소는 글의 저작자가 공개한 링크입니다. 뉴렉처 스터디의 다른 자료는 로그인 후 볼 수 있어요.