ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JHipster 시리즈 3화 - JDL을 이용한 Entity 모델링과 CRUD 생성기 실습
    기술과 산업/언어 및 프레임워크 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
Designed by Tistory.