본문 바로가기
IT/기타

chapter 18,19. 모니터링 및 배포하기 (책. Spring in Action)

by eddie_factory 2022. 4. 16.
반응형

JMX로 스프링 모니터링하기

JMX이란? Java Management Extensions로 MBeans(managed beans)을 통해자바 애플리케이션을 모니터링하고 관리하는 표준 방법을 말함.

 

jconsole을 사용하면 현재 실행중인 스프링 부트 애플리케이션의 액추에이터 엔드포인트 MBeans을 연결해 확인할 수 있다.

jconsole의 Mbeans탭

management.endpoints.jmx.exposure.include와  exclude 설정을 통해 MBeans에 노출되는 엔드포인트를 선택할 수 있다.

 

 

19. 스프링 배포하기

19.1 배포옵션

  • STS 나 IntelliJ IDEA 등의 IDE 에서 애플리케이션을 빌드하고 실행한다.
  • 메이븐 spring:run이나 그래들 bootRun 태스크를 사용하여 명령행에서 애플리케이션을 빌드하고 실행한다.
  • 메이븐이나 그래들을 사용해서 실행 가능한 JAR 파일(명령행에서 실행되거나 클라우드에 배포될 수 있음)을 생성한다.
  • 메이븐이나 그래들을 사용해서 WAR파일(자바 애플리케이션 서버에 배포될 수 있음)을 생성한다.

자바 애플리케이션서버에 배포하기 : 톰켓, 웹스피어, 웹로직 등 다른 자바 애플리케이션 서버에 배포하려면 WAR파일로 빌드해야 한다.

클라우드에 배포하기 : 클라우드 파운드리, AWS, Azure, 구글 클라우드 플랫폼 등에 배포한다면 JAR로 빌드하는 것이 이상적인 선택이다.

 

19.2 WAR파일 빌드하고 배포하기

WAR파일을 생성하기 위해 우선, 스프링의 DispatcherServlet을 구성해야한다. web.xml파일을 사용해서 처리할 수도 있고,  스프링 부트의 경우 SpringBootServletInitializer를 사용해 할 수 있다. SpringBootServletInitializer를 사용 하려면 이것의 서브클래스를 생성하고 configure()메서드를 오버라이딩하여 스프링 구성 클래스를 지정해야 한다.

public class IngredientServiceServletInitializer
extends SpringBootServletInitializer {
    
    @Override
    protected SpringApplicationBuilder configure(
    SpringApplicationBuilder builder) {
		return builder.sources(IngredientServiceApplication.class);
  	}
}

서블릿 초기화 클래스를 지정 후 프로젝트 빌드를 변경해야한다. 메이븐일 경우 pom.xml 파일의 <packaging> 요소를 war로 설정하면 된다.

<packaging>war</packaging>
$ mvnw package

그래들의 경우는 build.gradle 파일에 war 플러그인만 추가하면 된다.

apply plugin: 'war'
$ gradlew build

빌드가 완료되면 WAR파일이 build/libs 디렉터리에에 생성된다. 

 

마이크로 서비스의 경우 대부분 클라우드에서 배포를 진행하므로 JAR로 배포하는것이 이상적이다.

 

도커 컨테이너에서 스프링부트 실행하기

도커는 AWS, Azure, 구글 클라우드 등  서로 다른 많은 클라우드 환경에서 애플리케이션 배포를 위한 표준으로 자리잡았다.

책에서는 Spotify 메이븐 플러그인을 사용해 스프링부트 빌드 결과를 더 쉽게 도커 컨테이너로 생성 할 수 있다고 소개한다. 우선 pom.xml에 플러그인을 추가한다.

<build>
    <plugins>
    ...
    <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-file-maven-plugin</artifactId>
    <version>1.4.3</version>
    <configuration>
        <repository>
             ${docker.image.prefix}/${project.artifactId}
        </repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
    </plugin>
    </plugin>
</build>

<configuration>에 도커 이미지 생성에 필요한 속성들을 설정한다.

메이븐 빌드 명세에 제공한 정보 외의 다른 모든 도커 이미지 정보는 Dockerfile이라는 이름의 파일에 정의된다.

 

application.yml 파일의 설정을 통해 docker 프로파일이 활성화 될 떄 스프링 데이터가 데이터베이스를 연결하도록 구성할 수도 있다.

spring:
   profiles: docker
   data: 
   mongodb:
      host: mongo

이렇게 하면 도커 컨테이너가 시작되는 즉시 mongo 호스트가 다른 컨테이너에서 실행 중인 몽고 데이터베이스로 연결된다.

도커 이미지를 빌드할 준비가 되면 메이븐 래퍼를 사용해서 package와 dockerfile:build를 실행시켜 JAR 파일을 빌드하면 도커 이미지가 생성된다.

mvnw package dockerfile:build

이후  docker images 명령을 통해  생성된 이미지를 검사 후  running하면 된다.

 

반응형

댓글