Skip to main content

4-07. 개발과 서버 환경 분리

About 2 minJavaSpringAWScrashcoursejavajdkjdk8streamspringspringframeworkspringbootawsaws-ec2

4-07. 개발과 서버 환경 분리 관련


4-07. 개발과 서버 환경 분리

점프 투 스프링부트 - WikiDocs

pahkey/sbb3 - 4-07open in new window

SBB는 데이터베이스로 H2 데이터베이스를 사용한다. 그리고 개발 편의상 H2 데이터베이스의 사용자명은 sa 비밀번호는 빈값('')으로 설정하였다. 하지만 서버환경에서도 이처럼 사용하는 것은 위험하다. 왜냐하면 누구나 서버의 H2 데이터베이스 콘솔에 로그인 할수 있기 때문이다.

H2 대신 PostgreSQL 데이터베이스를 사용하는 방법에 대해서는 나중에 알아보자.

이번 장에서는 서버환경에서 H2 데이터베이스의 비밀번호를 설정하는 방법에 대해서 알아보자.


개발과 서버 환경 분리

H2 데이터베이스에 비밀번호를 설정하는 방법은 매우 간단하다. application.properties 파일의 다음 항목에 다음처럼 비밀번호를 설정하기만 하면 된다.

spring.datasource.password=1234

하지만 우리는 개발 편의를 위해 로컬 환경은 여전히 비밀번호 없이 사용하고 서버 환경에만 비밀번호를 설정하고자 한다.

어떻게 하면 될까?

스프링 부트는 시작옵션으로 다음과 같이 spring.profiles.active 항목을 전달할 수 있다.

java -Dspring.profiles.active=prod -jar sbb-0.0.1-SNAPSHOT.jar 

이처럼 -Dspring.profiles.active=prod 옵션을 주어 실행하면 스프링 부트는 application.properties 파일 대신 application-prod.properties을 사용한다. 즉 application-{profile}.properties와 같은 규칙을 따른다. 예를 들어 -Dspring.profiles.active=dev 옵션을 주어 실행할 경우에는 환경파일로 application-dev.properties 파일을 사용한다.


서버 환경 파일 작성하기

서버에서 사용할 application-prod.properties 파일을 다음과 같이 작성하자.

파일명: /sbb/src/main/resources/application-prod.properties

# DATABASE
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.web-allow-others=true
spring.datasource.url=jdbc:h2:~/local
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=1234

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true

.application.properties 파일을 복사하여 동일하게 application-prod.properties 파일을 생성하였다. 다만 spring.datasource.password에 비밀번호를 설정하고 외부에서 H2 콘솔에 접속이 가능하도록 spring.h2.console.settings.web-allow-others=true 설정을 추가해 주었다.

비밀번호는 1234 대신 다른 값으로 사용하자. 여기에서는 쉬운 설명을 위해 1234라는 값을 사용하였다.


빌드 버전 변경하여 배포파일 생성하기

그리고 build.gradle 파일의 빌드 버전도 다음처럼 변경해 주자.

파일명: /sbb/build.gradle

// (... 생략 ...)

group = 'com.mysite'
version = '0.0.2'
sourceCompatibility = '17'

// (... 생략 ...)

이와 같이 수정한 후 다음처럼 Gradle Task의 sbb를 선택하고 ["Run"]을 실행하여 배포파일을 새로 만들자.

[Gradle Task -> sbb -> Run]

그러면 다음과 같은 배포파일이 생성될 것이다.

workspace/sbb/build/libs/sbb-0.0.2.jar

이제 sbb-0.0.2.jar 파일을 파일질라를 사용하여 서버의 sbb 디렉터리에 업로드하자.


변경내용 서버에 적용하기

데이터베이스에 비밀번호를 설정했기 때문에 기존에 있던 데이터베이스 파일들을 모두 지워야 한다.

만약 기존의 데이터를 유지하고 싶다면 비밀번호를 설정하기 전에 H2 콘솔에 접속하여 비밀번호를 변경하는 쿼리를 수동으로 실행해야 한다. (예: ALTER USER sa SET PASSWORD '1234';)

다음처럼 기존의 데이터베이스 파일을 삭제하자.

ls
#
# local.mv.db  sbb
rm local.mv.db

그리고 서버의 start.sh 파일도 다음과 같이 수정하자.

파일명: /home/ubuntu/sbb/start.sh

#!/bin/bash

JAR=sbb-0.0.2.jar
LOG=/home/ubuntu/sbb/sbb.log

nohup java -Dspring.profiles.active=prod -jar $JAR > $LOG 2>&1 &

새로 업로드한 sbb-0.0.2.jar를 적용하고 -Dspring.profiles.active=prod 옵션을 주어 스프링부트가 실행되도록 설정했다. 이와 같이 수정하고 다음처럼 SBB 서비스를 재시작하자.

./stop.sh
#
# SBB stopped.
./start.sh

spring_profiles_active 환경변수 사용하기

-Dspring.profiles.active=prod 옵션 대신 spring_profiles_active 환경변수를 설정하는 방법도 있다. spring_profiles_active 환경 변수를 사용하려면 start.sh 을 다음과 같이 수정하자.

#!/bin/bash

JAR=sbb-0.0.2.jar
LOG=/home/ubuntu/sbb/sbb.log
export spring_profiles_active=prod

nohup java -Dspring.profiles.active=prod -jar $JAR > $LOG 2>&1 &

export 명령으로 spring_profiles_active 환경변수를 설정하고 기존의 옵션은 삭제한다.


서버 H2 콘솔 접속하기

이제 서버 콘솔에 접속하여 다음처럼 비밀번호 없이 접속을 시도해 보자.
이제 서버 콘솔에 접속하여 다음처럼 비밀번호 없이 접속을 시도해 보자.

JDBC URL명을 jdbc:h2:~/local로 설정하는 것도 잊지 말자. H2 콘솔은 디폴트로 jdbc:h2:~/test로 되어 있다.

위와 같이 비밀번호가 잘못되었다는 오류메시지를 확인할 수 있을 것이다. 위에서 서버 환경파일에 설정한 비밀번호를 입력하여 로그인을 다시 시도해 보자. 로그인이 잘 수행될 것이다.


이찬희 (MarkiiimarK)
Never Stop Learning.