image

오늘은 섹션 마지막날이다.
벌써 3달째를 달리고 있는 부트캠프

확실히 혼자 공부하는 것보다 가이드라인이 제시되니
스텝바이스텝으로 성장하는 모습이 눈에 보이니

만족스러운 나날을 보내고 있다.
그럼에도 아직 새발의 피 정도만 공부했기에
오늘도 공부를 시작해보자


오늘은 애플리케이션 빌드하는 법을 알아보려한다.
실제로 나중에 서버에 배포를 해야하기에 ..

애플리케이션 빌드/실행

우리는 여태까지 IntelliJ IDE의 도움을 받아서
빌드를 진행했었다.

IDE를 사용하지않고 로컬 환경이 아닌 서버환경에서 실행
가능하게 하려면 Gradle이나 Maven같은 빌드 툴을 이용해서 Spring Boot
기반의 애플리케이션 소스 코드를 빌드하는 기본적인 방법을 알고있어야한다.

우선 IDE를 이용해 빌드하는 방법을 알아보자
(우리가 만든 프로젝트는 Gradle이다)


빌드

1). IDE를 통한 build

image

내가 만든 프로젝트 이름 -> Task -> bootJar or build 를
더블 클릭해서 빌드해줄 수 있다.

image

빌드가 완료되면 Jar 파일이 생기는데
여기서 plain.jar 파일은 build task를 실행하면 생기는 파일이다.
우리는 실행 가능한 Jar 파일인 plain이 안붙은 파일을 실행시키면 된다.


2). 터미널로 build

첫번째로 Gradle이 설치되어 있는지 확인해보자

gradle -v

만약에 버젼이 안뜨고 zsh: command not found: gradle
찾을 수 없다고 한다면, homebrew를 통해 gradle을 다운 받는다.

brew install gradle
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/17/manifests/17.0.5
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:0e2244e35a350256474b6eb6e03d11af5c0270ab7ca4e6bc71
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:0e2244e35a350256474b6eb6e03d11af5c0270
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gradle/manifests/7.5.1_1
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gradle/blobs/sha256:b8a590221ce177514ddff10c925b892ee856b9a23cc28dc623124b
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:b8a590221ce177514ddff10c925b892ee856b9
######################################################################## 100.0%
==> Installing dependencies for gradle: openjdk@17
==> Installing gradle dependency: openjdk@17
==> Pouring openjdk@17--17.0.5.arm64_monterey.bottle.tar.gz
🍺  /opt/homebrew/Cellar/openjdk@17/17.0.5: 642 files, 307MB
==> Installing gradle
==> Pouring gradle--7.5.1_1.all.bottle.tar.gz
🍺  /opt/homebrew/Cellar/gradle/7.5.1_1: 11,340 files, 276.1MB
==> Running `brew cleanup gradle`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> `brew cleanup` has not been run in the last 30 days, running now...

이렇게 다운 받고 난뒤에 다시
버젼을 체크해보면 설치된 모습을 확인해 볼 수 있다.


이제 Gradle이 설치되었으니
우리가 만든 애플리케이션 폴더에 들어가서
아래와 같이 빌드 명령어를 입력해 주면 빌드가 되어진다.

./gradlew build

zsh: permission denied: ./gradlew
만약 명령어 입력시 위에처럼 권한 문제가 발생한다면

gradlew의 권한을 644 -> 755로 변경해주어야한다.

ll
-rwxr-xr-x   1 ljh  staff   7.9K 11 15 10:44 gradlew

현재 경로에서를 ll을 입력하여 권한 상태를 확인할 수 있다.
ls -l 을 입력하여도 확인이 가능하다

rwx : 7
r-x : 5
r-x : 5
와 같이 권한을 변경해주어야 하며

chmod 755 gradlew

권한 변경 명령어인 chmod로 권한을 변경해주면

./gradlew build

명령어가 정상적으로 빌드되어지는 모습을 확인할 수 있다.

빌드가 되어지면 위에 IDE를 통해 빌드했던 것 처럼
build > libs 폴더에 .jar 파일이 생기는 것을 확인할 수 있다.


실행

터미널로 Jar 파일 실행시키기

java -jar section3-week3-template-build-0.0.1-SNAPSHOT.jar

기본적으로 .jar파일을 실행시키려면
java -jar을 입력후 파일이름을 넣어주면
애플리케이션이 IDE에서 실행되는 것 처럼 실행되는 모습을
터미널에서 확인할 수 있다.


프로파일(Profile) 적용

프로파일 적용이란.
우리는 로컬환경에서 테스트하기위해 H2 DataBase를 주로 사용해왔다.
하지만 서버에 배포하거나 실제 애플리케이션을 적용하는 DataBase는
다른 DataBase가 올 수 있다. 그렇자고 기존에 설정한 H2 관련
데이터를 서버에 올릴때 일일이 지워서 하기에는 불편함이 있어
동시에 사용할 수 있도록 Spring에서는 프로파일(Profile)이라는 기능을 제공해준다.

image

우선 .yml 파일을 분리해주어야한다.

application.yml
application-local.yml
application-server.yml

이렇게 세개로 분리해주었고 기존에 빌드시 사용하는 yml 파일은
application.yml 파일이다. 해당 파일에는 아무런 코드도 넣지 않았고

우리는 애플리케이션을 실행할 때 설정에 따라 local.yml, server.yml로
변경해가면서 사용이 가능하다.

local.yml -> h2 정보
server.yml -> mysql 정보
나는 위와 같이 등록해놓고 사용하였다.

mysql을 사용한다고 가정하고 설정을 진행해보자

1). yml 설정 변경

spring:
  profiles:
    active: server

application.yml 파일에 위와 같이 설정해주면 된다.


2). 구성 편집

image

IDE의 구성 편집에서도 수정할 수 있다.
애플리케이션을 선택 후

--spring.profiles.active=server

위와 같이 입력해주면 된다.


설정을 끝냈으면 이제 .jar 파일을 실행시키면 된다.
기존과 동일하게 실행 시키는데 뒤에
–spring.profiles.active=server 를 추가해주고 실행시키면된다.

java -jar section3-week3-homework-build-0.0.1-SNAPSHOT.jar --spring.profiles.active=server

image

실행 시킬 경우

The following 1 profile is active: "server"

위와 같은 profile 문구가 발생한다면
정상적으로 연결이 되어졌다는걸 확인할 수 있다.


오늘 만난 ERROR

오늘 만난 에러중 dataSource 관련 에러가 발생했었다.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource 
[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception 
is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' 
threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: com.mysql.cj.jdbc.Driver

해당 내용은 의존라이브러리가 제대로 추가되어있지 않아
읽어오지 못하는 현상 같았고

mysql 과 연동하기 때문에 msql 의존라이브러리를 추가하였고

// mysql 의존라이브러리 추가
runtimeOnly 'mysql:mysql-connector-java'

의존 라이브러리 추가후

image

위와 같이 라이브러리 패키지가 생기면
해당 오류는 해결이 가능할 것 이다.


오늘은 이렇게 터미널로 build 하는 법과 execution 하는
방법을 알아 보았다. 아마도 나중에 서버에 이런식으로
애플리케이션을 실행 시켜놓고 운영하는게 아닐까? 라는 생각을 해본다.

오늘 공부도 여기서 끝 !!


오늘의 커피량: ☕️ ☕️ ☕️
오늘의 점심: 김치찌개, 김밥