Java 21 LTS + Spring Boot + JavaFX Multi-module Project
Java 21 LTS + Spring Boot 3.5.6 + JavaFX 21 멀티모듈 통합 프로젝트
Spring Boot + JavaFX 통합 아키텍처를 기반으로 한 멀티모듈 개발 프레임워크입니다.
🚀 통합 실행 방법:
cd tetris-client && ../gradlew run
Spring Boot + JavaFX 통합 아키텍처를 기반으로 한 멀티모듈 개발 프레임워크입니다.>
📚 상세한 개발 가이드: DEVELOPMENT.md
-
🔗 하이브리드 아키텍처: JavaFX GUI + Spring Boot DI 컨테이너> 🏗️ 아키텍처 상세: ARCHITECTURE.md
-
📦 모듈화: Core, Backend, Client 계층별 분리
-
🎯 Version Catalog: 중앙화된 의존성 관리## 🏗️ 모듈 구조
-
🚀 Java 21: Virtual Threads, 최신 언어 기능 활용
---tetris-app/
├── tetris-core/ # 핵심 비즈니스 로직 (공통 라이브러리)
## 🏗️ 모듈 구조├── tetris-backend/ # Spring Boot 웹 서버
├── tetris-client/ # JavaFX 데스크톱 클라이언트
```├── tetris-swing/ # Swing GUI (옵션)
tetris-app/└── build.gradle.kts # 루트 프로젝트 설정
├── tetris-core/ # 🎯 핵심 비즈니스 로직 (순수 Java)```
├── tetris-backend/ # ⚙️ Spring Boot 웹 서비스 레이어
├── tetris-client/ # 🖥️ JavaFX + Spring Boot 메인 애플리케이션### 📦 각 모듈별 역할
└── script_files/ # 📜 실행 스크립트들
```- **tetris-core** - 공통 비즈니스 로직 (순수 Java 라이브러리)
- 도메인 모델 및 핵심 로직 구현
### 의존성 관계 - 다른 모듈에서 공통으로 사용하는 유틸리티
```- **tetris-backend** - Spring Boot 웹 서버
tetris-client → tetris-backend → tetris-core - REST API 제공 (`@RestController`)
↘ → tetris-core - 비즈니스 서비스 레이어 (`@Service`)
``` - 데이터 접근 및 영속성 관리
- **tetris-client** - JavaFX 데스크톱 클라이언트
--- - **통합 실행 진입점** (`@SpringBootApplication`)
- JavaFX GUI 컨트롤러 (`@Component`)
## 🚀 빠른 시작 - Spring Boot + JavaFX 통합 아키텍처
### 1️⃣ 통합 실행 (권장)### 🔄 통합 아키텍처 동작 방식
```bash
./gradlew :tetris-client:run1. **JavaFX Application 시작** → `TetrisApplication.java`
```2. **Spring Boot Context 초기화** → `init()` 메서드에서 DI 컨테이너 생성
→ JavaFX GUI + Spring Boot DI 컨테이너 통합 시작3. **컴포넌트 스캔** → 백엔드와 클라이언트 패키지 전체 스캔
4. **의존성 주입** → JavaFX 컨트롤러에서 Spring 서비스 사용
### 2️⃣ 백엔드 독립 실행
```bash ```java
./gradlew :tetris-backend:bootRun// 통합 실행 예시: JavaFX에서 Spring 서비스 사용
```@Component
→ REST API 서버 시작 (http://localhost:8080)public class MainController {
@Autowired
### 3️⃣ 전체 빌드 private GameService gameService; // 백엔드 서비스 자동 주입
```bash
./gradlew clean build @FXML
``` private void handleAction() {
String status = gameService.getStatus(); // Spring DI 활용
--- // JavaFX UI 업데이트
}
## 📜 스크립트 사용법}
bash
./script_files/build-and-run.sh## 🏗️ 아키텍처
클라이언트만 실행 (JAR 방식)📄 **상세 아키텍처 가이드**를 확인하세요!
./script_files/run-tetris.sh
./script_files/run-backend.sh- 하이브리드 아키텍처: JavaFX가 메인, Spring Boot가 DI 컨테이너
- **프레임워크 격리**: Core 로직은 순수 Java로 구현
### 통합 개발 도구- **의존성 주입**: JavaFX 컨트롤러에서 `@Autowired` 사용
```bash
# 다양한 개발 작업을 위한 통합 스크립트```
./tetris.sh [build|client|backend|test|env]🎯 tetris-core # 순수 Java 도메인 로직
↓
# 예시⚙️ tetris-backend # Spring Boot 서비스 레이어
./tetris.sh build # 프로젝트 빌드 ↓
./tetris.sh client # 클라이언트 실행 🖥️ tetris-client # JavaFX + Spring Boot 통합
./tetris.sh backend # 백엔드 서버 실행```
./tetris.sh test # 테스트 실행
./tetris.sh env # 개발 환경 체크### 🛠️ 기술 스택
- Java 21 LTS - Virtual Threads 지원
---- Spring Boot 3.3.3 - 서비스 레이어
- JavaFX 21 - 모던 Desktop GUI
- H2 Database - 인메모리 데이터베이스 (선택적)
-
DEVELOPMENT.md - 개발자 상세 가이드## 🚀 실행 방법
-
ARCHITECTURE.md - 프로젝트 아키텍처
- gradle/libs.versions.toml - Version Catalog 의존성 관리Spring Boot + JavaFX 통합 실행:
---cd tetris-client
../gradlew run
## 🛠️ 개발 환경```
- ✅ JavaFX GUI 애플리케이션 시작
### 필수 요구사항- ✅ Spring Boot DI 컨테이너 자동 초기화
- **Java 21 LTS** (Amazon Corretto 권장)- ✅ 모든 모듈이 통합된 환경에서 실행
- **Gradle 8.12+** (Wrapper 제공)
### 🌐 2. 백엔드 독립 실행
### 권장 IDE
- **VS Code** + Java Extension Pack + Lombok**Spring Boot 웹 서버 실행:**
- **IntelliJ IDEA** + Spring Boot + JavaFX 플러그인```bash
cd tetris-backend
### 환경 확인../gradlew bootRun
```bash```
./tetris.sh env- ✅ REST API 서버 시작 (http://localhost:8080)
```- ✅ H2 데이터베이스 콘솔 활성화
- ✅ 백엔드 개발/테스트 환경
---
**API 테스트:**
## 🌿 브랜치 네이밍 규칙```bash
curl http://localhost:8080/api/status
feature/{이슈번호}/{기능명} # 새 기능 개발
bugfix/{이슈번호}/{버그명} # 버그 수정 ### 🖥️ 3. 전체 빌드
refactor/{이슈번호}/{리팩터링명} # 코드 리팩터링
hotfix/{이슈번호}/{긴급수정명} # 긴급 수정```bash
./gradlew build
**예시**:
- `feature/24/modulization-each-domain`# 실행 가능한 JAR 생성
- `bugfix/31/gradle-build-error`./gradlew bootJar
- `refactor/42/version-catalog-migration````
---### 🛠️ 개발 모드 실행
## 👥 팀 정보```bash
# 통합 개발 (핫 리로드)
- **프로젝트**: SeoulTech SE Team 9 - Tetris Applicationcd tetris-client
- **기술 스택**: Java 21 LTS + Spring Boot 3.5.6 + JavaFX 21../gradlew run --continuous
- **빌드 시스템**: Gradle 8.12 + Version Catalog
- **아키텍처**: 멀티모듈 하이브리드 (Spring Boot + JavaFX)# 백엔드 개발 (자동 재시작)
cd tetris-backend
---../gradlew bootRun --continuous
프로젝트와 관련된 질문이나 기여 사항이 있으시면 팀 저장소의 Issues를 활용해 주세요.
🚀 상세한 개발 가이드는 DEVELOPMENT.md를 참고하세요!
Happy Coding! 🎉
백엔드 개발자:
cd tetris-backend
../gradlew bootRun # 독립 실행으로 API 개발프론트엔드 개발자:
cd tetris-client
../gradlew run # 통합 실행으로 UI 개발통합 테스트:
cd tetris-client
../gradlew run # 전체 시스템 통합 테스트- 하이브리드 아키텍처: JavaFX가 메인, Spring Boot가 DI 컨테이너
- 계층형 모듈: Core → Backend → Client 단방향 의존성
- 프레임워크 격리: Core 로직은 순수 Java로 구현
- 의존성 주입: JavaFX 컨트롤러에서
@Autowired사용
🎯 tetris-core # 순수 Java 도메인 로직
↓
⚙️ tetris-backend # Spring Boot 서비스 레이어
↓
🖥️ tetris-client # JavaFX + Spring Boot 통합
- Java 21 LTS - Virtual Threads 지원
- Spring Boot 3.3.3 - 서비스 레이어 및 DI
- JavaFX 21 - 모던 Desktop GUI
- Gradle 8.5 - 멀티모듈 빌드 시스템
- H2 Database - 개발용 인메모리 데이터베이스
Java 21 LTS + Spring Boot + Version Catalog 기반 멀티모듈 테트리스 게임
서울과기대 소프트웨어공학 팀 프로젝트로 개발하는 현대적인 테트리스 게임입니다.
- Java 21 LTS: 최신 장기지원 버전으로 성능과 안정성 확보
- 멀티모듈 아키텍처: 깔끔한 계층 분리와 재사용성
- Version Catalog: Type-Safe 의존성 관리
- Spring Boot: 엔터프라이즈급 DI 컨테이너와 서비스 레이어
- JavaFX: 모던한 데스크톱 UI
- Lombok: 보일러플레이트 코드 자동 생성
tetris-app/
├── tetris-core/ 🎯 게임 로직 (순수 Java)
├── tetris-backend/ ⚙️ 서비스 레이어 (Spring Boot)
└── tetris-client/ 🖥️ 데스크톱 앱 (JavaFX + Spring)
- Java 21 LTS (Corretto, OpenJDK 등)
- Git
# 레포지토리 클론
git clone https://github.com/louis5103/se-teris-team-9.git
cd se-teris-team-9
# 프로젝트 빌드
./gradlew build
# 백엔드 서버 실행 (개발/테스트용)
./gradlew :tetris-backend:bootRun
# 데스크톱 클라이언트 실행
./gradlew :tetris-client:run# VS Code에서 프로젝트 열기
code .
# 권장 확장 프로그램 자동 설치됨:
# - Java Extension Pack
# - Lombok Annotations Support
# - Spring Boot Tools- 목적: 게임 핵심 로직
- 기술: 순수 Java (외부 의존성 최소)
- 포함: 블록, 보드, 점수 시스템, 게임 규칙
- 목적: 서비스 레이어 및 데이터 관리
- 기술: Spring Boot, JPA, H2 Database
- 포함: 게임 상태 관리, 점수 저장, REST API
- 목적: 사용자 인터페이스
- 기술: JavaFX, Spring Boot (DI)
- 포함: 게임 화면, 사용자 입력 처리
tetris-client → tetris-backend → tetris-core
# Homebrew 사용
brew install openjdk@21
# 또는 Amazon Corretto
brew install --cask corretto21프로젝트를 열면 자동으로 권장 설정이 적용됩니다:
- Java 21 자동 인식
- Lombok 어노테이션 처리
- Gradle 프로젝트 구성
- File → Open → 프로젝트 루트 선택
- Gradle 프로젝트로 import
- Project SDK: Java 21 설정
- Lombok Plugin 활성화
./gradlew build# Core 모듈 테스트
./gradlew :tetris-core:test
# Backend 서버 실행
./gradlew :tetris-backend:bootRun
# Client 실행
./gradlew :tetris-client:run# 모든 모듈의 JAR 생성
./gradlew assemble
# 실행 가능한 Spring Boot JAR (Backend)
./gradlew :tetris-backend:bootJar- 들여쓰기: 4 spaces
- 인코딩: UTF-8
- Line ending: LF
- Lombok:
@Data,@Builder,@Slf4j적극 활용
// JUnit 5 + AssertJ 스타일
@Test
void should_CreateBlock_When_ValidInput() {
// Given
BlockType type = BlockType.I;
// When
Block block = Block.builder()
.type(type)
.build();
// Then
assertThat(block.getType()).isEqualTo(type);
}이 프로젝트는 Gradle Version Catalog를 사용하여 중앙화된 의존성 관리를 수행합니다.
- gradle/libs.versions.toml에 라이브러리 정의
[versions]
jackson = "2.17.0"
[libraries]
common-jackson = { module = "com.fasterxml.jackson.core:jackson-core", version.ref = "jackson" }
[bundles]
common-json = ["common-jackson", "common-jackson-databind"]- build.gradle.kts에서 사용
dependencies {
implementation(libs.common.jackson) # 단일 라이브러리
testImplementation(libs.bundles.common.testing) # Bundle 사용
}📚 상세한 의존성 관리 가이드: DEVELOPMENT.md
main # 최종 릴리즈
├── develop # 개발 통합 브랜치
├── feature/이슈번호/기능명 # 기능 개발
└── bugfix/이슈번호/설명 # 버그 수정
feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 코드 리팩토링
test: 테스트 코드
chore: 빌드/설정 변경
- 이슈 생성 및 브랜치 생성
- 기능 개발 및 테스트
- PR 생성 (리뷰어 지정)
- 코드 리뷰 및 승인
develop브랜치 머지
# Gradle 데몬 재시작
./gradlew --stop
./gradlew clean build- VS Code: Java Language Server 재시작
- IntelliJ: Lombok 플러그인 확인
서버 포트가 이미 사용 중인 경우:
환경변수로 변경 (권장):
# macOS/Linux
export SERVER_PORT=8081
# Windows (PowerShell)
$env:SERVER_PORT=8081
# Windows (CMD)
set SERVER_PORT=8081또는 설정 파일에서 직접 변경:
# tetris-backend/src/main/resources/application.properties
server.port=8081서울과학기술대학교 소프트웨어공학 팀 9
- 프로젝트 기간: 2024년 2학기
- 기술 스택: Java 21, Spring Boot, JavaFX, Gradle
- 목표: 현대적인 아키텍처로 구현한 테트리스 게임
이 프로젝트는 교육 목적으로 개발되었습니다.
- 이슈 리포팅: GitHub Issues 활용
- 개발 문의: 팀 개발자 또는 프로젝트 관리자 연락
- 기여 가이드: Pull Request 템플릿 준수
🎯 Quick Start:
git clone [repository-url]
cd tetris-app
cd tetris-client && ../gradlew run💡 개발 팁: 통합 실행(tetris-client:run)으로 전체 시스템을 확인하면서 개발하세요!
Feat/123/Add-User # 대문자 사용
feat/123/add_user # 언더스코어 사용
feat/123/add.user # 점 사용