Java&Web

[Apache] Apache와 Springboot 연동하기(mod_jk)

프로그래민 2020. 12. 24. 20:23
반응형

[WEB] Apache와 Tomcat 연동하기

 

[WEB] Apache와 Tomcat 연동하기

[Network] Web Server와 WAS [Network] Web Server와 WAS Web Server란? 개념 하드웨어적 의미로는 Web Server가 설치되어 있는 컴퓨터 소프트웨어적 의미로는 클라이언트의 요청을 받아 정적 컨텐츠(image, html,..

minkwon4.tistory.com

 

Apache와 Springboot 연동(mod_jk)

Web Server로써 Apache를 Springboot의 내장 Tomcat과 연동하는 작업을 앞서 정리한 글의 mod_jk 방식을 사용하여 다음과 같은 과정을 거쳐 진행해 보았다.

일단 Springboot에서 다음과 같은 설정 파일들을 작성해주었다.

application.properties 값 설정

1
2
3
tomcat.ajp.protocol=AJP/1.3
tomcat.ajp.port=8001
tomcat.ajp.enabled=true
                                                                                                                          

 

ContainerConfig class 생성

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
@Configuration
public class ContainerConfig {
    @Value("${tomcat.ajp.protocol}")
    String ajpProtocol;
 
    @Value("${tomcat.ajp.port}")
    int ajpPort;
 
    @Bean
    public ServletWebServerFactory servletContainer() {
 
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createAjpConnector());
 
        return tomcat;
    }
 
    private Connector createAjpConnector() {
        Connector ajpConnector = new Connector(ajpProtocol);
        ajpConnector.setPort(ajpPort);
        ajpConnector.setSecure(false);
        ajpConnector.setAllowTrace(false);
        ajpConnector.setScheme("http");
        ((AbstractAjpProtocol<?>)ajpConnector.getProtocolHandler()).setSecretRequired(false);
        return ajpConnector;
    }
}
                       

 

그 후 서버쪽으로 Springboot를 build 및 배포를 해주었고, Server에서 아래와 같은 설정을 해주었다. (Apache와 mod_jk의 설치과정은 생략)

httpd.conf 수정

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
vi apache/conf/httpd.conf
 
 
# mod_js.so 위치
LoadModule jk_module modules/mod_jk.so
 
# mod_jk.c 설정
<IfModule mod_jk.c>
# 다음과 같은 경로는 tomcat으로 연결
JKMount /* tomcat
JKMount /*.jsp tomcat
JkMount /jkmanager/* jkstatus
 
JkMountCopy All
<Location /jkmanager/>
        JkMount jkstatus
        Require ip 127.0.0.1
</Location>
 
# workers.properties 위치
JkWorkersFile "apache/conf/workers.properties"
# 로스 위치
JkLogFile "| apache/bin/rotatelogs -l apache/mod_jk.log.%y%m%d 86400 "
# 로그 레벨
JkLogLevel error
# 로그 포멧
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkShmFile  "apache/mod_jk.shm"
#JkRequestLogFormat     "%w %V %T"
</IfModule>
                                                     

 

workers.properties 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi apache/conf/workers.properties
 
 
worker.list=tomcat
 
worker.tomcat.type=ajp13
worker.tomcat.host=127.0.0.1
worker.tomcat.port=8001
worker.tomcat.retries=1
 
worker.tomcat.socket_timeout=10
worker.tomcat.connection_pool_timeout=10
 
worker.list=jkstatus
worker.jkstatus.type=status
                                                                                                      

 

이러한 설정을 해준 후 Apache를 실행시킨 후 Server를 실행시킨다면 다음과 같은 연동원리로 작동하게 된다.

  1. 클라이언트는 Apache에 접속(80포트)
  2. 만일 클라이언트의 요청이 Tomcat에서 처리하도록 지정된 요청이라면 Apache는 Tomcat의 AJP포트(8001포트)에 접속하여 요청을 전달
  3. Tomcat은 Apache로 부터 받은 요청을 처리하고 Apache에게 응답
  4. Apache는 Tomcat에게 받은 응답을 클라이언트에 전달

결론적으로 Apache는 80번 포트를 사용하고, Springboot는 8080번(기본값) 포트를 사용한다. 그리고 이 둘은 mod_jk 설정에서 지정해놓은 AJP 8001번 포트를 이용하여 서로 통신을 하는 방식이다.

 

출처
joswlv.github.io/2019/01/03/Apache_SpringBoot/
careydevelopment.us/2017/06/19/run-spring-boot-apache-web-server-front-end/
반응형

'Java&Web' 카테고리의 다른 글

[Logging] Springboot에 Log4j2 설정하기  (0) 2020.12.29
[Logging] slf4j, log4j, logback, log4j2  (0) 2020.12.29
[JUnit] JUnit이란  (0) 2020.12.18
[Apache] Apache와 Tomcat 연동하기  (0) 2020.12.17
[WEB] Web Server와 WAS  (0) 2020.12.17