

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 프로젝트 폴더 구성
<a name="java-tomcat-platform-directorystructure"></a>

Tomcat 서버에 배포할 경우 컴파일된 Java Platform Enterprise Edition(*Java EE*) 웹 애플리케이션 아카이브(WAR 파일)를 특정 [지침](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm)에 따라 구성해야 합니다. 프로젝트 디렉터리가 동일한 표준을 충족할 필요는 없지만, 컴파일과 패키징을 단순화하려면 동일한 방식으로 구성하는 것이 좋습니다. 프로젝트 폴더를 WAR 파일 콘텐츠와 같이 구성하면 파일 간의 관련성과 웹 서버에서의 파일 동작 방식을 이해하는 데도 도움이 됩니다.

다음 권장 계층 구조에서 웹 애플리케이션의 소스 코드는 빌드 스크립트 및 이것이 생성하는 WAR 파일과 격리되도록 `src` 디렉터리에 배치되어 있습니다.

```
~/workspace/my-app/
|-- build.sh            - Build script that compiles classes and creates a WAR
|-- README.MD           - Readme file with information about your project, notes
|-- ROOT.war            - Source bundle artifact created by build.sh
`-- src                 - Source code folder
    |-- WEB-INF         - Folder for private supporting files
    |   |-- classes     - Compiled classes
    |   |-- lib         - JAR libraries
    |   |-- tags        - Tag files
    |   |-- tlds        - Tag Library Descriptor files
    |   `-- web.xml     - Deployment Descriptor
    |-- com             - Uncompiled classes
    |-- css             - Style sheets
    |-- images          - Image files
    |-- js              - JavaScript files
    `-- default.jsp     - JSP (JavaServer Pages) webpage
```

`src` 폴더 콘텐츠는 `com` 폴더를 제외하고 패키징하여 서버에 배포하는 콘텐츠와 일치합니다. `com` 폴더에는 컴파일되지 않은 클래스(`.java` 파일)가 포함되어 있습니다. 애플리케이션 코드에서 액세스할 수 있으려면 이 클래스를 컴파일하여 `WEB-INF/classes` 디렉터리에 배치해야 합니다.

`WEB-INF` 디렉터리에는 웹 서버에서 공개적으로 제공되지 않는 코드와 구성이 포함되어 있습니다. 소스 디렉터리의 루트에 있는 다른 폴더(`css`, `images`, `js`)는 웹 서버의 해당 경로에서 공개적으로 사용할 수 있습니다.

다음 예제는 더 많은 파일과 하위 디렉터리가 포함되어 있는 점을 제외하고 앞서 다룬 프로젝트 디렉터리와 동일합니다. 이 예제 프로젝트에는 단순한 태그, 모델 및 지원 클래스, `record` 리소스에 대한 Java 서버 페이지(JSP) 파일이 포함되어 있습니다. 또한 스타일 시트 및 [부트스트랩](http://getbootstrap.com/)의 JavaScript, 기본 JSP 파일, 404 오류에 대한 오류 페이지도 포함되어 있습니다.

`WEB-INF/lib`에는 PostgreSQL용 JDBC(Java Database Connectivity) 드라이브가 포함된 Java 아카이브(JAR) 파일이 포함되어 있습니다. 클래스 파일이 아직 컴파일되지 않았으므로 `WEB-INF/classes`는 비어 있습니다.

```
~/workspace/my-app/
|-- build.sh
|-- README.MD
|-- ROOT.war
`-- src
    |-- WEB-INF
    |   |-- classes
    |   |-- lib
    |   |   `-- postgresql-9.4-1201.jdbc4.jar
    |   |-- tags
    |   |   `-- header.tag
    |   |-- tlds
    |   |   `-- records.tld
    |   `-- web.xml
    |-- com
    |   `-- myapp
    |       |-- model
    |       |   `-- Record.java
    |       `-- web
    |           `-- ListRecords.java
    |-- css
    |   |-- bootstrap.min.css
    |   `-- myapp.css
    |-- images
    |   `-- myapp.png
    |-- js
    |   `-- bootstrap.min.js
    |-- 404.jsp
    |-- default.jsp
    `-- records.jsp
```

## 셸 스크립트를 사용하여 WAR 파일 빌드
<a name="java-tomcat-platform-directorystructure-building"></a>

`build.sh`는 Java 클래스를 컴파일하고, WAR 파일을 구성하며, 로컬 테스트를 위해 이를 Tomcat의 `webapps` 디렉터리에 복사하는 매우 단순한 shell 스크립트입니다.

```
cd src
javac -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/web/ListRecords.java

jar -cvf ROOT.war *.jsp images css js WEB-INF
cp ROOT.war /Library/Tomcat/webapps
mv ROOT.war ../
```

WAR 파일 내부에서 `src` 폴더를 제외하고, 앞서 다룬 예제의 `src/com` 디렉터리에 있는 것과 동일한 구조를 볼 수 있습니다. `jar` 명령은 `META-INF/MANIFEST.MF` 파일을 자동으로 만듭니다.

```
~/workspace/my-app/ROOT.war
|-- META-INF
|   `-- MANIFEST.MF
|-- WEB-INF
|   |-- classes
|   |   `-- com
|   |       `-- myapp
|   |           |-- model
|   |           |   `-- Records.class
|   |           `-- web
|   |               `-- ListRecords.class
|   |-- lib
|   |   `-- postgresql-9.4-1201.jdbc4.jar
|   |-- tags
|   |   `-- header.tag
|   |-- tlds
|   |   `-- records.tld
|   `-- web.xml
|-- css
|   |-- bootstrap.min.css
|   `-- myapp.css
|-- images
|   `-- myapp.png
|-- js
|   `-- bootstrap.min.js
|-- 404.jsp
|-- default.jsp
`-- records.jsp
```

## `.gitignore` 사용
<a name="java-tomcat-platform-gitignore"></a>

컴파일된 클래스 파일 및 WAR 파일을 Git 리포지토리에 커밋하거나 Git 명령 실행 시 이러한 파일에 대해 나타나는 메시지를 보지 않도록 하려면 프로젝트 폴더의 `.gitignore` 파일에 관련 파일 형식을 추가합니다.

**\~/workspace/myapp/.gitignore**

```
*.zip
*.class
```