Skip to main content

4-07. ๊ฐœ๋ฐœ๊ณผ ์„œ๋ฒ„ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

2023๋…„ 12์›” 27์ผAbout 2 minJavaSpringAWScrashcoursejavajdkjdk8streamspringspringframeworkspringbootawsaws-ec2

4-07. ๊ฐœ๋ฐœ๊ณผ ์„œ๋ฒ„ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ ๊ด€๋ จ


4-07. ๊ฐœ๋ฐœ๊ณผ ์„œ๋ฒ„ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

์ ํ”„ ํˆฌ ์Šคํ”„๋ง๋ถ€ํŠธ - WikiDocs

pahkey/sbb3 - 4-07

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๋กœ ๋˜์–ด ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์œ„์—์„œ ์„œ๋ฒ„ ํ™˜๊ฒฝํŒŒ์ผ์— ์„ค์ •ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธ์„ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณด์ž. ๋กœ๊ทธ์ธ์ด ์ž˜ ์ˆ˜ํ–‰๋  ๊ฒƒ์ด๋‹ค.