jHipster 는 데이터 모델링괴 JPA 코드 자동 생성을 지원하고 있으며, 이를 위한 간단한 언어인 JDL(JHipster Domain Langualge) 를 제공하고 있다.
JDL Studio 는 도메인 모델을 정의하고, 이를 ERD로 표현해주는 강력한 UI 모델링 툴이다.
쉬우면서도, 간편하게 DB Model, JPA Entity, Repository, Service 그리고 심지어 프런트엔드 화면까지 템플릿으로 제공해 준다.
JDL 에서 자세한 사용법을 익힐 수 있다.
JDL 화면은 다음과 같다.
이제는 게시판을 모델링 해보자.
게시판을 구성하는 엔터티들을 한번 나열해 보자.
이제 JDL 스크립트를 생성해 보자.
entity Board { id Long, title String required, category String required, createdAt ZonedDateTime required, createdBy Long required, modifiedAt ZonedDateTime modifiedBy Long }
entity Post { id Long, status String required, title String required, contents Blob, readCnt Integer, goodCnt Integer, badCnt Integer, createdAt ZonedDateTime required, createdBy Long required, modifiedAt ZonedDateTime modifiedBy Long }
entity AttachGroup { id Long, createdAt ZonedDateTime required, createdBy Long required }
entity Attach { id Long, ord Integer, name String, origName String, ext String, contentType String, path String, fileSize Long, createdAt ZonedDateTime required, createdBy Long required, modifiedAt ZonedDateTime modifiedBy Long }
entity Comment { id Long, depth Integer, comment String, readCnt Integer, goodCnt Integer, badCnt Integer, createdAt ZonedDateTime required, createdBy Long required, modifiedAt ZonedDateTime modifiedBy Long }
게시판의 경우에는 명확히 연관 매핑이 필요하다.
그러므로 매핑을 수행해 볼 것이다.
relationship OneToMany { Board{post} to Post, AttachGroup{attach} to Attach, Comment{comment} to Comment{parent}, }
연관 매핑을 위해서는 relationship 을 이용한다.
**중요 포인트는 연관을 맺을 때 앞에 나오는 엔터티는 연관관계를 소유하고 있는 쪽이다.
relationship ManyToOne { Comment{post} to Post }
이 내용은 Post하나에 대해서 복수개의 Comment를 가진다.
relationship OneToOne { AttachGroup{post} to Post }
1:1 연관을 매핑한다.
뒤 내용은 AttachGroup 가 Post에 대한 레퍼런스를 가진다. 즉, Post가 있어야, AttachGroup를 만들 수 있다는 것을 구현할 수 있게 된다.
dto * with mapstruct
mapstruct 를 통해서 Entity와 DTO 매핑을 수행하겠다는 의미이다.
서비스를 생성할때 ServiceImpl 을 이용하여 구현하도록 한다.
service all with serviceImpl
페이징은 2가지를 제공한다.
paginate Board, Post, AttachGroup, Attach, Comment with pagination
Board, Post, AttachGroup, Attach, Comment 엔터티는 페이징을 지원함을 의미한다.
무한 스크롤은 페이징과 동일하며, "infinite-scroll" 을 통해서 가능하다.
최종적으로 위 그림과 같이 엔터티가 생성됨을 확인할 수 있다.
해당 내역을 복사하거나, Ctrl + C 등을 클릭하면 정의 파일을 다운로드 할 수 있다.
이제 JHipster을 통해서 JDL 구현체를 생성해 보자.
jhipster import-jdl <*.jh 파일 경로>
위와 같이 수행하면 다음과 같은 형태의 파일이 생성된다.
생성이 완료되면 다음과 같은 엔터티에 데이터를 적용 및 조회할 수 있는 화면이 생성된다.