IT/개발 지식DevOps
5

JSP 프로젝트에서 Tomcat과 Maven 구조 이해하기

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 cleanmaven 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. 헷갈리기 쉬운 개념 정리

개념의미
개발 프로젝트 폴더내가 코드를 수정하는 원본 위치
targetMaven이 만든 빌드 결과물
Tomcat webapps/프로젝트명Tomcat이 실제 실행하는 배포본
WEB-INF외부에서 직접 접근할 수 없는 서버 내부 영역
WEB-INF/classes컴파일된 Java 클래스 파일 위치
WEB-INF/lib프로젝트 실행에 필요한 jar 라이브러리 위치
pom.xmlMaven 설정 파일

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은 그 사이에서 빌드 결과물을 만들어주는 도구다.

댓글

(0)
JSP 프로젝트에서 Tomcat과 Maven 구조 이해하기 | 강민석의 개발블로그