MapleStory Finger Point

โšช DevOps/โšซ AWS

[AWS] EC2 & ECR (+ docker)

HYEJU01 2025. 4. 6. 07:14

 

 

 

 

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 ์‚ฌ์šฉํ•˜๋ฉด ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ฐฐํฌ ๊ฐ€๋Šฅ)