์ด์ ๊ธ์์๋ EC2 ์๋ฒ์์ ์ง์ ๊นํ๋ธ ํ๋ก์ ํธ๋ฅผ clone๋ฐ๊ณ ์ง์ ์คํํด ๋ณด์๋๋ฐ์, ์ฌ์ค ์ด๋ฌํ ๋ฐฉ๋ฒ์ ํตํด์ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค๋ฉด ์ฌ๋ฌ ๊ท์ฐฎ์ ์ํฉ์ด ๋ฐ์ํ ๊ฒ์ ๋๋ค.
์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด์ ๋ ํฌ์งํ ๋ฆฌ์ ์ปค๋ฐ์ ํ๋ค๊ณ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ EC2 ์ธ์คํด์ค์ ์ ๊ทผํ์ฌ ๋ณ๊ฒฝ๋ ์ฌํญ์ PULL ๋ฐ์์ผ ํฉ๋๋ค.
PULL ์ ๋ฐ์ ์ดํ์๋ ์ด๋ฅผ ๋น๋ํ๊ณ , ๊ธฐ์กด์ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃ์ํค๊ณ , ์๋กญ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ๋์์ผ ํฉ๋๋ค.
์ฆ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ง ๋ ๋ง๋ค ํด์ผ ํ๋ ๊ท์ฐฎ์ ๋ฐ๋ณต ์์ ๋ค์ด ๋๋ฌด ๋ง์ต๋๋ค.
๊ทธ๋์ ์ด๋ฌํ ๋ฐ๋ณต ์์ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ์๋ํ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ง ์ด๋ ํ ์์๋ก ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง๊น?
์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ธฐ ์ ์, ์ฐ์ ๋ฐฐํฌ๊ฐ ์ด๋ ํ ์์๋ก ์ด๋ฃจ์ด์ง์ง ์๊ฐํด ๋ณด์์ผ ํฉ๋๋ค.
์ ๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋ฐฐํฌ๋ฅผ ์งํํ ๊ฒ ๊ฐ์ต๋๋ค.
- ํ๋ก์ ํธ๋ฅผ ์์น์ํฌ ํน์ ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.
- git pull ๋ช ๋ น์ด๋ฅผ ํตํด ์ต์ ํ์ผ์ ๊ฐ์ ธ์ต๋๋ค.
- gradle๋ก ๋น๋๋ฅผ ์คํํฉ๋๋ค.
- ์ด๋ฏธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ์ค์ด๋ผ๋ฉด ์ด๋ฅผ ์ข ๋ฃํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋๋ฐ ํ์ํ ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ ํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค.
๐ง ๋จ๊ณ๋ณ๋ก ์คํฌ๋ฆฝํธ ์์ฑํ๊ธฐ
์ฐ์ ์ ์คํฌ๋ฆฝํธ ํ์ผ์ ์์ฑํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
touch [์ ์คํฌ๋ฆฝํธ ์ด๋ฆ]
์์๋ ์๋์ ๊ฐ์ต๋๋ค.
touch bapo.sh
(bapo-test๋ ์ด์ ๊ธ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ธ ๋ ์์ฑ๋์์ผ๋ฏ๋ก ๋ฌด์ํ์๊ณ ๋์ด๊ฐ์๋ฉด ๋ฉ๋๋ค.)
(์ ๊ฑฐํด ์ฃผ์ ๋ ์๊ด์์ต๋๋ค!)
๐ฑ 1. ํ๋ก์ ํธ๋ฅผ ์์น์ํฌ ํน์ ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
ํน์ ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , ํด๋น ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ต์ด ํ๋ฒ๋ง ์งํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ์คํฌ๋ฆฝํธ์๋ ์์ฑํ์ง ์๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ํฌ๊ฐ ๋์ด EC2 ์๋ฒ์์ ํ ๋๋ ํ ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
pwd ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ๊ณ , /home/ubuntu๋ค์.
ํ๋ก์ ํธ๋ฅผ ์์น์ํฌ ๊ฒฝ๋ก๋ ๋ง์๋๋ก ์ง์ ํด์ฃผ์๋ฉด ๋์ง๋ง, ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๋ก์ ์์น์ํค๋๋ก ํ๊ฒ ์ต๋๋ค.
/home/ubuntu/mallang-projects/{ํ๋ก์ ํธ ์ด๋ฆ}
ํ ๋๋ ํ ๋ฆฌ์ธ /home/ubuntu/๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์กด์ฌํ์ง๋ง, ์ ๊ฐ ์์๋ก ์ง์ ํ mallang-projects๋ผ๋ ๋๋ ํ ๋ฆฌ๋ ์์ง ์กด์ฌํ์ง ์์ต๋๋ค.
mkdir ๋ช ๋ น์ด๋ฅผ ํตํด์ ์ด๋ฅผ ์์ฑํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
mkdir [๋๋ ํ ๋ฆฌ ์ด๋ฆ]
mkdir mallang-projects
๐ฑ 2. ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.
์ด์ ๋ถํฐ ์ ์คํฌ๋ฆฝํธ์ ์์ฑ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
cd ๋ช ๋ น์ด๋ฅผ ํตํด์ /home/ubuntu/mallang-projects/ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด ์ฃผ๊ฒ ์ต๋๋ค.
cd [์ด๋ํ ๊ฒฝ๋ก]
cd /home/ubuntu/mallang-projects/
์ด๋ฅผ ์ ์คํฌ๋ฆฝํธ๋ก ์์ฑํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โ๏ธ bapo.sh
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
echo "\n ๐ณ [$PROJECT_PATH] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH
./bapo.sh ๋ฅผ ํตํด ํ๋ฒ ์คํํด ๋ณผ๊น์?
์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด bapo.sh๋ฅผ ์คํ์ํฌ ๊ถํ์ ์ค ์ ์์ต๋๋ค.
chmod +x ./bapo.sh
์ดํ ๋ค์ ./bapo.sh๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ํ๋์ง ํ์ธํ ์ ์์ง๋ง, ์ผ๋จ ์์ธ๋ ์์ผ๋ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
(์ฌ์ค ์ฑ๊ณตํ๊ฑฐ ๋ง์ต๋๋ค.)
๐ฑ 3. git pull ๋ช ๋ น์ด๋ฅผ ํตํด ์ต์ ํ์ผ์ ๊ฐ์ ธ์ต๋๋ค.
๋ฐฉ๊ธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฒ์ ์์ฑํ๊ธฐ ๋๋ฌธ์, mallang-project ๋๋ ํ ๋ฆฌ ๋ด๋ถ์๋ ์์ง ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค.
๋ ํฌ์ง๋ก๋ฆฌ๋ฅผ cloneํ๋ ๊ณผ์ ์ ์๋ฒ๋ฅผ ๋ง๋ค๊ณ ์ต์ด 1ํ๋ง ํ์ํ๊ธฐ ๋๋ฌธ์, ์ด ์ญ์๋ ์คํฌ๋ฆฝํธ์๋ ๋ฐ๋ก ์ ์ด์ฃผ์ง ์๊ณ ์๋์ผ๋ก ์งํํ๊ฒ ์ต๋๋ค.
git clone [๋ ํฌ์งํ ๋ฆฌ ์ฃผ์]
https://github.com/shin-mallang/bapo-test.git
(์ธ์ฆ์ด ํ์ํ๋ค๋ฉด ์ด์ ๊ธ์์ ๋ง๋ ํ ํฐ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ๋ง์ฝ ํ ํฐ์ ์์ด๋จน์ผ์ จ๋ค๋ฉด ๋ค์ ๋ง๋ค์ด์ฃผ์ธ์!)
์ด์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์กด์ฌํ๋ฏ๋ก, ์์ผ๋ก๋ git pull๋ก ์ต์ ๋ฒ์ ์ ํ์ผ๋ง์ ๊ฐ์ ธ์ค๋ฉด ๋ฉ๋๋ค.
์ด๋ฅผ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โ๏ธ bapo.sh
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
PROJECT_NAME=bapo-test
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
์์ฑ๋ ์ ์คํฌ๋ฆฝํธ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์์์๋ถํฐ ์ถ๊ฐ๋ ๋ถ๋ถ์ ํ์ธํ๋๋ก ํ๊ฒ ์ต๋๋ค.
PROJECT_NAME=bapo-test
ํ๋ก์ ํธ์ ์ด๋ฆ์ธ bapo-test๋ฅผ ๋ณ์๋ก ์ถ์ถํ์ต๋๋ค.
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
๊ธฐ์กด์๋ $PROJECT_PATH๋ก๋ง ์ด๋ํ์ง๋ง, ํ๋ก์ ํธ๋ค์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ์์ ๋ฐฐํฌํ ํน์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ผ ํ๋ฏ๋ก ์ถ๊ฐ์ ์ผ๋ก ์์ฑํด ์ฃผ์์ต๋๋ค.
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
git pull์ ํตํด ๊นํ๋ธ ๋ ํฌ์งํ ๋ฆฌ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์์ต๋๋ค.
์ด๋ฅผ ํ๋ฒ ์คํํด๋ณผ๊น์?
์ ๋ง ๊ทธ๋ฐ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์๊พธ ๋ก๊ทธ์ธ ํ๋ผ๊ณ ํ๋ ํ๋์ ๋ก๊ทธ์ธ ์ํ๊ฒ ์ค์ ์ข ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
(์๋ง public repository๋ผ๋ฉด ์ด๋ฐ ๊ณผ์ ์ด ํ์ ์์๊ฑฐ์์)
ํด๊ฒฐ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์.
git config --global credential.helper store
์์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ , ํ๋ฒ๋ง ๋ ์ธ์ฆ์ ์งํํ๋ฉด ๋์ด์ ์ธ์ฆ์ ์งํํ์ง ์์๋ ๋ฉ๋๋ค.
๐ฑ 4. gradle๋ก ๋น๋๋ฅผ ์คํํฉ๋๋ค.
์ด์ ๋น๋๋ฅผ ์คํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
./gradlew clean build
gradlew๋ gradle์ด ์ค์น๋์ง ์์ ํ๊ฒฝ์์๋ ์คํํ ์ ์๋๋ก ํด์ฃผ๋ ๋ฌด์ธ๊ฐ..? ์ ๋๋ค.
(๊ด๋ จ ๋งํฌ - Gradle Wrapper)
clean build๋ฅผ ํตํด ๊ธฐ์กด์ build ๊ณผ์ ์์ ์๊ธด ํ์ผ๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๊ณ , ์๋กญ๊ฒ build๋ฅผ ์งํํ๋๋ก ํด์ค๋๋ค.
์ ์คํฌ๋ฆฝํธ์๋ ๊ทธ๋๋ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
โ๏ธ bapo.sh
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
PROJECT_NAME=bapo-test
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
echo " ๐ณ ํ๋ก์ ํธ๋ฅผ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค.\n"
./gradlew clean build
์์ฑ๋ ์ ์คํฌ๋ฆฝํธ๋ ์์ ๊ฐ์ต๋๋ค.
ํ๋ฒ ์คํํด๋ณผ๊น์?
์ ์คํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
/build/libs ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ฉด ์์ฑ๋ jar ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค.
(์ ์ฒด ๊ฒฝ๋ก๋ /home/ubuntu/mallang-projects/bapo-test/build/libs ์ ๋๋ค.)
๐ฑ 5. ์ด๋ฏธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ์ค์ด๋ผ๋ฉด ์ด๋ฅผ ์ข ๋ฃํฉ๋๋ค.
์ด์ ๊ธ์ ๋ง์ง๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค.
ํฌํธ๋ฒํธ 8080๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ์์ต๋๋ค.
lsof -i :8080 -t | xargs kill -15
์ด๋ฅผ ํญ์ ๋ชจ๋ ์คํํ๋ ๊ฒ์ด ์๋๋ผ, 8080 ํฌํธ๋ฅผ ์ฌ์ฉ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋๋ง ์ด๋ฅผ ์ง์ธ ์ ์๋๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค.
โ๏ธ bapo.sh
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
PROJECT_NAME=bapo-test
PORT=8080
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
echo " ๐ณ ํ๋ก์ ํธ๋ฅผ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค.\n"
./gradlew clean build
echo " ๐ณ [$PORT] ๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐพ์ต๋๋ค...\n"
PID=$(lsof -i :$PORT -t)
if [ -z $PID ]; then
echo " ๐ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ๊ณง๋ฐ๋ก ์คํํฉ๋๋ค.\n"
else
echo " โ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ์ด๋ฅผ ์ข
๋ฃํฉ๋๋ค. [PID = $PID]\n"
kill -15 $PID
fi
์๋ก ์์ฑ๋ ๋ถ๋ถ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
PORT=8080
์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํธ๋ฒํธ๋ฅผ ๋ณ์๋ก ์ถ์ถํ์์ต๋๋ค.
echo " ๐ณ [$PORT] ๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐพ์ต๋๋ค...\n"
PID=$(lsof -i :$PORT -t)
ํน์ ํฌํธ๋ฒํธ(8080)๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค์ PID๋ฅผ ์ฐพ์ PID ๋ณ์์ ์ ์ฅํฉ๋๋ค.
if [ -z $PID ]; then
echo " ๐ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ๊ณง๋ฐ๋ก ์คํํฉ๋๋ค.\n"
else
echo " โ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ์ด๋ฅผ ์ข
๋ฃํฉ๋๋ค. [PID = $PID]\n"
kill -15 $PID
fi
[ -z $PID ]๋ PID ๋ณ์๊ฐ ๋น์ด์๋์ง ์๋์ง๋ฅผ ํ์ธํ๋ ๊ตฌ๋ฌธ์ ๋๋ค.
์ฆ 8080 ํฌํธ๋ฅผ ์ฌ์ฉํ๋ PID ๊ฐ ์๋ค๋ฉด ์ด๋ true๊ฐ ๋ ๊ฒ์ด๊ณ , ์๋ค๋ฉด false๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋ง์ฝ 8080 ํฌํธ๋ฅผ ์ฌ์ฉํ๋ PID๊ฐ ์๋ค๋ฉด ์ด๋ฅผ ์ข ๋ฃํด์ผ ํ๋ฏ๋ก kill -15 ๋ฅผ ํตํด์ ์์ ํ๊ฒ ์ข ๋ฃ์ํต๋๋ค.
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ๋)
(์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ๋)
๐ฑ 6. ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋๋ฐ ํ์ํ ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ ํฉ๋๋ค.
์ฝ๋์์ ํ๊ฒฝ๋ณ์๋ฅผ ํ์๋ก ํ๋ ์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด, ํ๋ก์ ํธ์ ๋ค์๊ณผ ๊ฐ์ ํ์ผ๋ค์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
โ๏ธ application.yml
my-env:
first: ${FIRST_MALLANG_ENV}
second: ${SECOND_MALLANG_ENV}
โ๏ธ HelloController
@RestController
public class HelloController {
@Value("${my-env.first}")
private String first;
@Value("${my-env.second}")
private Integer second;
@GetMapping("/hello")
String ping() {
return String.format(
"์๋
! ์ค์ ๋ ์ ๋ณด๋ FIRST = [%s], SECOND= [%d] !",
first,
second);
}
}
ํด๋น ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ repository์ push ํฉ๋๋ค.
์ด์ EC2๋ก ๋์๊ฐ์ FIRST_MALLANG_ENV์ SECOND_MALLANG_ENV ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ ํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋๋ก ํด์ฃผ๊ฒ ์ต๋๋ค.
๋ฆฌ๋ ์ค์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
export ํ๊ฒฝ๋ณ์๋ช =๊ฐ
export FIRST_MALLANG_ENV="mallang1"
export SECOND_MALLANG_ENV=1234
์ด๋ฅผ ์ ์คํฌ๋ฆฝํธ์ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
PROJECT_NAME=bapo-test
PORT=8080
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
echo " ๐ณ ํ๋ก์ ํธ๋ฅผ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค.\n"
./gradlew clean build
echo " ๐ณ [$PORT] ๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐพ์ต๋๋ค...\n"
PID=$(lsof -i :$PORT -t)
if [ -z $PID ]; then
echo " ๐ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ๊ณง๋ฐ๋ก ์คํํฉ๋๋ค.\n"
else
echo " โ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ์ด๋ฅผ ์ข
๋ฃํฉ๋๋ค. [PID = $PID]\n"
kill -15 $PID
fi
echo " ๐ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋๋ฐ ํ์ํ ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ
ํฉ๋๋ค.\n"
export FIRST_MALLANG_ENV="mallang1"
export SECOND_MALLANG_ENV=1234
๐ฑ 7. ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค.
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์คํํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค.
nohup java -jar [jarํ์ผ ์ด๋ฆ(๊ฒฝ๋ก ํฌํจ)].jar &
nohup java -jar /home/ubuntu/mallang-projects/bapo-test/build/libs/jwp-shopping-order.jar &
์ด๋ jar ํ์ผ์ ๋ํด์ ์กฐ๊ธ ๋ ๋ถํดํด์ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
/home/ubuntu/mallang-projects/bapo-test/build/libs/jwp-shopping-order.jar
- /home/ubuntu/mallang-projects : PROJECT_PATH๋ก ์ค์ ํ์ต๋๋ค.
- bapo-test : PROJECT_NAME์ผ๋ก ์ค์ ํ์ต๋๋ค.
- build/libs : ๋น๋ ํ JAR ํ์ผ์ด ์์ฑ๋๋ ๊ฒฝ๋ก์ ๋๋ค.
- jwp-shopping-order.jar : JAR ํ์ผ์ ์ด๋ฆ์ ๋๋ค.
์ด๋ค์ ๋ฐ์ํด์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
โ๏ธ bapo.sh
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
PROJECT_NAME=bapo-test
PORT=8080
BUILD_PATH=build/libs
JAR_NAME=jwp-shopping-order.jar
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
echo " ๐ณ ํ๋ก์ ํธ๋ฅผ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค.\n"
./gradlew clean build
echo " ๐ณ [$PORT] ๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐพ์ต๋๋ค...\n"
PID=$(lsof -i :$PORT -t)
if [ -z $PID ]; then
echo " ๐ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ๊ณง๋ฐ๋ก ์คํํฉ๋๋ค.\n"
else
echo " โ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ์ด๋ฅผ ์ข
๋ฃํฉ๋๋ค. [PID = $PID]\n"
kill -15 $PID
fi
echo " ๐ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋๋ฐ ํ์ํ ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ
ํฉ๋๋ค.\n"
export FIRST_MALLANG_ENV="mallang1"
export SECOND_MALLANG_ENV=1234
echo " ๐ ์ ํ๋ฆฌ์ผ์ด์
์คํํฉ๋๋ค~ ๐\n"
nohup java -jar $PROJECT_PATH/$PROJECT_NAME/$BUILD_PATH/$JAR_NAME &
์ถ๊ฐ๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
BUILD_PATH=build/libs
JAR_NAME=jwp-shopping-order.jar
๋น๋์ ์๊ธด JAR ํ์ผ์ ๊ฒฝ๋ก์, ์์ฑ๋ JAR ํ์ผ์ ์ด๋ฆ์ ๋ณ์๋ก ์ถ์ถํ์์ต๋๋ค.
echo " ๐ ์ ํ๋ฆฌ์ผ์ด์
์คํํฉ๋๋ค~ ๐\n"
nohup java -jar $PROJECT_PATH/$PROJECT_NAME/$BUILD_PATH/$JAR_NAME &
๋น๋๋ JAR ํ์ผ์ ์คํํ๋ ์ฝ๋์ ๋๋ค.
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๊ฒฝ๋ณ์๊ฐ ์ ์ธํ ๋์๋์ง๋ ํ์ธํ๊ฒ ์ต๋๋ค.
์ ์ค์ ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๐ง ๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ ํด์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ์๋์ผ๋ก ๋ฐฐํฌํ๋ ์์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋๋ก ๋ง๋ค์์ต๋๋ค.
์ด์ ์ ๋นํด ๋ง์ด ํธํด์ง ๊ฒ ๊ฐ์ง๋ง, ์๋ก์ด ๊ธฐ๋ฅ์ด ๊ฐ๋ฐ๋ ๋ ๋ง๋ค ์ด๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด์ EC2์ ๋ค์ด์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์กฐ์ฐจ ๊ท์ฐฎ์ ์ ์์ต๋๋ค.
๊ทธ๋์ ์กฐ๋ง๊ฐ, ๋ฉ์ธ ๋ธ๋์น์ ์ฝ๋๊ฐ ๋จธ์ง๋๋ ์๊ฐ ์ด๋ฌํ ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ์๋์ผ๋ก ์คํ๋๋๋ก CI/CD ๋ฅผ ์ ์ฉํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
(๋ค์ ํฌ์คํ ์์ ๋ฐ๋ก๋ ์๋๊ณ , MYSQL ์ฐ๊ฒฐ & git submodule ์ ์ฉ ์ดํ์ ์งํํ ์์ ์ ๋๋ค.)