ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jmix 실전 마스터 시리즈 3화 – 도메인 모델링과 Entity 설계 실무 적용 가이드
    언어 및 프레임워크/Jmix 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
Designed by Tistory.