๋ชฉ์ฐจ
AWS EC2 (Elastic Compute Cloud)
์ปดํจํฐ๋ฅผ ๋น๋ ค์ ์๊ฒฉ์ผ๋ก ์ ์ํด ์ฌ์ฉํ๋ ์๋น์ค
EC2 = ํ๋์ ์ปดํจํฐ์
๋ฐฐํฌ: ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ด ์ธํฐ๋ท์ ํตํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ
local host ์ฃผ์๋ก ํ ์คํธ ๊ฐ๋ฐํ๋ ๊ฒ์ , ๋ค๋ฅธ ์ปดํจํฐ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํจ
๋ฐฐํฌ๋ฅผ ํ๋ฉด ๊ณ ์ ์ ์ฃผ์๋ฅผ ๋ฐ๊ฒ ๋จ
๋ด ์ปดํจํฐ๋ก ์๋ฒ๋ฅผ ๋ฐฐํฌํ๋ฉด 24์๊ฐ ์ผ๋์ผํ๋๋ฐ โ ๋ณด์, ๋ฒ๊ฑฐ๋ก์ ๋ฑ
EC2 ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ (์ฃผ๋ก ๋ฐฑ์๋ ์๋ฒ ๋ฐฐํฌ)
Region (๋ฆฌ์ )
๋ก๊ทธ์ธ โ EC2 ์ ์ โ ์์ชฝ ๋ฆฌ์ ์ ํ
๋ฆฌ์ ์ด๋ ์ธํ๋ผ๋ฅผ ์ง๋ฆฌ์ ์ผ๋ก ๋๋์ด ๋ฐฐํฌํ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ
์ปดํจํฐ๋ค์ด ์์นํ ์์น๋ฅผ ๋ฆฌ์ ์ด๋ผ๊ณ ๋งํ๋ค.
- ๋ค์ํ ๋ฆฌ์ ์ ๋ณด์
- ๋ฆฌ์ ์ ๊ณ ์ ํ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์
- ๋ฆฌ์ ๋ง๋ค EC2 ๊ฐ ๋ฐ๋ก ๊ด๋ฆฌ๋จ
๋คํธ์ํฌ๋ก ํต์ ์ ํ๋๋ฐ, ์ฌ์ฉ์-์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ปดํจํฐ๊ฐ ๋ฉ์๋ก ๋๋ ค์ง.
๊ฐ๊น์ด ๋ฆฌ์ ์ ์ ํํ๋ ๊ฒ์ด ์ ๋ฆฌ !
ํ๊ตญ ์ ์ ๋ค์ด ์ฃผ๋ก ์ฌ์ฉํ๋ ์๋น์ค๋ฉด ์์์ ํํ์(์์ธ๋ก) ์ ํ
์ธ์คํด์ค
ec2 ์์ ๋น๋ฆฌ๋ ์ปดํจํฐ 1๋ ํ๋์ ๋จ์
1 ์ธ์คํด์ค = 1 ์ปดํจํฐ
- ํผ๋ธ๋ฆญ IPv4 ์ฃผ์ : ์ธ์คํด์ค ์ IP ์ฃผ์
- ์ธ์คํด์ค ์ํ :์ธ์คํด์ค ์ปดํจํฐ๊ฐ ์ผ์ ธ์๋ค๋ ๋ป
- ์ธ์คํด์ค ์ค์ง : ์ปดํจํฐ ์ข ๋ฃ ๋๋
- ์ธ์คํด์ค ์ข ๋ฃ :(์ฃผ์) ์ธ์คํด์ค ์ญ์ ํ๋ ์๋ฏธ์ด๋ค.
๋ณด์๊ทธ๋ฃน Security Group
๋ณด์๊ทธ๋ฃน์ EC2 ์ธ์คํด์ค๋ฅผ ๊ฐ์ธ๊ณ ์๋ ์ธํ๋ฆฌ ๊ฐ์ ๋ณด์ ๊ฐ๋
- ์ธ๋ฐ์ด๋ ํธ๋ํฝ(์ธ๋ถ โ EC2 ์ธ์คํด์ค)
- ์์๋ฐ์ด๋ ํธ๋ํฝ (EC2 ์ธ์คํด์ค โ ์ธ๋ถ)
- IP ๋ฒ์, Port ํฌํธ ์ค์ ํ ์ ์์
- 0.0.0.0/0 : ๋ชจ๋ IP ํ์ฉํ๊ฒ ๋ค
์คํ ๋ฆฌ์ง
์ ์ฅ๊ณต๊ฐ EBS (Elastic Block Storage) , EC2 ์์ ํ๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ
ํ๋ ฅ์ IP
EC2 ์ธ์คํด์ค๋ ์์ IP ํ ๋น์ ๋ฐ๋๋ฐ, ์ค์ง-์คํ ๋๋ง๋ค IP ๊ฐ ๋ฐ๋
(IP ๊ฐ์๊ฐ ๋ชจ์๋ผ์ ์์๋ก ํ ๋นํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ๋จ)
๊ณ ์ IP ๋ฅผ ์ป๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
EC2 ์ Spring boot ์๋ฒ ๋ฐฐํฌ
์ธ์คํด์ค ์ด๋ฆ : ์๋น์ค๋ช (๊ตฌ๋ถํ ์ ์๋)
OS : ์ ํ ์ฃผ๋ก ubuntu (windows, macOs ๋ ์ฉ๋,์ฑ๋ฅ ์ด์)
์ธ์คํด์ค ์ ํ : ์ปดํจํฐ ์ฌ์
ํค ํ์ด : EC2 ์ ์ํ๋ ๋น๋ฐ๋ฒํธ , (ํค ์ด๋ฆ ์ง์ , ์ง๊ด์ ์ผ๋ก ์์๋ณผ์์๋๋ก, ํค ํ์ด ์์ฑ ํ ์์ฑ๋ ํคํ์ผ์ ์ ๊ฐ์ง๊ณ ์๋๋ค. )
๋คํธ์ํฌ ์ค์ : ๋ณด์๊ทธ๋ฃน์์ฑ / ๋ณด์๊ทธ๋ฃน์ด๋ฆ ์ง์ / SSH ์ HTTP 80๋ฒ ํฌํธ๋ก ์ถ๊ฐํ๊ธฐ (์์น๋ฌด๊ด)
์คํ ๋ฆฌ์ง ๊ตฌ์ฑ : 30๊ธฐ๊ฐ, gp3 ๋ณผ๋ฅจ์ ํ
์ธ์คํด์ค ์์ ํด๋ฆญ
์ธ์คํด์ค์ ๋ค์ด๊ฐ๋ฉด ์ํ๊ฐ ์คํ์ค์ด๋ผ๊ณ ๋จ๋ฉด ๋จ
์ธ์คํด์ค ์ฐ๊ฒฐ > EC2 ์ธ์คํด์ค์ ์คํํ๊ฒ๋จ (ubuntu ํ๋ฉด)
ํ๋ ฅ์ IP ์์ฑ ํ๊ธฐ ํ๋ ฅ์ IP ํ ๋น > IP ์ด๋ฆ ์ ์ด์ฃผ๊ธฐ > ํ๋ ฅ์ IP ์ฃผ์ ์ฐ๊ฒฐ > ๋ง๋ค์ด์ค ์ธ์คํด์ค๋ ์ฐ๊ฒฐ
์ฐ๊ฒฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฐ๋ก ํฐ๋ฏธ๋ ์คํ!
- ubuntu ํ๊ฒฝ์์ jdk ์ค์น
$ sudo apt update && / sudo apt install openjdk-17-jdk -y
$ java -version
- Github ๋ก ๋ถํฐ ํด๋ก ๋ฐ๊ธฐ
$ git clone ~~~~ $ cd ec2-spring-boot
- application .yml ํ์ผ ์ง์ ๋ง๋ค๊ธฐ
๋ฏผ๊ฐํจ ์ ๋ณด๊ฐ ํฌํจ๋ ํ์ผ์ ๋ณ๋๋ก EC2 ์ธ์คํด์ค์ ์ฌ๋ ค์ค๋ค.
์ง์ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ์ ์ฌ๋ฆฌ๋ ์์ ๋ณด๋จ ํ์ผ์ ์ง์ ๋ง๋๋ ๊ฒ ๋ ๊ฐ๋จํจ
- ์๋ฒ ์คํ
$ ./gradlew clean build
$ cd /ec2-spring-boot/build/libs
$ sudo java -jar ec2-spring-boot-SNAPSHOT.jar
(๋ฐฑ๊ทธ๋ผ์ด๋์์ spring boot ์คํ) $ sudo nohup java -javr ec2-spring-boot-0.0.1-SNAPSHOT.jar &
์ ์๋ํ๋์ง ํ์ธ โญ
AWS ECR (Elastic Container Registry)
Dockerhub ์ ๋์ผํ ์ญํ ์ ํ๋ ์๋น์ค
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ์ฅ ๋ค์ดํ ์ ์๋ ์ ์ฅ์ ์ญํ
AWS ECR ์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ AWS ์์คํ ๋ค๊ณผ ์ฐ๋์ด ํธํ๊ณ AWS ๋ด์์ ํ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํจ!
EC2 ์ Spring boot ์๋ฒ ๋ฐฐํฌ ( + Docker ๋์ปค)
๊ธฐ์กด ๋์ปค๋ฅผ ์ฌ์ฉํ์ง ์์๋๋ ๊นํ๋ธ๋ฅผ ์ด์ฉํด์
push / pull ๋ฐ์์ ์คํ์ํค๋ ๋ฐฉ์์ ์ฌ์ฉํจ
์ฝ๋ ์ ์ฒด๋ฅผ EC2 ๋ก ์ด๋ โ ๋ฐํ์ ํ๊ฒฝ ์ค์น ๋ฑ๋ฑโฆ pull ํฐ ํ์ผ์ ๋ฐ์์ค๋๊ฒ ๋ฌธ์ ์
ํ๋ก์ ํธ๋ฅผ Docker ์ด๋ฏธ์ง๋ก ๋น๋ํด์ EC2 ์ ๊ทธ ์ด๋ฏธ์ง๋ง ๋ค์ด๋ฐ์์ ์คํ์ํค๋๊ฒ ๋ ์ฌํ!
= ๊ฐ๋จํ๊ฒ ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๊ณ ์คํํ๊ธฐ์ํด์!
1) AWS CLI ์ค์น
์๋์ฐ + ์ฐ๋ถํฌ ๋ ๊ณณ ์ค์น
์๋์ฐ
AWSCLIV2.msi ์ค์น
aws โversion
์ฐ๋ถํฌ
sudo apt install unzip
curl โhttp~โ -o โawscliv2.zipโ
unzip awscliv2.zip
sudo ./aws/install
aws โversion
2) IAM ์คํํ๊ธฐ
EC2 ์ ๊ทผ๊ถํ์ ์ป๊ธฐ ์ํด์
์ฌ์ฉ์์ด๋ฆ > ์ ์ฑ > container ๊ฒ์ | AmazonEC2 ContainerRegistryFullAccess ์ ํ > ๋ณด์์๊ฒฉ์ฆ๋ช > ์์ธ์คํค > AWS ์ธ๋ถ์์ ์คํ๋๋ ์ดํ๋ฆฌ์ผ์ด์ > ์์ธ์คํค ๋ฅผ ์ ์ฅํด์ฃผ๋๊ธฐ
aws configure ๋ช ๋ น์ด ์ ๋ ฅํ ์์ธ์คํค๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋จ
3) Elastic Container Registry
1์ด๋ฏธ์ง : 1๋ฆฌํฌ
๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑ > ํ๋ผ์ด๋น > ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์ง์ > ์์ฑ
local | ํธ์๋ช ๋ น ๋ณด๊ธฐ ๋๋ฌ์ ๋ณด๋ฉด์ ํธ์ํ๊ธฐ
local | (์ด๋ build ํ ๋ โplatform linux/amd64 ๋ก ๋น๋) (cpu ์ํคํ ์ณ ๋ค๋ฆ)
local | docker push ~
ec2 | ์์๋ docker pull ๋ก ์ด๋ฏธ์ง ๋ค์ด
ec2 | ์ด๋ฏธ์ง์์ฑ ,์ปจํ ์ด๋ ์คํ ๋ช ๋ น์ด ์จ์ฃผ๋ฉด ๋จ (์ด๋ docker compose ์ฌ์ฉํ๋ฉด ๋ ํธ๋ฆฌํ๊ฒ ๋ฐฐํฌ ๊ฐ๋ฅ)