백오피스 튜닝기 3

백오피스 튜닝기 3

개발일기

 

오늘 회사에 도착하자마자 어제 하던 일을 이어나갔다.

Spring-Boot을 사용하기 시작한 이후로 외장 톰캣을 전혀 쓰지 않아 생각보다 약간 헤맸다.

서버에 톰캣 9.0.54(최신 릴리즈 버전)를 설치한 후 백오피스를 war로 패키징 하기 위한 작업을 시작했다.

 

public class Application extends SpringBootServletInitializer {

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

 

외장 톰캣을 사용 할 것이므로 외장 톰캣의 web.xml에 애플리케이션 컨텍스트를 등록해줘야 한다.

외장 톰캣은 Servlet Container가 구동될 때 WEB-INF/에 존재하는 web.xml을 읽어 웹 애플리케이션을 구성해주기 때문이다.

Servlet 3.0부터는 SpringMVCWebApplicationInitializer 인터페이스를 구현하면 web.xml을 대체할 수 있게 됐는데, Spring-Boot에서 WebApplicationInitializer 인터페이스를 구현해놓은 콘크리트 클래스가 SpringBootServletInitializer이기 때문에 이 클래스를 상속받은 후 configure 메서드를 Override 하여 컨텍스트에 Spring-Boot의 Main 클래스를 등록시켜준다.

 

Configure the application. Normally all you would need to do is to add sources (e.g. config classes) because other settings have sensible defaults. You might choose (for instance) to add default command line arguments, or set an active Spring profile.

 

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder;
}

 

그리고 build.gradle을 수정해준다.

 

apply plugin: 'war'
bootWar.enabled = false
war.enabled = true


dependencies {

	...
    
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    
    ...
}

 

이후 단독 실행 가능한 bootWar가 아닌 war로 패키징하여 이를 서버 톰캣 디렉터리의 webapps에 올려주고 톰캣의 server.xml을 설정해준 후 service start를 해줬다.

 

문제의 상황

 

 

위는 개선 후의 이미지인데 문제가 됐던 URI들의 TTFB가 매우 큰 폭으로 개선됐다. (약 2~4초 -> 0.1초 내외)

 

실 체감속도도 크게 개선됐다.

크게 개선된 수준이 아니고 약간의 버벅거림조차 없는 클-린한 상태가 돼버렸다…😅

나도 버그를 고쳐야겠다는 생각만 했지 사실 이 정도까지 빨라질 거라고는 예상을 하지 못했기 때문에 매우 놀라웠다.

 

사실 방향만 보자면 Spring-Boot + war가 아닌 bootJar를 사용해야 맞는 것인데, ViewJSP이다 보니 war로 할 수밖에 없고, bootJar로 하자니 JSP를 전체 다 마이그레이션 해야만 하는 상황이라 어쩔 수 없는 상태였다.

고도화를 하기에는 너무 해야 할 작업이 많기 때문이다.

이는 차근차근 꾸준히 해 나가야 할 과제라고 생각한다.

 

어쨌든 당분간은 이상태로 쓰도록 하고 JSPJQuery

차근차근 ThymeleafVue.js로 마이그레이션 해나갈 계획이다.

 


© 2022. All rights reserved.