Command Line Interface
Command Line Interface 를 사용하여 어플리케이션/프로젝트 생성/Domain Class/CRUD 생성, 빌드, 빌드 및 실행 등의 작업을 할 수 있다.
이때 [빌드]와 [빌드 및 실행]에서 수행하는 빌드가 중복되는 작업이므로 [빌드 및 실행]을 수행시키는 경우 [빌드] 단계는 생략될 수 있다.
환경설정
Command Line Interface을 사용하기 위한 환경설정 및 도움말에 대해 알아보자.
- Anyfrmae 설치 경로\bin 에서 command 창을 실행 시킨 다음 env 명령어를 입력하여 env.bat 파일을 실행시킨다.
Anyframe Home, Ant Home, Path, Classpath 설정등의 환경설정이 된다.

- Command를 통한 작업 시, 사용가능한 8가지 command 가 있으며 이는 anyframe -help 라는 명령어를 통해 확인 가능하다.

Command
사용가능한 8가지 command 를 활용해 어플리케이션 생성, 프로젝트 생성, Domain Class 생성, CRUD 생성 등의 작업을 할 수 있다.
어플리케이션 생성
Command Line Interface를 이용해 어플리케이션을 생성해본다.
- 환경설정된 command 창에서 어플리케이션을 생성하고 싶은 폴더로 이동한다.
- 다음의 어플리케이션 생성 command를 입력한다.
anyframe create-app emarketplace com.sds.emp
- anyframe create-app APPLICATION_NAME PACKAGE_NAME -dynamic false
- emarketplace라는어플리케이션명과 com.sds.emp 라는 패키지명을 가진 어플리케이션을 생성
- command 입력시 -dynamic true/false 옵션을 이용하여 dynamic reloading 기능을 제공하는 어플리케이션으로 생성할지 말지 결정이 가능하다.
-dynamic true/false 옵션을 주지 않은 경우, default 값은 false로 dynamic reloading 기능을 제공하지 않는다.

- 어플리케이션 생성이 정상적으로 되었는지 확인한다.
생성된 어플리케이션에는 다음과 같이, 배포 파일이 위치하게 될 repo 폴더와 2개의 Properties 파일(application-build.properties, web-deploy.properties)이 생성된다.

프로젝트 생성
Command Line Interface 를 이용해 프로젝트를 생성해본다.
Common, Service, Web Type 의 프로젝트를 생성할 수 있다.
Common 타입 프로젝트 생성
- 어플리케이션이 생성된 폴더 하위로 이동한다. (예를 들어, emarketplace 라는 어플리케이션을 생성시켰다면 emarketplace 폴더 하위에서 command를 실행시키도록 한다.)
- common 타입 프로젝트 생성 command를 입력한다.
anyframe create-project common
- anyframe create-project PROJECT_TYPE PROJECT_NAME
- common 타입의 프로젝트를 생성할 때, 프로젝트 명을 따로 명시하지 않는 경우 기본적으로 common 이라는 이름의 프로젝트를 생성한다.

- common 타입의 프로젝트가 정상적으로 생성되었는지 확인한다. 프로젝트가 생성되면 eclipse 프로젝트 관련 파일들(.project, .classpath)과 여러 소스 및 테스트 코드 폴더, 빌드 파일(build.xml, build.properties) 등이 생성된다.

Service 타입 프로젝트 생성
- Service 타입 프로젝트 생성 command를 입력한다.
anyframe create-project service
- anyframe create-project PROJECT_TYPE PROJECT_NAME
- service 타입의 프로젝트를 생성할 때, 프로젝트 명을 따로 명시하지 않는 경우 기본적으로 service라는 이름의 프로젝트를 생성한다.
- -domain true/false 옵션을 이용하여, 해당 프로젝트를 domain 프로젝트로 사용할지 여부를 결정해주며 기본적으로 false 값이 적용된다. 옵션을 명시하지 않을 경우 최초로 생성되는 service 타입 프로젝트가 domain 프로젝트로 인식된다.

- service 타입의 프로젝트가 정상적으로 생성되었는지 확인한다. 프로젝트가 생성되면 eclipse 프로젝트 관련 파일들(.project, .classpath)과 여러 소스 및 테스트 코드 폴더, 빌드 파일(build.xml, build.properties) 등이 생성된다.

Web 타입 프로젝트 생성
- Web 타입 프로젝트 생성 command를 입력한다.
anyframe create-project web
- anyframe create-project PROJECT_TYPE PROJECT_NAME
- web 타입의 프로젝트를 생성할 때, 프로젝트 명을 따로 명시하지 않는 경우 기본적으로 web 이라는 이름의 프로젝트를 생성한다.

- web 타입의 프로젝트가 정상적으로 생성되었는지 확인한다. 프로젝트가 생성되면 eclipse 프로젝트 관련 파일들(.project, .classpath)과 여러 소스 및 테스트 코드 폴더, 빌드 파일(build.xml, build.properties) 등이 생성되며 src/main/webapp/WEB-INF/lib 폴더 하위에 필요 라이브러리들이 배포되어 있다.

Domain Class Generation
Command Line Interface 를 이용해 Domain Class 와 CRUD를 생성해본다.
- Domain Class 생성 command를 입력한다.
anyframe create-model -table "*"
- anyframe create-model [-options]
- -basepackage xxx라는 옵션 설정 시,DB Table로 부터 Domain Class를 생성할 때 xxx 패키지 하위로 생성된다.
- -table xxx라는 옵션 설정을 하지 않는 경우, default 로 모든 DB Table로 부터 Domain Class들을 생성한다. 명시적으로 모든 DB Table에 대해서
Domain Class를 생성해낸다고 표시 하기 위해서는 -table "*" 옵션을 사용한다.
특정 테이블명을 사용하고 싶은 경우 TABLE NAME을 지정하면 된다. 예) anyframe create-model -table FORUMS -basepackage com.sds.emp.domain

