파일 및 디렉토리 구성

스크럴을 구성하는 파일, 디렉토리에 대한 설명입니다.

project
│   .skrull/                        << 'skrull 에 의해 생성된 파일을 추적하기 위한 디렉토리'
│
└───src/
│   │
│   └───main/
│       │───config/                 << 'skrull 설정 디렉토리'
│           │
│           │   entity-config/      << '1️⃣ entity 별 설정 파일 디렉토리'
│           │   metadata.xml        << '2️⃣ mvn verify -Pmetadata 에 의해 생성되는 파일'
│           │   skrull-config.xml   << '3️⃣ skrull 설정 파일'
│           │
│       │───generated-java/         << '4️⃣ skrull 에 의해 생성된 java code 디렉토리'
│       │───generated-resources/    << '5️⃣ skrull 에 의해 생성된 resource code (mybatis mapper) 디렉토리'
│       │───java/                   << '6️⃣ domain, dsl(mybatis), mapper java 파일을 생성합니다.'
│       │───resources/              << '7️⃣ mybatis sql mapper xml 을 생성합니다.'
│   
└───target
│   │
│   │───skrull-maven-plugin/
│       │
│       │───collisions/             << '8️⃣ 충돌난 파일을 이곳에 생성'
│       │───com/mypackage/          << '9️⃣ 자동으로 install 하지 않는 파일은 이곳에 생성'

  • skrull 에 의해 generated-java, generated-resources 디렉토리에 생성된 파일은, 개발자가 수정하는 파일이 아닙니다.
    • 수정 하더라도, 다음 skrull 구동시 원복됩니다.
  • skrull 에 의해 java, resources 에 생성된 파일은, 개발자가 수정 및 로직 추가를 할 수 있습니다.

1. entity-config

location : src/main/config/entity-config/
관리주체 : 개발자

코드 생성이 필요한 테이블들에 대한 정보를 담은 xml 을 이곳에 위치시킵니다.

자세한 설명은 entity-config 에서 확인합니다.

2. metadata.xml

location : src/main/config/metadata.xml
관리주체 : skrull

metadata 플러그인(dbmetadata-maven-plugin)에 의해 생성되는 파일입니다.

데이터베이스에 대한 정보 (테이블, 컬럼…)를 담고 있으며, 이 파일은 플러그인에 의해 관리 되므로 사용자가 임의 수정을 하지 않도록 합니다.
만약 수정을 한다 해도, 플러그인을 다시 실행하면 덮어 쓰게 되므로 수정한 내용이 보존되지 않습니다.

3. skrull-config.xml

location : src/main/config/skrull-config.xml
관리주체 : 개발자

자세한 설명은 skrull-config 에서 확인합니다.

4. generated-java

location : src/main/generated-java/
관리주체 : skrull

gen 플러그인(skrull-maven-plugin)에 의해 생성되는 디렉토리입니다.

skrull 에 의해 생성된 java 파일이 이곳에 위치하게 됩니다.
현재는 model, dsl 자바 파일이 이곳에 만들어집니다.

여기에 생성된 파일들은 플러그인에 의해 관리 되므로 사용자가 임의 수정을 하지 않도록 합니다.
만약 수정을 한다 해도, 플러그인을 다시 실행하면 덮어 쓰게 되므로 수정한 내용이 보존되지 않습니다.

5. generated-resources

location : src/main/generated-resources/
관리주체 : skrull

gen 플러그인(skrull-maven-plugin)에 의해 생성되는 디렉토리입니다.

skrull 에 의해 생성된 resource(java 파일이 아닌) 파일이 이곳에 위치하게 됩니다.
현재는 mybatis mapper xml 파일이 이곳에 만들어집니다.

여기에 생성된 파일들은 플러그인에 의해 관리 되므로 사용자가 임의 수정을 하지 않도록 합니다.
만약 수정을 한다 해도, 플러그인을 다시 실행하면 덮어 쓰게 되므로 수정한 내용이 보존되지 않습니다.

6. java

location : src/main/java/
관리주체 : skrull, 개발자

maven 기본 directory structure 에서 java 소스 파일이 위치하는 곳입니다.

skrull gen 플러그인은 이곳에도 java 파일을 생성합니다.
(같은 디렉토리에 같은 이름의 파일이 존재 하지 않는 경우에만)

