Docker로 WAR 파일 배포하기 - Eclipse Dynamic Web Project

HOCHAN LEE·2025년 4월 21일

Dynamic Web Project

목록 보기
1/1
post-thumbnail

회사 프로젝트를 배포하는 역할을 맡았는데, 기존에 사용하던 Spring Boot 구조가 아니라 Dynamic Web Project로 되어 있어서 조금 당황했다.
Maven이나 Gradle도 없고, .war 파일을 직접 만들어서 배포해야 했기 때문에 어떻게 해야 하는지 하나씩 정리해봤다.


📌 Dynamic Web Project란?

Dynamic Web Project는 Eclipse에서 제공하는 웹 개발 템플릿 중 하나로, Servlet 기반의 웹 애플리케이션 개발을 위한 구조다. 보통은 .java, .jsp, WEB-INF, lib 폴더 등이 포함되어 있고, 최종적으로는 .war 파일을 만들어 톰캣 같은 WAS에 배포하게 된다.
빌드 도구(Maven/Gradle)가 없다 보니 의존성 추가나 배포가 전부 수동이라는 단점이 있었고, 다음 글에서는 Maven 프로젝트로 리팩터링하는 내용을 다룰 예정이다.


1️⃣ Eclipse JEE 설치 (War Export용)

.war 파일을 export 하려면 Eclipse의 JEE 버전이 필요하다.
brew 명령어를 통해 간단하게 설치했다.

brew install --cask eclipse-jee

설치 후에는 기존 Dynamic Web Project를 import해서 사용하면 된다.


2️⃣ .war 파일 내보내기 (Export)

Eclipse에서 해당 프로젝트 우클릭 → Export → Export... → Web → WAR file 선택

Export 시 설정은 아래처럼 하면 된다:

  • Web project: 현재 프로젝트 자동 선택됨
  • Destination: .war 파일 저장 경로 지정
  • Target runtime: 별도 설정 없이 기본값 사용
  • Overwrite existing file: 필요시 체크 (같은 이름의 .war가 있을 경우 덮어쓰기)

3️⃣ Dockerfile 작성

.war 파일을 Docker 이미지로 배포하기 위한 작업을 시작했다.
Dockerfile을 작성했는데, 이클립스 내 터미널에서 docker 명령어가 안 먹히는 문제가 발생했다. macOS 기본 터미널에서 실행하여 문제를 해결했다.
Eclipse는 환경변수 로딩이 제한적이라 docker 명령어를 인식 못 하는 경우가 있다고 한다.
또한, 프로젝트의 인코딩이 EUC-KR로 되어 있어서 톰캣 설정을 변경해주었다.

RUN sed -i 's/URIEncoding="UTF-8"/URIEncoding="EUC-KR"/' /usr/local/tomcat/conf/server.xml \
 && echo 'JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=EUC-KR"' >> /usr/local/tomcat/bin/setenv.sh \
 && chmod +x /usr/local/tomcat/bin/setenv.sh

4️⃣ docker-compose.yaml + docker.properties 작성

환경변수 주입 및 포트 설정 등을 위해 Docker Compose를 구성하고 docker.properties를 작성했다.

WebContet → WEB-INF → spring → appServlet 폴더 안에 있는.properties 파일들은 환경별 설정을 관리하는 용도로 쓰이고 있었는데, 파일 내용을 외부에서 관리하기 위해 docker.properties를 만들어 설정을 따로 분리했다.
docker-compose.yaml의 environment 항목에는 해당 .properties에서 사용되는 값들을 정의한다. 예를 들면 아래와 같이 구성할 수 있다:

environment:
  - DB_HOST=
  - DB_PORT=
  - DB_NAME=
  - DB_USERNAME=
  - DB_PASSWORD=

이렇게 정의된 값들은 root-context.xml에서 context:property-placeholder을 통해 로딩된다.
현재는 root-context.xml내에서 PropertyPlaceholderConfigurer를 사용해 docker.properties를 직접 명시해서 불러오도록 설정했다.

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="ignoreResourceNotFound"><value>true</value></property>
		<property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="locations">
            <list>
	        	<value>/WEB-INF/spring/appServlet/docker.properties</value>
	        </list>
        </property>
    </bean>

향후 운영/개발 등 여러 환경을 분기하고 싶다면 spring.profiles.active를 사용해 원하는 .properties 파일을 로드하도록 개선할 수 있다.

마지막으로 설정이 문제없는지 확인하기 위해 아래 명령어로 파싱 검증을 진행했다:

docker-compose config

📚 배운점

  • Dynamic Web Project는 처음에는 익숙하지 않지만 .war 파일 단위로 배포할 수 있어 구조를 이해하고 나면 적용은 어렵지 않았다.
  • docker-compose.yaml의 environment 항목을 통해 .properties에서 사용하는 설정 값을 외부에서 관리할 수 있고, Spring에서는 spring.profiles.active=docker 설정을 통해 어떤 .properties를 로드할지 결정할 수 있다는 것도 새롭게 알게 된 부분이다.
profile
Backend Developer

0개의 댓글