[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 버전과 문서를 함께 관리해야 한다. |