JHipster 시리즈 3화 - JDL을 이용한 Entity 모델링과 CRUD 생성기 실습
JHipster의 핵심 기능인 JDL(JHipster Domain Language)을 활용해 복잡한 도메인 모델을 빠르게 설계하고, 전체 CRUD 코드와 UI까지 자동 생성하는 방법을 다룹니다. 실무 중심의 실습 예제 포함.
왜 JDL을 사용해야 하는가?
많은 개발자들이 JHipster CLI를 통해 단일 엔티티를 만들 때 jhipster entity 명령어를 사용합니다. 하지만 복수의 엔티티, 관계, 속성 제약 조건까지 정의하려면 CLI 입력은 비효율적이며 반복적입니다.
이런 문제를 해결하기 위해 JHipster는 JDL(JHipster Domain Language) 이라는 도메인 모델링 DSL(Domain-Specific Language)을 제공합니다.
JDL을 사용하면 다음과 같은 이점이 있습니다:
- ✅ YAML이나 JSON보다 가독성이 높음
- ✅ 여러 엔티티와 관계를 한 번에 정의 가능
- ✅ 커밋 가능한 텍스트 기반 스펙 문서로 유지보수 용이
- ✅ 생성된 결과를 UI/REST/API/DB 스키마에 반영
JDL의 기본 구조 이해하기
다음은 JDL의 기본 문법 구조입니다.
entity Book {
title String required,
author String,
publishDate Instant
}
entity Author {
name String required,
bio String
}
relationship ManyToOne {
Book{author(name)} to Author
}
설명:
- Book, Author: 각각 도메인 객체를 정의
- required: 필수 입력값
- ManyToOne: 다대일 관계 설정
- {author(name)}: Book이 Author를 참조하며, name 필드를 표시
실습: 도서관 관리 시스템 JDL 작성 예시
📄
library.jdl
파일 작성
application {
config {
baseName libraryApp,
packageName com.example.library,
applicationType monolith,
authenticationType jwt,
prodDatabaseType postgresql,
buildTool gradle,
clientFramework react
}
entities Book, Author, Category
}
entity Book {
title String required,
isbn String required,
publishedYear Integer,
price BigDecimal
}
entity Author {
name String required,
nationality String
}
entity Category {
name String required
}
relationship ManyToOne {
Book{author(name)} to Author,
Book{category(name)} to Category
}
paginate Book with pagination
paginate Author, Category with infinite-scroll
dto Book with mapstruct
service Book with serviceClass
JDL 적용하기 – 명령어로 자동 생성
JDL 파일을 작성한 후 다음 명령어를 실행합니다:
jhipster import-jdl library.jdl
실행이 완료되면 다음이 자동 생성됩니다:
- Java Entity 클래스 + Repository + Service + REST Controller
- React 프론트엔드 페이지 (List, Create, Edit, View)
- DB 마이그레이션 파일 (Liquibase 기준)
- Swagger 문서 갱신
- 설정 파일 자동 업데이트
생성된 화면 확인
앱을 실행 후 로그인하면 /book, /author, /category 경로에 다음 기능이 포함됩니다:
- 목록 조회 (테이블 형식, 정렬, 검색)
- 항목 등록/수정 폼 (필수값 검증 포함)
- 상세 보기 화면
- 페이지네이션 or infinite scroll
JHipster는 UI 구성에서도 Bootstrap과 Reactstrap을 기반으로 즉시 사용 가능한 화면을 제공합니다.
실전 팁 – JDL 활용 전략
전략설명
| 버전 관리 | library.jdl 파일을 Git에 포함하면 언제든 생성/재생성 가능 |
| JDL-Studio 활용 | https://start.jhipster.tech/jdl-studio/에서 시각적으로 모델 작성 가능 |
| 분리 전략 | 대형 도메인은 JDL 파일을 여러 개로 나눠 관리 가능 |
| 동기화 주기 | 코드 수정 전 JDL 기준으로 재생성 → 충돌 방지 |
실전 구축 사례
실제 한 금융 서비스 팀에서는 40개 이상의 Entity와 60개 이상의 관계를 JDL로 정의하고 팀원 간 공유하였습니다.
JDL 파일을 기준으로 초기 CRUD를 자동 생성하고, 이후 서비스 계층과 로직만 커스터마이징 하는 방식으로 개발 시간을 약 60% 단축했습니다.
또한, JDL은 신규 멤버 온보딩 시에도 전체 구조 파악이 빠르다는 장점이 있었습니다.
마치며 – 설계 문서이자 코드 생성기
JDL은 단순한 DSL이 아닙니다.
이는 설계 명세서이자 코드 생성 도구이며,
유지보수 가능한 애플리케이션 아키텍처를 구성하는 시작점입니다.
복잡한 프로젝트일수록 JDL로 도메인을 정리하는 습관이 실전에서 큰 차이를 만듭니다.
다음 화 예고
JHipster 시리즈 4화 - Spring Security와 JHipster의 인증 구조 이해
JWT와 OAuth2 방식의 차이점, Spring Security의 필터 체인 구조, Keycloak과 연동하는 방법까지 보안 아키텍처에 대한 핵심을 정리합니다.