티스토리 뷰

728x90
반응형

지난 글까지 작성한 앱의 API 문서를 만들었다.

 

2022.09.14 - [개발/Spring] - [Spring]API Documentation - Spring REST Docs

2022.09.14 - [개발/Spring] - [Spring]Controller Slice Test에 Spring REST Docs 적용

2022.09.14 - [개발/Spring] - [Spring]Snippet과 Template을 이용한 API 문서화

2022.09.15 - [개발/Spring] - [Spring]AsciiDoc, Asciidoctor

 

[Spring]AsciiDoc, Asciidoctor

아스키독(AsciiDoc)은 플레인 텍스트 마크업 언어를 사용하는 사람이 읽을 수 있는 문서 포맷이다. 플레인 텍스트(Plain Text) - 그래픽이나 그림을 제외한 문자열 마크업 언어(Markup Language) - 태그 등

gnidinger.tistory.com

 

이번 글에선 작성한 앱을 빌드하고 실행하는 순서에 대해 알아본다.

 

Build a Project

 

여태까지 작성한 샘플 애플리케이션은 Gradle 기반 프로젝트이므로 Gradle을 이용한 빌드를 살펴본다.

 

IntelliJ IDE

 

직전 글에도 봤듯이 인텔리제이를 이용한 앱 빌드는 굉장히 간단하다.

 

Spring Boot에서 지원하는 Gradle 빌드 툴을 이용하면 되는데,

 

위 그림의 bootJar 혹은 build를 더블클릭하면 끝난다.

 

빌드가 끝나고 나면 위 그림과 같이 Jar 파일이 생성된 것을 확인할 수 있다.

 

build vs. bootJar

 

루트 폴더에서 다음과 같은 명령어를 입력하면 둘 사이의 관계를 쉽게 파악할 수 있다.

% ./gradlew build -dry-run

:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:bootJarMainClassName SKIPPED
:compileTestJava SKIPPED
:processTestResources SKIPPED
:testClasses SKIPPED
:test SKIPPED
:asciidoctor SKIPPED
:copyDocument SKIPPED
:bootJar SKIPPED
:jar SKIPPED
:assemble SKIPPED
:check SKIPPED
:build SKIPPED

가장 간단하게 말하자면 위 메시지처럼 build는 bootJar를 포함하는 Task이다.

 

조금 구체적으로는 build를 실행하면 Gradle의 빌드와 관련된 모든 Task를 실행하고 plain Jar 파일을 추가로 생성하며

 

bootJar를 실행하면 실행 가능한 Jar(Executable Jar)파일을 생성하기 위한 Task만 실행한다.

 

단순히 실행 파일을 얻기 위한 목적이라면 bootJar Task를 실행하면 된다.

 

Gradle Task

 

계속해서 CLI를 이용해 프로젝트를 빌드하는 방법에 대해 알아보자.

 

만약 사용하는 맥북에 gradle이 설치되지 않았다면 먼저 설치를 진행한다.

$ brew install gradle

이어서 프로젝트 루트 디렉토리에서 터미널을 열고 아래의 명령어 중 하나를 입력한다.

gnidinger-build % ./gradlew build
gnidinger-build % ./gradlew bootJar

빌드가 종료되고 build/libs 경로에 Jar 파일이 생성되는 것을 확인할 수 있다.

 

Run a Application

 

여기까지 왔다면 애플리케이션 실행은 굉장히 단순하다.

 

Jar 파일이 위치한 경로로 이동해서 아래와 같이 입력하면 된다.

libs % java -jar gnidinger-build-0.0.1-SNAPSHOT.jar

성공적으로 실행되는 것을 확인할 수 있다.

 

Configure Profiles

 

지금까지 작성한 애플리케이션은 테스트의 편의성을 위해 H2 인메모리 DB를 사용하고 있다.

 

하지만 당연하게도 서버 환경에서 앱을 운영하려면 휘발성이 있는 인메모리 DB를 사용하면 안 될 것이다.

 

이런 경우를 위해 Spring에서는 프로파일(Profile)이라는 기능을 제공하는데,

 

이는 빌드가 끝난 앱에 실행 환경에 따라 설정 정보를 다르게 적용할 수 있는 기능이다.

 

하나씩 알아보자.

 

먼저 위 그림처럼 리소스 폴더에 두 개의 .yml 파일을 추가한다.

 

이후에 기존 application.yml에 있던 내용을 application-local.yml로 옮기고

 

나머지 두 문서를 비운다.

// 비어있는 application.yml
// 실행 환경에 관계없는 공통 설정을 입력한다.
// 서버 환경에서 사용하는 설정파일인 application-server.yml
// 비어있는 상태
// application-local.yml

spring:
  h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: jdbc:h2:mem:test
  jpa:
    hibernate:
      ddl-auto: create  # (1) 스키마 자동 생성
    show-sql: true      # (2) SQL 쿼리 출력
    properties:
      hibernate:
        format_sql: true  # (3) SQL pretty print
  sql:
    init:
      data-locations: classpath*:db/h2/data.sql
logging:
  level:
    org:
      springframework:
        orm:
          jpa: DEBUG
server:
  servlet:
    encoding:
      force-response: true

위와 같이 설정하고 앱을 실행시키면 이제 H2 웹 콘솔(http://localhost:8080/h2)에 접속할 수 없다.

 

공통 프로파일인 application.yml에 관련 설정이 없기 때문인데,

 

앱 실행시 로컬 환경의 프로파일을 적용하면 해결된다.

 

 

먼저 위와 같이 구성 편집 창을 열고

 

위와 같이 환경 변수에

--spring.profiles.active==local

을 입력해주면 된다.

 

active 뒤에 붙은 'local'은 앞서 application-local.yml의 파일에 들어있던 'local' 프로파일명을 가리킨다.

 

또한 CLI 환경에서는 아래와 같이 입력하면 된다.

$ java -jar gnidinger-build-0.0.1-SNAPSHOT.jar --spring.profiles.active=local

위와 같이 설정 후 애플리케이션을 실행하면 로컬 환경에 맞게 실행되는 것을 쉽게 확인할 수 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함