-
JHipster 시리즈 3화 - JDL을 이용한 Entity 모델링과 CRUD 생성기 실습기술과 산업/언어 및 프레임워크 2025. 5. 7. 16:05728x90
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과 연동하는 방법까지 보안 아키텍처에 대한 핵심을 정리합니다.
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
Java JSON 처리 실전 시리즈 1화 – Jackson vs Gson: Java JSON 라이브러리 비교와 선택 기준 (1) 2025.05.09 Jmix 실전 마스터 시리즈 1화 - Jmix란 무엇인가? CUBA의 진화, Spring Boot의 확장 (0) 2025.05.07 NestJS 마스터 시리즈 11화. 파이프(Pipe) – 요청 데이터의 정제와 전처리 전략 (0) 2025.05.07 FastAPI 시리즈 7화 - Response 모델과 응답 커스터마이징 (0) 2025.05.07 Spring Boot 시리즈 27편 – 다국어(i18n) 지원 전략: 메시지 번들, 리소스 자동 로딩, 언어 감지까지 (1) 2025.05.07