티스토리 뷰
지난 글까지 작성한 앱의 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
이번 글에선 작성한 앱을 빌드하고 실행하는 순서에 대해 알아본다.
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
위와 같이 설정 후 애플리케이션을 실행하면 로컬 환경에 맞게 실행되는 것을 쉽게 확인할 수 있다.
'Java+Spring > Spring' 카테고리의 다른 글
[Spring]Spring Security - 권한 부여(Authorization) 구조 (2) | 2022.09.22 |
---|---|
[Spring]Spring Security - 인증(Authentication) 구조 (0) | 2022.09.22 |
[Spring]Spring Security (7) | 2022.09.21 |
[Spring]zsh: permission denied: ./gradlew (0) | 2022.09.16 |
[Spring]AsciiDoc, Asciidoctor (0) | 2022.09.15 |
[Spring]Snippet과 Template을 이용한 API 문서화 (0) | 2022.09.14 |
- Total
- Today
- Yesterday
- spring
- 맛집
- 칼이사
- Algorithm
- 세계여행
- BOJ
- 야경
- RX100M5
- 면접 준비
- 지지
- a6000
- 리스트
- 중남미
- 알고리즘
- 유럽여행
- 유럽
- 여행
- 세계일주
- 백준
- 동적계획법
- Python
- 기술면접
- 세모
- 남미
- 자바
- 스프링
- 파이썬
- Backjoon
- 스트림
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |