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