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

Jmix 실전 마스터 시리즈 3화 – 도메인 모델링과 Entity 설계 실무 적용 가이드

B컷개발자 2025. 5. 9. 16:03
728x90

Jmix에서 도메인 모델을 설계하는 방법은 단순한 클래스 정의를 넘는다. GUI 기반 모델러와 Java 코드가 동기화되는 구조 속에서 효율적인 Entity 설계 전략을 소개한다.


왜 Entity 설계가 Jmix 개발의 핵심인가?

Jmix는 Spring Boot 기반임에도 불구하고, Entity를 GUI로 정의하고 자동으로 화면과 스키마를 생성할 수 있는 플랫폼이다.

즉, Jmix에서는 ‘도메인 모델 = UI + DB 구조 + 권한 정책의 중심’이 된다.
따라서 모델 설계는 전체 개발 생산성과 유지보수에 직접적인 영향을 준다.


도메인 모델 설계 준비 – Jmix Studio에서 Entity 만들기

① IntelliJ 우측 Jmix 탭에서 Entities 선택

→ + New Entity 클릭

② Entity 정보 입력

  • Class Name: Employee
  • Package: com.company.demo.entity
  • Table Name: EMPLOYEE (자동 지정되지만 수정 가능)

③ 기본 필드 추가

필드 이름 타입 주석

fullName String 직원 이름
birthDate LocalDate 생년월일
email String 이메일
department Association → Department 소속 부서

💡 실무 팁
Jmix는 자동으로 ID 필드를 UUID로 생성하며, Audit 필드(작성자, 작성일자 등)도 옵션으로 포함시킬 수 있다.
기업용 시스템에선 이 기능을 적극 활용해야 감사 로그와 연동이 용이하다.


Composition vs Association 차이

✔ Association

  • N:1 또는 1:N 관계에서 독립 객체 참조
  • 예시: Employee → Department
  • DB에서 외래 키(FK) 관계로 연결

✔ Composition

  • 객체가 종속 관계일 때 사용
  • 예시: Invoice → InvoiceLine
    (인보이스가 삭제되면 라인도 함께 삭제)

💡 실무 기준:

  • 독립된 CRUD 화면이 필요한 경우: Association
  • 부모 화면에서 하위 객체를 관리할 경우: Composition

⚙ Jmix Entity의 핵심 구성요소

@JmixEntity
@Table(name = "EMPLOYEE")
@Entity(name = "demo_Employee")
public class Employee {
    @JmixGeneratedValue
    @Id
    @Column(name = "ID", nullable = false)
    private UUID id;

    @Column(name = "FULL_NAME")
    private String fullName;

    @Column(name = "BIRTH_DATE")
    private LocalDate birthDate;

    @InstanceName
    public String getInstanceName() {
        return fullName;
    }
}
  • @JmixEntity: Jmix에서 Entity로 인식
  • @JmixGeneratedValue: UUID 자동 생성
  • @InstanceName: UI에서 라벨로 표시되는 필드 설정

실무 시나리오 예시 – 인사관리 시스템

모델 구조 예시

  • Employee – 직원 정보
  • Department – 부서
  • Position – 직책
  • LeaveRequest – 휴가 신청
  • LeaveType – 휴가 종류

Mermaid로 모델 관계 시각화:

classDiagram
    class Employee {
        UUID id
        String fullName
        LocalDate birthDate
        String email
        Department department
    }
    class Department {
        UUID id
        String name
    }
    Employee --> Department

이 구조로 도메인 모델을 설계하면, 이후 화면은 거의 자동 생성만으로 업무 시스템이 구성된다.


저장 후 UI 화면 자동 생성

Entity 저장 후, Screens 탭에서 해당 Entity를 선택 → Generate Screens

  • Browse Screen: 테이블 리스트, 검색 필터 포함
  • Editor Screen: 등록/수정 화면

화면까지 자동으로 구성되는 이 점은 Jmix만의 초고속 개발 특화 기능이다.


DB 동기화 – Liquibase 기반 마이그레이션

Entity를 만들면 Jmix는 자동으로 *.xml 형태의 Liquibase 파일을 생성한다.
애플리케이션 실행 시, 이 파일 기반으로 DB 테이블이 자동 생성되거나 업데이트된다.

파일 위치:

/src/main/resources/liquibase/changelog/xxxx-changelog.xml

💡 실무 팁
DB는 직접 만지지 않고, Entity → Liquibase → DB 흐름을 지키는 것이 유지보수에 유리하다.


마무리 – 모델이 곧 시스템의 중심이다

Jmix에서 도메인 모델 설계는 단순한 스키마 정의가 아니다.
UI, DB, 권한, API까지 모두 이 모델을 기반으로 생성되기 때문에, 초기 설계의 정합성과 구조적 판단이 전체 품질을 좌우한다.


다음 글 예고

Jmix 실전 마스터 시리즈 4화 – CRUD UI 자동 생성과 화면 커스터마이징 전략

 

728x90