[BE] 기술 스택 - woowacourse-teams/2026-gachi-gacha GitHub Wiki

기술 스택

항목 버전·기준
Language Java 21 LTS
Framework Spring Boot 4.1.0
Web Spring MVC
Persistence Spring Data JPA
ORM Hibernate 7.4.1.Final
Database H2 2.4.240 (프로토타입·인메모리)
Template Engine Thymeleaf
Build Tool Gradle Wrapper 9.5.1
Development Spring Boot DevTools

도입 예정·검토 중인 기술

항목 기술 상태
Map / Tile Planetiler, tileserver-gl, 카카오맵 API 도입 검토 중
Infrastructure Docker 도입 예정
CI/CD GitHub Actions 도입 예정
Production Database 미정 H2 사용 후 별도 선정 예정

도입 예정·검토 중인 기술은 현재 개발 환경에 적용된 기술이 아닙니다. 실제 제품 문제와 운영 요구사항이 구체화된 이후 대안과 트레이드오프를 비교해 도입 여부를 결정합니다.

사전 요구사항

도구 버전·기준
Git 별도 버전 제한 없음
JDK 21 LTS
Gradle 별도 설치 불필요
Network 최초 Gradle 및 의존성 다운로드 시 필요

Java 버전은 backend/build.gradle의 Java Toolchain에서 21로 지정되어 있습니다.

Gradle 버전은 backend/gradle/wrapper/gradle-wrapper.properties에서 9.5.1로 고정되어 있습니다.

현재 초기 개발 환경에서는 별도의 환경변수가 필요하지 않습니다.

기술 스택 선정 이유

  • Java 21 LTS

    • 장기 지원 버전으로 안정적인 개발·실행 환경을 구성할 수 있다.
    • 백엔드 팀원이 학습 과정에서 사용해 온 버전이므로 초기 개발환경을 빠르게 통일할 수 있다.
    • Java Toolchain을 통해 팀원이 동일한 Java 버전으로 빌드하도록 한다.
  • Spring Boot와 Spring MVC

    • 웹 API와 비즈니스 로직을 일관된 구조로 개발할 수 있다.
    • 자동 설정과 내장 Tomcat을 이용해 별도의 웹 서버 구성 없이 애플리케이션을 실행할 수 있다.
    • 백엔드 팀원이 동일한 프레임워크 경험을 가지고 있어 초기 학습·설정 비용을 줄일 수 있다.
  • Spring Data JPA

    • 반복적인 데이터 접근 코드를 줄이고 객체 중심으로 도메인과 데이터를 다룰 수 있다.
    • Repository 인터페이스를 통해 데이터 접근 방식을 일관되게 구성할 수 있다.
  • H2

    • 초기 단계에서 별도의 데이터베이스를 설치하지 않고 개발·테스트 환경을 구성할 수 있다.
    • 애플리케이션 실행 시 인메모리 데이터베이스가 자동으로 생성되어 새로운 팀원도 빠르게 실행할 수 있다.
    • 프로토타입 이후 실제 운영 조건이 정해지면 운영 데이터베이스를 별도로 선정한다.
  • Thymeleaf

    • React 프론트엔드가 백엔드와 연동되기 전에 임시 HTML 화면을 만들어 요청·응답 흐름을 확인할 수 있다.
    • 서버에서 HTML을 렌더링할 필요가 없어지는 시점에는 유지 여부를 다시 검토한다.
  • Gradle Wrapper

    • 팀원이 로컬에 Gradle을 별도로 설치하지 않아도 동일한 버전으로 빌드할 수 있다.
    • 로컬과 이후 CI 환경에서 발생할 수 있는 Gradle 버전 차이를 줄인다.
  • Lombok

    • 생성자와 Getter 등 반복적으로 작성되는 코드를 줄인다.
    • 객체의 변경을 예측하기 어렵게 만드는 @Setter, @Data는 팀 컨벤션에서 사용하지 않는다.
  • Spring Boot DevTools

    • 개발 중 코드 변경을 빠르게 반영하여 반복적인 실행 비용을 줄인다.
    • 개발 환경에서만 사용하며 운영 환경에는 포함하지 않는다.

대안 및 트레이드오프

선택 검토한 대안 트레이드오프·한계
Java 21 Java 17, 최신 비LTS 버전 최신 기능보다 LTS 안정성과 팀 숙련도를 우선한다.
Spring MVC Spring WebFlux, 다른 JVM 웹 프레임워크 현재는 JPA 기반의 일반적인 요청·응답 구조에 적합하지만, 대규모 비동기 처리 요구가 생기면 다시 검토해야 한다.
Spring Data JPA JDBC Template, MyBatis 반복적인 데이터 접근 코드는 줄지만 영속성 컨텍스트와 쿼리 생성 방식을 이해해야 한다.
H2 MySQL, PostgreSQL 빠르게 실행할 수 있지만 운영 DB와 SQL, 데이터 타입, 동시성 동작이 다를 수 있다.
Thymeleaf curl, Postman, Swagger UI, RestAssured 브라우저용 임시 화면을 만들 수 있지만 React와 역할이 겹칠 수 있고, 사용하지 않는 기간에도 의존성과 자동 설정을 유지해야 한다.
Gradle Wrapper 로컬 Gradle, Maven 재현성은 높지만 Wrapper 버전과 문서를 함께 관리해야 한다.