- Domain Class 가 정상적으로 생성되었는지 확인한다.

CRUD Generation
Business Layer 코드 생성
- Business Layer 코드 생성 command를 입력한다.
anyframe create-service Forums
- anyframe create-service ENTITY [-options]
- -service xxx 옵션은 service 타입 프로젝트 중 어느 프로젝트에 코드를 생성시킬지 결정하는 것으로, default 로는 가장 최초에 생성된 service 타입 프로젝트를 인식한다.
- -package xxx 옵션은 service package를 지정하는 것으로, 이때 중간 package 명을 추가할 수 있다. (ex.subsystem.forums) 기본적으로 package 명은 Domain Class 명의 소문자 형태로 지정된다.

- Business Layer 코드가 정상적으로 생성되었는지 확인한다.

Presentation Layer 코드 생성
- Presentation Layer 코드 생성 command를 입력한다.
anyframe create-web Forums- anyframe create-web ENTITY [-options]
- -package xxx 옵션은 web package를 지정하는 것으로 Business Layer 코드 생성 시 입력한 package 정보와 동일하게 입력하도록 한다. 기본적으로 package 명은 Domain Class 명의 소문자 형태로 지정된다.

- Presentation Layer 코드가 정상적으로 생성되었는지 확인한다.

Business Layer 와 Presentation Layer 코드 동시 생성
- 다음 command 입력 후 enter
anyframe create-all Forums- anyframe create-all ENTITY [-options]
- Domain Class 기반의 Business Layer 코드와 Presentation Layer 코드를 동시에 생성해 낸다.
- -service xxx 옵션은 service 타입 프로젝트 중 어느 프로젝트에 코드를 생성시킬지 결정하는 것으로, default 로는 가장 최초에 생성된 service 타입 프로젝트를 인식한다.
- -package xxx 옵션은 package 명을 지정하는 것으로, 기본적으로 package 명은 Domain Class 명의 소문자 형태로 지정된다.

- Business Layer, Presentation Layer 코드가 정상적으로 생성되었는지 확인한다.

빌드
Command Line Interface를 이용해 빌드해보자.
어플리케이션 빌드
어플리케이션 빌드하는 방법은 다음과 같이 3가지가 있으며, 해당 command 는 어플리케이션이 생성된 경로로 이동하여 실행한다.
- 어플리케이션 전체 빌드, WEB-INF/classes로 배포시
anyframe build-app -deploy class

빌드된 결과를 WEB-INF/classes 에서 확인하며,다음과 같이 생성된다.

- 어플리케이션 전체 빌드, WEB-INF/lib 하위로 jar 파일 형태로 배포시
anyframe build-app -deploy jar

빌드된 결과를 WEB-INF/lib 에서 확인하며,생성한 각각의 프로젝트의 이름(common,service,web)으로 jar 파일이 생성된다.

- 어플리케이션 전체 빌드로 dynamic reloading 기능을 사용하는 어플리케이션에 대해서 사용하며, WEB-INF/modules/ 폴더 하위로 jar 파일 형태로 배포됨
anyframe build-app

빌드된 결과를 WEB-INF/modules/ 폴더 하위에서 확인한다.

프로젝트 빌드
- 빌드 할 프로젝트로 이동한다.
- ant를 실행하기 위한 build.xml, build.properties 파일이 있는지 확인한다.
- command 창을 실행시키고 ant 를 실행시킨다. 이때 default target이 수행된다.
- ant는 build.xml 파일을 이용해 빌드를 수행하며, build.xml의 default target명은 "default"이다.
- 기본적으로 ant를 이용하여 빌드를 수행하면 초기화, 컴파일, 패키징, 테스트, 배포 등이 전체 수행된다.
- ant를 통해 "default-report" target을 수행하면, checkstyle, code duplication 등의 코드 품질검사를 함께 하여 report 결과를 만들어 준다.
- ant target 은 build.xml 파일을 참고한다.

빌드 및 실행
Command Line Interface를 이용해 어플리케이션 전체 빌드 및 웹 어플리케이션까지 실행시켜보자. Anyframe Gen 설치 시, Jetty가 내장되어 있으므로
배포 및 빌드를 자동화하여 프로젝트 및 코드 생성 후 즉시 기능 확인이 가능하다.
어플리케이션 빌드 및 웹 어플리케이션 실행
웹 어플리케이션을 빌드 및 실행하는 방법은 다음과 같이 3가지가 있으며, 해당 command 는 어플리케이션이 생성된 경로로 이동하여 실행한다.
- 어플리케이션 전체 빌드 및 실행
anyframe run
(dynamic reloading 기능을 사용하지 않는 어플리케이션의 경우에 한하여, 어플리케이션 빌드 옵션과 동일하게
-deploy class 혹은 -deploy jar를 이용할 수 있다.)

웹 어플리케이션 실행 결과를 웹 브라우저를 띄워서 확인하도록 한다.
요청 URL에서 Port 정보가 8090인 것에 유의하도록 한다. (Jetty의 기본 Port 정보가 8090임)

- Jetty 폴더 확인
어플리케이션의 repo 폴더 하위에 jetty-temp라는 폴더가 생성되어 Jetty가 구동되게 된다. 배포 이후에 클래스나 JAR 파일, JSP 파일등을
반영하고 Jetty로 재확인하고 싶다면 이 폴더의 해당 위치에 배포하도록 한다.
