IT/개발 지식›DevOps•
5분
•JSP 프로젝트에서 Tomcat과 Maven 구조 이해하기
1. 들어가며: React/Vue와는 달랐던 JSP 프로젝트 환경
- 기존에는 React나 Vue 같은 프론트엔드 중심 개발 환경에 익숙했다.
- React/Vue에서는 보통
npm run dev로 개발 서버를 실행하고, 파일을 수정하면 브라우저에 바로 반영되는 흐름이 익숙했다. - 하지만 JSP 프로젝트에서는 단순히 화면 파일만 수정하는 것이 아니라, Java 코드 컴파일, Maven 빌드, Tomcat 배포 구조까지 함께 이해해야 했다.
- 프로젝트를 클론받은 뒤
maven clean,maven install같은 명령어를 실행해야 했고, 이 과정에서target폴더와 Tomcat의 배포 폴더가 생성되었다. - 처음에는 내가 수정하는 프로젝트 폴더와 Tomcat이 실제 실행하는 폴더가 왜 다른지 헷갈렸다.
- 이 글에서는 JSP 프로젝트가 Tomcat에서 어떻게 실행되는지, Maven이 어떤 역할을 하는지 정리한다.
2. React/Vue 개발 환경과 JSP 개발 환경의 차이
2-1. React/Vue에서 익숙했던 흐름
소스 코드 수정
↓
개발 서버가 변경 감지
↓
브라우저에 바로 반영
2-2. JSP에서 마주한 흐름
소스 코드 수정
↓
Java 코드 컴파일
↓
Maven 빌드
↓
배포 가능한 결과물 생성
↓
Tomcat에 배포
↓
브라우저에서 확인
2-3. 처음에 어려웠던 이유
- 수정한 파일이 바로 Tomcat에서 실행되는 파일이라고 생각했다.
target폴더가 왜 생기는지 몰랐다.- Tomcat 안의
webapps/프로젝트명폴더와 내 프로젝트 폴더의 차이를 몰랐다. maven clean과maven install이 서버 실행 명령어처럼 느껴졌다.- JSP 파일, Java 클래스,
WEB-INF,lib,classes구조가 한 번에 등장해서 헷갈렸다.
3. JSP 프로젝트가 Tomcat에서 실행되는 전체 흐름
개발 프로젝트 폴더
↓
Maven 빌드
↓
target 폴더 생성
↓
WAR 또는 배포용 폴더 생성
↓
Tomcat에 배포
↓
브라우저에서 실행
- Tomcat은 내가 작성한 원본 프로젝트를 그대로 실행하는 것이 아니다.
- Maven이나 IDE가 만든 배포 결과물을 Tomcat이 실행한다.
- 그래서 원본 프로젝트 폴더,
target폴더, Tomcat 배포 폴더를 구분해야 한다.
4. Tomcat 안의 프로젝트 폴더는 무엇인가?
4-1. webapps 폴더의 역할
apache-tomcat/
└─ webapps/
└─ 프로젝트명/
- Tomcat이 실제로 실행하는 웹 애플리케이션 위치다.
http://localhost:8080/프로젝트명으로 접근되는 이유가 된다.
4-2. 정상적인 Tomcat 배포 구조
webapps/
└─ study/
├─ index.jsp
├─ css/
├─ js/
└─ WEB-INF/
├─ web.xml
├─ classes/
└─ lib/
4-3. 비정상적인 재귀 구조 예시
WEB-INF/
└─ 프로젝트명/
└─ WEB-INF/
└─ 프로젝트명/
- 이런 구조가 생기면 배포 설정이 꼬였을 가능성이 있다.
target이나 배포 결과물을 다시 배포 대상으로 포함했을 때 발생할 수 있다.
5. Maven을 사용하는 JSP 프로젝트 구조
5-1. Maven 프로젝트 기본 구조
project/
├─ src/
│ └─ main/
│ ├─ java/
│ ├─ resources/
│ └─ webapp/
├─ pom.xml
└─ target/
5-2. pom.xml의 역할
- 프로젝트 정보 관리
- 라이브러리 의존성 관리
- 빌드 설정 관리
5-3. target 폴더란?
target/
├─ classes/
├─ 프로젝트명/
└─ 프로젝트명.war
- Maven이 만든 빌드 결과물이다.
- 직접 수정하는 폴더가 아니다.
- 삭제해도 Maven 빌드를 다시 하면 생성된다.
6. Maven clean, package, install 이해하기
6-1. mvn clean
- 기존 빌드 결과물을 삭제한다.
- 주로
target폴더를 삭제한다. - 빌드 결과가 꼬였을 때 자주 사용한다.
6-2. mvn package
- Java 코드를 컴파일한다.
- 배포 가능한 결과물을 생성한다.
- JSP 프로젝트에서는 보통 WAR 파일이 생성된다.
6-3. mvn install
package까지 수행한다.- 생성된 결과물을 내 PC의 로컬 Maven 저장소에 등록한다.
- 일반적인 웹 프로젝트 실행만 목적이라면
package만으로 충분한 경우도 있다. - 다만 회사 프로젝트에서는 환경 세팅 과정에서
mvn clean install을 실행하는 경우가 많다.
6-4. 자주 쓰는 명령어
mvn clean package
mvn clean install
7. Maven을 사용하지 않는 JSP 프로젝트는 어떻게 다를까?
7-1. Maven 없는 프로젝트 구조 예시
project/
├─ src/
├─ WebContent/
│ ├─ index.jsp
│ └─ WEB-INF/
│ ├─ web.xml
│ └─ lib/
└─ build/
7-2. 라이브러리 관리 방식
- Maven 사용 시:
pom.xml에 dependency를 작성한다. - Maven 미사용 시:
.jar파일을 직접 다운로드해서WEB-INF/lib에 넣어야 한다.
7-3. 빌드는 누가 해주는가?
- Maven을 사용하지 않으면 Eclipse 같은 IDE가 컴파일을 처리한다.
- Tomcat 배포도 IDE 설정에 의존하는 경우가 많다.
7-4. Maven 미사용 시 주의할 점
- 라이브러리 버전 관리가 어렵다.
- 팀원마다 개발 환경이 달라질 수 있다.
- 자동 빌드와 배포 구성이 불편해질 수 있다.
8. 헷갈리기 쉬운 개념 정리
| 개념 | 의미 |
|---|---|
| 개발 프로젝트 폴더 | 내가 코드를 수정하는 원본 위치 |
target | Maven이 만든 빌드 결과물 |
Tomcat webapps/프로젝트명 | Tomcat이 실제 실행하는 배포본 |
WEB-INF | 외부에서 직접 접근할 수 없는 서버 내부 영역 |
WEB-INF/classes | 컴파일된 Java 클래스 파일 위치 |
WEB-INF/lib | 프로젝트 실행에 필요한 jar 라이브러리 위치 |
pom.xml | Maven 설정 파일 |
9. 정리
- React/Vue와 JSP는 실행 흐름이 다르다.
- React/Vue는 개발 서버 중심의 빠른 반영 흐름에 가깝다.
- JSP는 Java 컴파일, Maven 빌드, Tomcat 배포 구조를 이해해야 한다.
- Maven을 사용하면
target폴더에 빌드 결과물이 생성된다. - Tomcat은 원본 프로젝트가 아니라 배포된 결과물을 실행한다.
- JSP 수정이 반영되지 않는다면 원본 위치와 배포 위치를 먼저 구분해야 한다.
10. 마무리
- JSP 프로젝트를 처음 접하면
target,webapps,WEB-INF,maven clean,maven install같은 개념이 한 번에 등장해서 헷갈릴 수 있다. - 하지만 전체 흐름을 보면 핵심은 단순하다.
- 내가 수정하는 원본 프로젝트와 Tomcat이 실행하는 배포본은 다르다.
- Maven은 그 사이에서 빌드 결과물을 만들어주는 도구다.