์ค๋์ AWS EC2์ ์ฐ๋ถํฌ ์๋ฒ + ์ ํจ์ค (Jenkins)๋ฅผ ํตํ ์๋ฒ ๋ฐฐํฌ๋ฅผ ๋งก์์ ํ์๊ณ , ๊ณผ์ ๋ค์ ์ ๋ฆฌํด์ ๋จ๊ฒจ ๋ณผ๋ ค๊ณ ํฉ๋๋ค.
๋ฐฐํฌ์๋ CI / CD ๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ฒ ๋๋๋ฐ, ์ด๋ถ๋ถ์ ๋ํด์๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐฐํฌ๋ฅผ ํ๋๋ฐ ์์ด ์๋ง์ ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ด ์กด์ฌํ๊ณ , ๊ทธ๋ฌํ ๋ฐฉ๋ฒ๋ค์ ๋ค๋ฃฌ ๋ธ๋ก๊ทธ๋ค์ด ์ฆ๋นํด ์์ต๋๋ค.
์ด๋ฒ์ ์ ๊ฐ ํ๋ ๋ฐฉ๋ฒ๋ ์๋ง์ ๋ฐฉ๋ฒ๋ค ์ค ํ๋ ์ผ ๊ฒ ์ ๋๋ค.
AWS ๋ก๊ทธ์ธ ํ ์์ ์ ๊ณ์ ์ผํธ์ ์ํ๋ ์ง์ญ์ ์ค์ ํ ์ ์์ต๋๋ค.
EC2๋ ๊ฐ๋จํ ๋งํ์ฌ AWS์์ ์ ๊ณตํด์ฃผ๋ (๋์ ์ง๋ถํด์ผํจ) ์๋ฌด๊ฒ๋ ๊น๋ ค ์์ง ์์ ์ปดํจํฐ ํ๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ec2๋ฅผ ๊ฒ์ํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ๋ก ๋์จ ec2๋ฅผ ํด๋ฆญํ์ฌ ํ์ด์ง๋ฅผ ์ด๋ํฉ๋๋ค.
ํ์ด์ง๋ฅผ ์ด๋ํ๊ฒ ๋๋ฉด ์ธ์คํด์ค ์์ ๋ฒํผ์ด ์์ผ๋ฉฐ, ์ธ์คํด์ค ์์ ๋ฒํผ์ ๋๋ฌ ์ค๋๋ค.
์ธ์คํด์ค์ ์ด๋ฆ์ ์ง์ด์ง์ ์์ผ๋ฉฐ, ๋ณธ์ธ์ด ์ํ๋ ์ด๋ฆ์ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธํ ์ธ์คํด์ค์์ ์ฌ์ฉํ OS๋ฅผ ์ง์ ํด์ค๋๋ค.
์ฌ๊ธฐ์๋ Ubuntu๋ฅผ ์ฌ์ฉ ํ์์ต๋๋ค.
์ธ์คํด์ค ์ ํ์ ์ ํํ ์ ์์ผ๋ฉฐ, nano > micro > small > ๋ฑ๋ฑ ์์ผ๋ก RAM ์ ์ฉ๋์ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ, RAM ์ฉ๋์ด ํด์๋ก ๋น์ฉ์ด ๋น์ธ ์ง๊ฒ ๋ฉ๋๋ค.
EC2๋ฅผ ์์ฑํ ๋ ํคํ์ด๋ ์ค์ํ๋ฉฐ, EC2๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ด์ ๋ผ๊ณ ์๊ฐ ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ์ ๋ง๋ค์๋ ํคํ์ด๊ฐ ์๋ค๋ฉด, ์ ํค ํ์ด ์์ฑ ๋ฒํผ์ ๋๋ฌ ํคํ์ด๋ฅผ ์์ฑ ํด์ค์ผ ํฉ๋๋ค.
.pem ํ์์ผ๋ก ํค ํ์ด๋ฅผ ๋ง๋ค์ด ์ฃผ์์ผ๋ฉฐ, ์์ฑ๋ ํคํ์ด๋ ์ ์ ์ฅํด์ ์ฌ์ฉ ํด์ผ ํฉ๋๋ค.
๋ณด์๊ทธ๋ฃน์ ์ค์ ํ ์ ์์ผ๋ฉฐ, ๊ธฐ์กด์ ๋ง๋ค์ด ๋์ ๋ณด์ ๊ทธ๋ฃน์ด ์๋ค๋ฉด, ๋ณด์ ๊ทธ๋ฃน ์์ฑ์ ์ฒดํฌ ํ ์ธ์คํด์ค ์์ฑ์ ๋๋ฅด๊ฒ ๋๋ฉด EC2 ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.
๋ณด์๊ทธ๋ฃน์ด๋ ์ด๋
PORT๋ฒํธ๋ฅผ ์ ์์ ํ๋ฝ ํ ๊ฒ ์ธ์ง ์ง์ ํ๋ ๊ทธ๋ฃน ์ ๋๋ค.
ํ๋ ฅ์ IP ๋ ?
EC2 ์ธ์คํด์ค๋ฅผ ์ฌ๋ถํ ์, ํผ๋ธ๋ฆญ IP๊ฐ ๊ณ์ ๋ณ๊ฒฝ๋๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ์ ์ ํ๋ ฅ์ IP๋ฅผ ํตํด ๊ณ ์ ์ ์ธ IP์ฃผ์๋ฅผ ๋ถ์ฌ ํ ์ ์์ต๋๋ค.
์ผ์ชฝ ๋ฉ๋ด๋ฐ์ ๋คํธ์ํฌ ๋ฐ ๋ณด์ -> ํ๋ ฅ์ IP๋ฅผ ํด๋ฆญ ํฉ๋๋ค.
ํ๋ ฅ์ IP ์ฃผ์ ํ ๋น ๋ฒํผ์ ๋๋ฌ ์ค๋๋ค.
๋ง๋ค์๋ ์ธ์คํด์ค๋ฅผ ๋ฑ๋กํ์ฌ ์ฐ๊ฒฐ ๋ฒํผ์ ๋๋ฌ์ฃผ๊ฒ ๋๋ฉด ๋ง๋ค์๋ EC2 ์ธ์คํด์ค์ ํ๋ ฅ์ IP๊ฐ ๋ถ์ฌ ๋ ๊ฒ์ ์์ ์์ต๋๋ค.
I AM ์ด๋ ?
ํน์ ์ฌ์ฉ์๋, ์๋น์ค์๋ง ๊ถํ์ ๋ถ์ฌํ์ฌ ์ ๊ทผ์ ์ ์ด ํ ์ ์์ต๋๋ค.
(Spring Security์ ๋น์ทํ๋ค๊ณ ๋๋)
I AM์ ํด๋ฆญํ์ฌ ๋ค์ด๊ฐ๋๋ค.
์ญํ ํญ์ ํด๋ฆญํ์ฌ ๋ค์ด๊ฐ๋๋ค.
์ญํ ์์ฑ ํญ์ ํด๋ฆญํ์ฌ ๋ค์ด๊ฐ๋๋ค.
์ฌ์ง๊ณผ ๊ฐ์ด AWS ์๋น์ค์ EC2 ์๋น์ค๋ฅผ ์ ํํ์ฌ ๋ค์์ผ๋ก ๋์ด ๊ฐ๋๋ค.
S3 ๋ฒํท์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ถํ์ ์ถ๊ฐ ํฉ๋๋ค.
ํธํ ์ด๋ฆ์ ์์ฑํ๊ณ I AM ์ ์์ฑ ํฉ๋๋ค.
์ธ์คํด์ค EC2์ I AM์ ์ฐ๊ฒฐํด ์ฃผ๋ ์์ ์ ๋๋ค.
๋ฐฉ๊ธ ๋ง๋ค์๋ I AM ์ญํ ์ ์ค์ ํ ๋ค I AM ์ญํ ์ ๋ฐ์ดํธ๋ฅผ ๋๋ฌ ๋ถ์ฌ ํฉ๋๋ค.
ssh ๋ ?
์ฌ์ฉ์ (์ฐ๋ฆฌ)๊ฐ ์๊ฒฉ์ผ๋ก ์ ์ํ๊ธฐ ์ํ ํ๋กํ ์ฝ ์ ๋๋ค.
(๋ค์ํ Tool๋ก ์ ์ํ ์ ์๊ฒ ์ง๋ง,Git Bash๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ ์์ )
๋ฐฉ๊ธ ๋ง๋ค์๋ Ec2 ์ธ์คํด์ค์ ์ ์ํ์ฌ ์ฐ๊ฒฐ ๋ฒํผ์ ๋๋ฅด๊ณ ์ด๋ ํฉ๋๋ค.
์ฐ๊ฒฐ ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋จ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์น๋ Git Bash ๋ฅผ ์คํ ํฉ๋๋ค. (Git Bash ์ค์น๋ ๋ค๋ฃจ์ง ์์ ์์ )
๊ทธํ
์ : ssh ~ ์ ํ๋กํ ์ฝ์ ๋ณต์ฌํ์ฌ Git Bash์ ๋ถ์ฌ ๋ฃ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ด Ubuntu ์๋ฒ์ ์ ์ ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์กฐ๊ธ ์ ์ ssh ํ๋กํ ์ฝ๋ก ์ ์ํ Ubuntu ์๋ฒ์ ์ ์ ํ
sudo apt-get update
sudo apt-get upgrade -y
๋๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ต์ ๋ฒ์ ์ผ๋ก update ํด์ค๋๋ค.
์ฐ๋ถํฌ์ Docker ๋ฅผ ์ค์นํ๋ ์ด์ ?
๋ฐฐํฌ์ ์ฉ์ด์ฑ๊ณผ, ํ๊ฒฝ ์ค์ ์ ๋ํ ์ผ๊ด์ฑ์ ์ ์ง ํ ์ ์๊ฒ ๋ฉ๋๋ค.
์๋์ ๋๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Docker ๋ฅผ ์ค์น ํ ์ ์์ต๋๋ค.
sudo apt-get update
sudo apt-get install docker.io
์ค์น๊ฐ ๋๋ ํ docker --version ์ ํตํด ์ค์น๋ ๋์ปค์ ๋ฒ์ ์ ํ์ธ ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ช
๋ น์ด ์์ sudo๋ฅผ ๋ถ์ด์ง ์์ ๋ช
๋ น์ด๋ฅผ ์ธ์์ ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
sudo usermod -aG docker ubuntu ํด๋น ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ
Docker ์๋ฒ์์ sudo ๊ถํ์ ์๋ตํ์ฌ ๋ช
๋ น์ด๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค. (๋ช
๋ น์ด๋ฅผ ์คํํ Ubuntu ์๋ฒ๋ฅผ ํ๋ฒ exit ํ๊ณ ๋ค์ ๋ค์ด์์ผ ๋จ)
์๋์ ๋ช
๋ น์ด๋ฅผ ํตํด Jenkins ์ด๋ฏธ์ง๋ฅผ ๋ค์ด ๋ฐ์์ ์์ต๋๋ค.
docker pull jenkins/jenkins:lts
์ด๋ฏธ์ง๋ฅผ ๋ค์ด ํ Jenkins๋ฅผ ์คํ ํฉ๋๋ค.
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
์ด๋ EC2 ์ธ์คํด์ค์ ๋ณด์ ๊ทธ๋ฃน์์ 8080 ํฌํธ๋ฅผ ์ด์ด ๋์ผ ํฉ๋๋ค.
๋ง๋ค์๋ ์ธ์คํด์ค์ ์ธ๋ฐ์ด๋ ๊ท์น -> ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง ๋ฒํผ์ ๋๋ฆ
๋งจ ์๋์ ๊ท์น ์ถ๊ฐ ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ฉด ๊ท์น์ ํธ์ง ํ ์ ์์ผ๋ฉฐ, ์๋์ ๊ฐ์ด ์์ฑํ๊ณ ์ ์ฅ์ ํฉ๋๋ค.
AWS EC2 ์ธ์คํด์ค ์์ฑ๊ณผ ํ๋ ฅ์ IP ์ค์ , I AM ์ค์ , Ubuntu ์๋ฒ์ ๋์ปค์ Jenkins ์ค์น๋ฅผ ๋ค๋ค์ต๋๋ค.
๋ค์ ๋ธ๋ก๊ทธ์์๋ Jenkins์ ์ ์ํ์ฌ ๋ค๋ฃจ๋ ๊ฒ์ ๋ค๋ฃฐ ์์ ์ ๋๋ค.