[์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 2. ํ™˜๊ฒฝ ๊ตฌ์„ฑ

2024. 3. 12. 22:13ยท๐Ÿ“‚ education & lecture/์ธํ”„๋ผ ๊ณต๋ฐฉ

1. Project ์„œ๋ฒ„ ๊ตฌ์„ฑ

[1] AutoScaling ํ™˜๊ฒฝ์—์„œ API call ์— ๊ด€ํ•œ ๊ณ ๋ฏผ

 ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ์€ Gradle ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ๋‹ค. ์ด์ „ ํ”„๋กœ์ ํŠธ ์ธํ”„๋ผ์™€ ๋‹ค๋ฅธ ์ ์€ BFF ํŒจํ„ด(Backend For Frontend) ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ์–ด conference, analysis server ์— api call ์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด์˜€๋‹ค. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ณ ๋ฏผ๋˜์—ˆ๋˜ ์ ์€ Scale out ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ api call ์„ ํ•  ๊ฒƒ์ธ๊ฐ€? ์ด๋‹ค.

 API call ์„ ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ IP, PORT ์— ๊ด€ํ•œ ์„œ๋ฒ„ ์ŠคํŽ™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ Scale out ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒ์„ธํ•œ ์„œ๋ฒ„ ์ŠคํŽ™์„ ์•„๋Š” ๊ฒƒ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. Scale out ๋˜๋Š” ์„œ๋ฒ„ ์ŠคํŽ™์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฐ˜๋Œ€๋กœ Sclae in ํ•˜๋Š” ์„œ๋ฒ„ ์ŠคํŽ™์„ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์„ WAS ๊ฐ€ ๋‹ด๋‹นํ•˜๋Š”๋ฐ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.  ๋˜ํ•œ ๋ถ€ํ•˜๊ฐ€ ๋‚ฎ์€ ์„œ๋ฒ„์„ WAS ๊ฐ€ ์„ ํƒํ•˜๋Š” ๊ณผ์ •๊ณผ ๊ฐ™์ด ํŠธ๋ž˜ํ”ฝ์— ์œ ์—ฐํ•œ Scale out ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์„ ํƒํ•œ ๋ฐฉ๋ฒ•์€ application load balancer ์ด๋‹ค.

 

 

[2] AWS Load balancer ๋ฅผ ๊ธฐ๋ฐ˜ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

 AWS application load balancer ์€ ๊ทœ์น™์— ์•Œ๋งž๋Š” ์š”์ฒญ์„ target group ์„ ํ†ตํ•ด ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค. header, path, http method ์ •๋ณด๋“ค๋กœ ๋ผ์šฐํŒ… ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ AWS ๋Š” CIDR ๊ธฐ๋ฐ˜์˜ source IP ๋„ ์กฐ๊ฑด์„ ์ œ๊ณตํ•œ๋‹ค. application load balancer ๋Š” public, private ๊ด€๊ณ„์—†์ด DNS ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. DNS ์ด๋ฆ„์„ ํ†ตํ•ด load balancer ์— ์š”์ฒญํ•˜๋ฉด ์„ค์ •๋œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๋ผ์šฐํŒ…, ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์ง€์›ํ•œ๋‹ค.

 ๊ตฌ์„ฑํ•œ architecture ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. load balancer ๋Š” 2๊ฐœ๋ฅผ ๊ตฌ์„ฑํ–ˆ๊ณ  ์ธํ„ฐ๋„ท ๊ฒฝ๊ณ„์™€ ๋‚ด๋ถ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” application load balancer ๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค. HTTPS ์š”์ฒญ์€ url path ๋ฅผ ์ด์šฉํ•œ ํ•„ํ„ฐ๋งํ•˜์—ฌ ํ•ด๋‹น target group ์—๊ฒŒ ๋ผ์šฐํŒ… ํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.

aws architecture
load balancer ์—์„œ ์ œ๊ณตํ•˜๋Š” DNS ์ด๋ฆ„

 

 

2. ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด ๋ณด์ž.

[1] launch template ๊ตฌ์„ฑํ•˜๊ธฐ

1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ OS ์ด๋ฏธ์ง€ : amazon linux

2. ์ธ์Šคํ„ด์Šค ์œ ํ˜• : t2.micro

3. ๋ณด์™„ ๊ทธ๋ฃน(inbound)

  • TCP 8080 ๋Œ€์—ญ : load balancer security group ์„ค์ •

 

4. ๋„คํŠธ์›Œํฌ ์„ค์ •(๊ณ ๊ธ‰ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ)

 

5. ๊ณ ๊ธ‰ ์„ธ๋ถ€ ์ •๋ณด

  • IAM ์—ญํ•  > S3 FullAccess + CloudWatchAgentServerPolicy

 

6. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ (๋ถ€ํŒ… ํ›„, shell ๋ช…๋ น์–ด ์ถ”๊ฐ€ ์„ค์ •)

#!/bin/bash

su ec2-user

sudo yum install -y amazon-cloudwatch-agent
sudo aws s3 cp s3://[s3-bucket-์ด๋ฆ„]/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

sudo yum install -y java-17-amazon-corretto
aws s3 cp s3://[s3-bucket-์ด๋ฆ„]/member-0.0.1-SNAPSHOT.jar /home/ec2-user
nohup java -jar -Dspring.profiles.active=prod /home/ec2-user/member-0.0.1-SNAPSHOT.jar 1> logs.out 2>&1  &

 

 

[2] load balancer ์ƒ์„ฑ

1. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์œ ํ˜• ๋น„๊ต ๋ฐ ์„ ํƒ

  • application load balancer

2. ์ฒด๊ณ„

  • ์ธํ„ฐ๋„ท ๊ฒฝ๊ณ„ (conference, analysis ๋Š” ์ƒ์„ฑ ์‹œ์—๋Š” ๋‚ด๋ถ€๋กœ ์„ค์ •)

3. ๋„คํŠธ์›Œํฌ ๋งคํ•‘

  • VPC ์„ค์ •
  • ์š”์ฒญ ํ• ๋‹นํ•ญ subnet ๊ตฌ์„ฑ

 

4. ๋ณด์•ˆ ๊ทธ๋ฃน (inbound)

  • [public load balancer] TCP 443 (HTTPS) : 0.0.0.0/0 (์ „์ฒด ๋Œ€์—ญ)
  • [private load balancer] TCP 8080 : private load balancer ๊ฐ€ ํฌํ•จ๋œ ๋ณด์•ˆ ๊ทธ๋ฃน (์ „์ฒด ๋Œ€์—ญ)

5. ๋ฆฌ์Šค๋„ˆ ๋ฐ ๋ผ์šฐํŒ…

  • protocol : HTTPS / port 443 / ๋Œ€์ƒ ๊ทธ๋ฃน ์„ ํƒ

๋ฆฌ์Šค๋„ˆ ๋ฐ ๋ผ์šฐํŒ… ์„ค์ •

 

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ƒ์„ฑ ์ดํ›„ path routing ์„ค์ •

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ƒ์„ฑ ์ดํ›„ ํ•ด๋‹น ์œ„์น˜ ์ ‘์†
์š”์ฒญ ํ•„ํ„ฐ๋งํ•  path ์„ค์ •

 

๐Ÿšจ [trouble shooting] /api/members/* vs /api/members* ์ฐจ์ด??
(1) /api/members/* : /api/members mapping (X)
(2) /api/members* : /api/members mapping (O)

 

 

6. TLS ์ธ์ฆ์„œ ์ถ”๊ฐ€

 

[3] AutoScalingGroup ์ƒ์„ฑ

1. ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ ์„ ํƒ

  • ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ ๊ตฌ์„ฑ
  • ๋ฒ„์ „ : Latest

 

 

2. ๋„คํŠธ์›Œํฌ ์„ค์ •

  • VPC, subnet ์„ค์ •

 

3. load balancer ์„ค์ •

  • ๊ธฐ์กด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์ •
  • ๋ผ์šฐํŒ…ํ•  ๋Œ€์ƒ ๊ทธ๋ฃน์œผ๋กœ ์ถ”๊ฐ€

 

4. ๊ทธ๋ฃน ํฌ๊ธฐ ๋ฐ ํฌ๊ธฐ ์กฐ์ • ๊ตฌ์„ฑ

 

 

3. TroubleShooting

front-group ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์—์„œ์˜ 502 error ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์Šˆ
  • ์„œ๋ฒ„๊ฐ€ ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ ํ”„๋ก์‹œ ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋ฉด์„œ ์—…์ŠคํŠธ๋ฆผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์œ ํšจํ•˜์ง€ ์•Š์€ ์‘๋‹ต์„ ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ์›์ธ : ๋Œ€์ƒ ๊ทธ๋ฃน์„ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ upstream server ๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•œ ์ด์Šˆ : ์„œ๋ฒ„ ์ข…๋ฃŒ๋กœ ์ธํ•œ ์ด์Šˆ
    • 404 vs 502 vs 504
      • 404(Not Found) : ๋งŒ์•ฝ load balancer ์˜ mapping url ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 404 ๋ฐ˜ํ™˜
      • 502(bad gateway) : ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ ์ •์ƒ ์šด์˜ ์ค‘์ด์ง€๋งŒ ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์— ๋ชจ๋‘ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜
      • 504(Gateway Time-out) : ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ์˜ค๋ฅ˜๋กœ ์ธํ•œ ์ด์Šˆ๋กœ ์ฃผ๋กœ ์ถ”์ •
/api/members/* vs /api/members* ์ฐจ์ด??
  • /api/members/* : /api/members mapping (X)
  • /api/members* : /api/members mapping (O)

 

4.  ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ ์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ

  1. ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ 
    • AS-IS : ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ, ๋นŒ๋“œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
    • ํ•œ๊ณ„ : scaling out ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ ์ˆ˜์ •์ด ์žˆ์„ ๊ฒฝ์šฐ, ์ˆ˜์ž‘์—…์œผ๋กœ ๊ฐ๊ฐ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐํฌ ๋„์ž…
    • TO-BE : ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ ๋„์ž… (code deploy, jenkins)
  2. cloudwatch ์ ์šฉ
  3. /api/analysis response time ๊ฒ€ํ†  ๋ฐ ๊ฐœ์„ 
    1. AS-IS : ์ฝ”๋“œ๋ฅผ ์ทจ๋ฏธ๋กœ ํ•˜๋Š” ์„ค๋ฌธ ์กฐ์‚ฌ API response time : 600ms
    2. TO-BE : 200ms ์ดํ•˜๋กœ ๊ฐœ์„ 

 

Reference

  • https://www.inflearn.com/course/%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B3%B5%EB%B0%A9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0/dashboard 
  • https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/load-balancer-types.html  

'๐Ÿ“‚ education & lecture > ์ธํ”„๋ผ ๊ณต๋ฐฉ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ธํ”„๋ผ ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 4. ์„œ๋น„์Šค ์„ฑ๋Šฅ ์ง„๋‹จํ•˜๊ธฐ  (1) 2024.03.28
[์ธํ”„๋ผ ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 3. ์„œ๋ฒ„ ์ง„๋‹จํ•˜๊ธฐ  (1) 2024.03.14
[์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 1. github action ์„ ํ†ตํ•œ ๋นŒ๋“œ ์„ค์ •  (1) 2024.03.05
[์ธํ”„๋ผ๊ณต๋ฐฉ] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ - 4. ํ™”๋ฉด ์‘๋‹ต ๊ฐœ์„ ํ•˜๊ธฐ  (0) 2024.02.29
[์ธํ”„๋ผ๊ณต๋ฐฉ] HTTP Cache  (0) 2024.02.28
'๐Ÿ“‚ education & lecture/์ธํ”„๋ผ ๊ณต๋ฐฉ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ธํ”„๋ผ ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 4. ์„œ๋น„์Šค ์„ฑ๋Šฅ ์ง„๋‹จํ•˜๊ธฐ
  • [์ธํ”„๋ผ ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 3. ์„œ๋ฒ„ ์ง„๋‹จํ•˜๊ธฐ
  • [์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 1. github action ์„ ํ†ตํ•œ ๋นŒ๋“œ ์„ค์ •
  • [์ธํ”„๋ผ๊ณต๋ฐฉ] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ - 4. ํ™”๋ฉด ์‘๋‹ต ๊ฐœ์„ ํ•˜๊ธฐ
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    JPA
    spring
    ํšŒ๊ณ 
    Redisson
    nGrinder
    UUID
    ๋™์‹œ์„ฑ
    kafka
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    react
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    AWS
    gof
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    spring AOP
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    spring camp 2025
    spring-batch
    mysql
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
[์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 2. ํ™˜๊ฒฝ ๊ตฌ์„ฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”