์„œ๋ฒ„ EC2 ์—์„œ Spring Boot Application ์ƒ์„ฑ


์„œ๋ฒ„ EC2 ๋กœ cer ์ธ์ฆ์„œ ์ด๋™

$ cd ์ธ์ฆ์„œ ์œ„์น˜
$ ssh -i key-quaritch.cer ubuntu@13.125.173.161

๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋” ์ƒ์„ฑ ํ›„ ํ”„๋กœ์ ํŠธ ํด๋” ๊ฐ€์ ธ์˜ค๊ธฐ

$ mkdir repository
$ cd repository
$ git clone https://github.com/meatsby/jwp-shopping-cart.git

DB EC2 ์— MySQL ์„ค์น˜


DB EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

  • ์ด๋ฆ„:ย ec2-ํฌ๋ฃจ1-ํฌ๋ฃจ2-db
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜: Uduntu
  • ์ธ์Šคํ„ด์Šค ์œ ํ˜•: t3.micro
  • ํ‚ค ํŽ˜์–ด: key-quaritch
  • ๋„คํŠธ์›Œํฌ ์„ค์ •
    • VPC:ย TECHCOURSE
    • ์„œ๋ธŒ๋„ท:ย TRAINING
    • ํผ๋ธ”๋ฆญ IP ์ž๋™ ํ• ๋‹น:ย ๋น„ํ™œ์„ฑํ™”
    • ๋ณด์•ˆ ๊ทธ๋ฃน:ย SG-DEFAULT-DB
  • ํƒœ๊ทธ:ย Key: Role, Value: student

์„œ๋ฒ„ EC2 ์—์„œ DB EC2 ๋กœ cer ์ธ์ฆ์„œ ์ด๋™ ํ›„ ์ ‘์†

$ scp -i key-quaritch.cer key-quaritch.cer ubuntu@13.125.173.161:/home/ubuntu
$ ssh -i key-quaritch.cer ubuntu@192.168.0.240

MySQL ์„ค์น˜

$ sudo apt install mysql-server

MySQL ์ ‘์†

$ sudo mysql -u root -p
Enter password:

MySQL ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ์„ค์ •

mysql> create user 'paritch'@'%' identified by 'password123!';
mysql> grant all privileges on *.* to 'paritch'@'%' with grant option;

์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž๋กœ MySQL ์žฌ์ ‘์†

mysql> exit;
$ sudo mysql -u paritch -p
Enter password: password123!

MySQL Database ์ƒ์„ฑ

mysql> create database paritch;

MySQL ์™ธ๋ถ€์ ‘์† ํ—ˆ์šฉ

// DB EC2 Uduntu ๋กœ ์ด๋™ ํ›„
$ cd /etc/mysql/mysql.conf.d
$ sudo vi mysqld.cnf
// bind-address ๋ฅผ 0.0.0.0 ์œผ๋กœ ์ˆ˜์ • ํ›„ :wq

MySQL ์žฌ์‹œ์ž‘

$ sudo service mysql restart

์„œ๋ฒ„ EC2 ์™€ DB EC2 ์—ฐ๊ฒฐ


build.gradle ์˜์กด์„ฑ ๋ณ€๊ฒฝ

$ cd repository/jwp-shopping-cart
$ vi build.gradle
 
// h2 ์˜์กด์„ฑ ์ œ๊ฑฐ ํ›„ mysql ์˜์กด์„ฑ ์ถ”๊ฐ€
implementation 'mysql:mysql-connector-java'

application.properties ์„ค์ • ๋ณ€๊ฒฝ

$ cd repository/jwp-shopping-cart/src/main/resources
$ vi application.properties
$ vi build.gradle
 
// h2 ์„ค์ • ์ œ๊ฑฐ ํ›„ mysql ์„ค์ • ์ถ”๊ฐ€
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.0.240:3306/paritch?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=paritch
spring.datasource.password=password123!

ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

$ cd jwp-shopping-cart
$ ./gradlew bootJar

๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ํ”„๋กœ์ ํŠธ ์‹คํ–‰

$ cd build/libs
$ java -jar jwp-shopping-cart-0.0.1-SNAPSHOT.jar &

๋ธŒ๋ผ์šฐ์ €์—์„œ ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ํ™•์ธํ•˜๊ธฐ

http://13.125.173.161:8080/api/products?page=1&limit=12

Shell Script ๋กœ ๋ฐฐํฌ ์ž๋™ํ™” ํ•˜๊ธฐ


#!/bin/bash
 
echo "> ํ˜„์žฌ ๊ตฌ๋™์ค‘์ธ application pid ํ™•์ธ"
 
CURRENT_PID=$(ps -ef | grep java | awk 'print $2')
 
echo "$CURRENT_PID"
 
if [ -z $CURRENT_PID ]; then
    echo "> ํ˜„์žฌ ๊ตฌ๋™์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
else
    echo ">kill -9 $CURRENT_PID"
    kill -9 $CURRENT_PID
    sleep 10
fi
 
echo "์ƒˆ application ๋ฐฐํฌ"
 
cd repository/jwp-shopping-cart/
git pull
./gradlew bootJar
 
cd build/libs/
nohup java -jar jwp-shopping-cart-0.0.1-SNAPSHOT.jar >> application.log 2> /dev/null &

References