티스토리 뷰

정확히는 AWS EC2에서 뿐만아니라 Tomcat을 베이스 이미지로 생성한 Docker 컨테이너에 war 파일을 배포할 때 발생하는 문제이다.

 

배포는 에러없이 진행된다. 그러나 서버로 요청을 날리면 404가 발생한다.

 

localhost_access_log에는 요청이 제대로 들어오는 것이 확인 됐고, contextpath도 정상적으로 지정했는데도 말이다.

 

해결방안

프로젝트 파일을 jar로 묶어서 배포하면된다.

 

 

 

 

 

 

 

 

 

 

 

문제가 저것 뿐이고, 해결방안이 저것 뿐이면 따로 포스팅하진 않았을 것 같다.

 

왜 404가 나는지 문제를 알아보면, war파일로 배포를 진행하게 되면 별도의 web.xml이 생성되지 않는다.

 

그래서 web.xml이 하는 대표적인 역할인 

URL 경로와 해당 경로의 요청을 처리하는 서블릿 사이의 매핑을 정의

 

를 할 수 없게 되어,

 

애플리케이션의 진입점인 기본 클래스를 제대로 감지하고 실행하지 못함 + Servlet 컨텍스트를 제대로 구성하지 못해 모든 요청에 404 에러가 나게 되는 것이다.

 

그래서 기존의  web.xml이 하던 역할을 하는 부분을 만들어주면 된다.

 

서버를 기동하는 Application.java 에서 SpringBootServletInitializer 을 상속받고 configure를 오버라이드한 매서드를 작성하면 된다.

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(Application.class);
	}

}

이렇게 하면, 서블릿 컨테이너가 정상적으로 초기화되어 HTTP 요청을 정상적으로 처리할 수 있게 된다.

 

이 외에도 404 에러가 자주 발생하여, 내가 경험 했던 것들을 추가적으로 몇 개를 더 작성해봤다.

 

 

1. port 매핑을 정상적으로 했는지 확인해야 한다.

웹 서버의 포트를 변경 하기 위해 application.properties 에 아래와 같이 작성했다.

server.port = 8081

이렇게만 작성하고, 도커를 아래와 같이 실행할 경우

docker run -d -p [HOST PORT]:8081 [IMGAE NAME]

요청을 정상적으로 받을 수 없다.

 

이는 Tomat의 설정은 default인 8080을 유지하고 있기 때문이다.

 

web.xml의 port를 변경해주어야 한다.

 

위처럼 Docker에 접속해 Tomcat의 web.xml에 접근 한 후 설정을 변경하여 재시작해야 입력 port가 정상적으로 변경된다.

 

2. context path 설정을 잘해주어야 한다.

Docker Tomcat에서는 context path가 webapps 아래의 폴더 이름으로 변경된다. 만약 contextpath를 "/"로 지정하고 싶다면 폴더 이름을 ROOT로 변경하고 도커를 재시작한다.

 

위처럼 설정하면 context path가 /로 변경된다.

 

 

 

명심해야할 것은 Spring boot에 내장된 tomcat을 이용하는 것이 아니라는 것이다.

 

때문에 대부분의 설정은 Docker Tomcat의 설정을 변경해 주어야 정상적으로 반영된다는 것을 명심해서 작업하자

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함