기술과 산업/언어 및 프레임워크

JHipster 시리즈 3화 - JDL을 이용한 Entity 모델링과 CRUD 생성기 실습

B컷개발자 2025. 5. 7. 16:05
728x90

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