최초에는 skrull 이 파일을 생성하지만, 생성된 후에는 개발자 가 해당 파일을 마음대로 수정하며 개발을 할 수 있습니다.

생성하는 파일은 다음과 같습니다.

디렉토리파일명설명
modules/{package}/domain/{entity}.javajava domain object (pojo)
modules/{package}/domain/support/{entity}Dsl.javaMyBatis Dynamic SQL 지원을 위한,
테이블 컬럼 맵핑 정보를 담고 있는 java 파일
modules/{package}/repository/{entity}Repository.javaMyBatis sql mapper java 파일

비즈니스 로직을 담고 있는 service 자바 파일은 자동으로 이곳에 생성되지 않습니다.

TIP

일반적으로 domain, repository 는 database table 과 1:1 관계를 가지지만, service 는 1:1의 관계가 되지 않습니다.
이로 인해 skrull 에서는, 필요시에만 개발자가 기본 CRUD service code 를 가저가다 사용 할 수 있도록 /target/ 디렉토리에 별도로 생성합니다.
이와 비슷한 이유로 RestAPI(Resource) java 파일 또한 /target/ 디렉토리에 별도로 생성합니다.

9. target/skrull-maven-plugin/{package}/ 하위 디렉토리 내용을 확인해주세요

7. resources

location : src/main/resources/
관리주체 : skrull, 개발자

maven 기본 directory structure 에서 resources 파일이 위치하는 곳입니다.

skrull gen 플러그인은 이곳에도 mybatis mapper xml 파일을 생성합니다.
(같은 디렉토리에 같은 이름의 파일이 존재 하지 않는 경우에만)

최초에는 skrull 이 파일을 생성하지만, 생성된 후에는 개발자 가 해당 파일을 마음대로 수정하며 개발을 할 수 있습니다.

8. collisions

location : target/skrull-maven-plugin/collisions/
관리주체 : skrull

skrull 이 생성하려는 파일이 src/main/java, src/main/resources 에 이미 존재하는 경우 (그리고 수정된 경우)
해당 파일을 이곳에 생성합니다.

개발자 model java 파일을 수정한뒤, 테이블 컬럼이 변경된 경우 gen 플러그인을 구동해도 skrull 은 해당 model 파일을 업데이트 하지 않습니다. (개발자의 코드를 보호하기 위해)

이런 경우 개발자는 이곳에서 자동 생성된 해당 파일을 참고해서 필요한 부분의 코드를 가져다가 사용할 수 있습니다.

9. target/skrull-maven-plugin/{package}/ 하위 디렉토리

skrull 이 자동으로 install 하지 않는 파일은 이곳에 생성됩니다.

자동으로 install 하지 않는 이유는 다음과 같습니다.

  • optional 한 파일인 경우
  • 아키텍쳐상 테이블과 1:1 관계가 아닌 경우
  • 파일을 install 할 위치가 매우 가변적인 경우

다음은 각 디렉토리별 생성되는 파일 정보입니다.

디렉토리설명파일 타입
frontend/pages목록, 상세용 vuejs 파일이 생성됩니다..vue
frontend/servicesdomain 모델 정보를 가지고 있는 js 파일이 생성됩니다..js
modules비즈니스 로직을 수행할 service 자바 파일이 생성됩니다..java
webRestAPI 용 Resource 자바 파일이 생성됩니다..java

10. 설치 파일 목록

번호위치파일명설명
1generated-java{도메인명}_.java테이블을 표현하는 base domain 객체
2{도메인명}Dsl_.javaMyBatis Dynamic SQL 용 base 객체
3generated-resources{도메인명}Repository_.xml테이블에 해당하는 base mybatis mapper sql 용 xml
4java{도메인명}.java테이블을 표현하는 domain 객체. 위 1번 항목을 상속 받는다.
5{도메인명}Dsl.javaMyBatis Dynamic SQL 용 객체. 위 2번 항목을 상속 받는다.
6{도메인명}Repository.java테이블에 해당하는 mybatis mapper java 인터페이스
7resources{도메인명}Repository.xml테이블에 해당하는 mybatis mapper sql xml. 위 6번 java 파일과 연결된다.
내부에서는 위 3 xml 을 활용한다.