개발

멀티캠퍼스 [현대 이지웰] AWS 활용한 배포 War, tomcat(버전 맞추기 필수!)

taecostudy76 2025. 12. 8. 18:18

AWS에 지금까지 했던 프로젝트를 배포하려고 합니다.

AWS에 포트를 활성화 했고, jenkins를 사용해서 빌드를 하려고 했습니다.

근데 빌드는 성공했고, tomcat도 잘 올라와 있는데 404 에러가 떴습니다.

 

프로젝트 build.gradle 보니 war이 아니라 jar이었습니다.

JAR 파일

- 독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 어플리케이션을 실행할 수 있습니다.

- Java 애플리케이션의 진입점인 main 메서드를 포함하고 있어 JVM에서 직접 실행하여 별도의 서버가 필요하지 않습니다.

 

WAR 파일

- Java 웹 애플리케이션을 패키징하는 데 최적화 되어 있고, 웹 구성 요소인 JSP, 서블릿, 리스너 등과 웹 어플리케이션을 실행하기 위한
서블릿 컨테이너에서 필요한 설정 파일, 라이브러리 등을 포함하여 한번에 배포를 할 수 있습니다.

 

원래 프로젝트의 application.properties에 가보면 jar로 되어 있습니다. 이제 배포를 하기 위해서 외부 톰캣을 사용할 것이기 때문에
war로 바꾸는 작업을 했습니다.

 

war는 활성화하고 jar는 비활성화를 했습니다.

 

 

그리고 외부 WAS에 WAR 파일을 배포할 때 Spring Boot 애플리케이션을 초기화하고 SpringApplicationBuilder를 사용해 ShoppingmallApplication 클래스를 메인 소스로 지정하여 이를 통해 웹 컨테이너가 Spring 콘텍스트를 자동으로 로드하고 실행하는 configure 메서드를 오버라이드 했습니다.

 

 

이렇게 한 후에 빌드를 해보면 war 파일이 생성된 것을 확인할 수 있습니다. jenkins에 올리기 전에 외부 톰캣을 활용해서 실행을 시켜

테스트를 진행을 했는데 또 404가 떴습니다.

 

 

war를 선택을 해서 서버를 실행시켜야 됩니다.

 

 

그리고 컴퓨터에 설치한 외부 톰캣 webapps에 자신의 프로젝트에서 생성된 war 파일을 붙여 넣으면 톰캣이 실행되면서 자동으로 파일 압축을 풉니다.

 

그리고 실행시켰는데 또 404가 뜹니다.

필요한 것들은 다 했고 WAR도 서버에 잘 올라가는데 404 에러 계속 떴습니다. 

구글링을 계속한 결과 스프링부트 버전이 높아서 tomcat도 버전을 맞춰서 올려야 한다는 블로그를 확인했습니다.

 

참고

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/3.5.7

 

저희 프로젝트 spring boot 버전이 높아서 10 버전을 사용해야 했고 저는 9 버전의 외부 톰캣을 사용하고 있었습니다.

그래서 404 에러가 떴고 10 버전을 다운 받아서 실행해 보니 잘 동작을 했습니다.

 

jenkins에 빌드를 전에 했을 때 외부 톰캣 10 버전으로 했는데 404가 떴습니다. 

 

궁금한 거: 외부 톰캣 버전을 10.1.xx 버전으로 해서 했더니 잘 동작했다. 근데 우리 jenkins에서도 톰캣버전이 10 버전인데 왜 이전에는 안되었을까?

jenkins 실행 성공이 되어야지 80 포트도 실행되는 게 아닌가?

-> war 생성 후 git에 올려서 jenkin에 올려 실행시켜야 하는데 전에는 war를 생성하지 않은 버전을 git에 올렸다

그렇기 때문에 톰캣 버전이 10 이어도 404가 떴었다.

 

 

gradle 썼기 때문에 꼭 구성에서 gradle 버전을 설치해줘야 합니다.

 

Jenkins를 사용하여 CI/CD 사용법을 익힐 수 있었습니다.

CI는 직속적 통합으로 코드 변경 시 자동 빌드와 테스트 진행으로 충돌 조기 발견을 하고 Git 같은 저장소에 주기적 병합으로 팀 협업을 강화할 수 있습니다.

CD는 지속적 제공 및 배포로

Continuous Delivery: 테스트 완료 후 수동 배포 승인과
Continuous Deployment: 모든 테스트 통과 시 자동 프로덕션 배포를 담당합니다.

 

 

이렇게 빌드시 충돌을 확인할 수 있어 매우 간편합니다. 만약 충돌 로그를 확인하고 싶다면 오른쪽 사진처럼 Console Output를 눌러

확인하면 됩니다.

'개발' 카테고리의 다른 글

멀티캠퍼스 [현대 이지웰] GitHub으로 협업하기!  (0) 2025.10.27