본문 바로가기

Backend Development/Spring boot

[Spring boot] Tomcat 배포 시 Path Rewrite 하기

웹 어플리케이션을 개발 시 외부 API Gateway 를 통해 웹 어플리케이션 Launch가 되는 경우가 많이 있다. 이런 경우에 본인의 어플리케이션을 구분하기 위해 앞단에서 특정 path가 삽입되는 경우가 많이 있다. 

 

예기치 않게 중간에 path가 삽입되면 application 입장에서는 url path 처리를 하기 위해 Front end단 수정이 가해질 수 밖에 없다.

 

이런 경우에 Tomcat path rewrite 기능을 통해 해당 path를 제거해 주면 최초 만들어진 url 로 app을 동작 시킬 수 있게 된다.

 

Tomcat rewrite.config 작성

 

apache-tomcat-9.0.65\conf\Catalina\localhost\rewrite.config

RewriteCond %{REQUEST_URI} ^/test.*$
RewriteRule /test(.*) http://localhost:8080$1 [R]


위 config를 간략히 정리하면 RewriteCond 조건에 맞으면 아래 RewriteRule을 실행하라는 의미이다.

REQUUEST_URI는 보통 host_name 이후에 오는 url을 포함하게 된다. 예) localhost:8080/api/test -> :8080/api/test가 넘어옴.

 

RewriteRUle의 (.*) 부분은 앞의 패턴 뒤에 해당하는 부분으로 최종적으로 우측의 모습으로 변경하라는 의미이다. 우측의 $1 부분이 왼쪽 /test(.*) 부분에서 /test ($0), 이후 부분을 $1로 받게 된다. 

 

결론적으로 위 config는 /test/~ 로 들어오는 uri를 /~ 로 test를 제거하고 url을 rewrite 한다는 의미가 된다.

 

좀더 구체적인 설정방법에 대해서는 아래 Tomcat Document를 참고하도록 한다.

 

Tomcat page document

https://tomcat.apache.org/tomcat-9.0-doc/rewrite.html

 

 

Url Test 웹페이지

그리고 Url 변형 규칙을 매번 Tomcat 설정으로 확인하기에는 시간이 오래 걸리니 아래 Util page를 참고하면 편하다. 아래 웹 페이지에서 위 Rewite config를 입력후 입력 URL을 넣어보면 config 어느부분이 Hit되었고 최종적으로 어떤 Url로 변경되는지 페이지에서 바로 알 수 있어서 편하다.

 

https://htaccess.madewithlove.com

 

Tomcat 나머지 설정

 

apache-tomcat-9.0.65_sdp\conf\server.xml

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

...

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
        // 아래 RewriteValve를 추가해 준다.       
		<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

      </Host>

 

이렇게 해서 Tomcat에 wepapp을 배포하고 url path에 /test로 시작하도록 입력해도 tomcat에서 /test path를 삭제해 버리고 url 요청이 들어가게 됨을 볼 수 있다.

 

-- The End --