Amazon SQS

SQS의 핡심은 λŒ€κΈ°μ—΄

image-20220906002121408

  • SQS λŠ” κ°„λ‹¨ν•œ λŒ€κΈ° μ„œλΉ„μŠ€μ΄λ‹€.
  • SQS λŒ€κΈ°μ—΄μ—λŠ” λ©”μ‹œμ§€λ₯Ό 포함할 수 μžˆλ‹€.
  • λ©”μ‹œμ§€λ₯Ό λ‹΄κΈ° μœ„ν•΄μ„œλŠ” λˆ„κ΅°κ°€κ°€ QueueλŒ€κΈ°μ—΄μ— λ©”μ‹œμ§€λ₯Ό 전솑해야 ν•œλ‹€.
    • μƒμ‚°μž(producer)
      • SQSλŒ€κΈ°μ—΄μ— λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” 주체
      • μƒμ‚°μžλŠ” ν•œ 개 or κ·Έ 이상이 될 수 μžˆλ‹€.
      • μ—¬λŸ¬ μƒμ‚°μžκ°€ μ—¬λŸ¬ 개의 λ©”μ‹œμ§€λ₯Ό SQS λŒ€κΈ°μ—΄μ— 보낼 수 μžˆλ‹€.
      • λ©”μ‹œμ§€λŠ” 무엇이든 상관없닀.
        • μ˜€λ”λ₯Ό μ²˜λ¦¬ν•΄λΌ, λΉ„λ””μ˜€λ₯Ό μ²˜λ¦¬ν•΄λΌ.. λ“±λ“± etc…
      • μƒμ„±ν•œ λͺ¨λ“  λ©”μ‹œμ§€λŠ” λŒ€κΈ°μ—΄μ— λ“€μ–΄κ°„λ‹€.
    • μ†ŒλΉ„μž(consumer)
      • λŒ€κΈ°μ—΄μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ³  μˆ˜μ‹ ν•΄μ•Ό ν•˜λŠ” λŒ€μƒ
      • λŒ€κΈ°μ—΄Queueμ—μ„œ λ©”μ‹œμ§€λ₯Ό 폴링(polling) ν•œλ‹€.
        • λŒ€κΈ°μ—΄μ—κ²Œ μ†ŒλΉ„μž μ•žμœΌλ‘œ 온 λ©”μ‹œμ§€κ°€ μžˆλŠ”μ§€λ₯Ό λ¬Όμ–΄λ³΄λŠ” 것
      • λŒ€κΈ°μ—΄μ— λ©”μ‹œμ§€κ°€ 있으면 μ†ŒλΉ„μžλŠ” 이 λ©”μ‹œμ§€λ₯Ό ν΄λ§ν•΄μ„œ 정보λ₯Ό μ–»λŠ”λ‹€.
      • λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ³  λŒ€κΈ°μ—΄μ—μ„œ κ·Έ λ©”μ‹œμ§€λ₯Ό μ‚­μ œ
      • μ—¬λŸ¬ μ†ŒλΉ„μžκ°€ SQSλŒ€κΈ°μ—΄μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ†ŒλΉ„ν•  수 μžˆλ„λ‘ ν•  μˆ˜λ„ μžˆλ‹€.
  • QueueλŒ€κΈ°μ—΄ μ„œλΉ„μŠ€λŠ” μƒμ‚°μž(Producer)와 μ†ŒλΉ„μž(Consumer) 사이λ₯Ό λΆ„λ¦¬ν•˜λŠ” 버퍼 역할을 ν•œλ‹€.

01. SQS - Standard Queue

  • ν‘œμ€€ λŒ€κΈ°μ—΄μš© Amazon SQS
  • SQSλŠ” AWSμ—μ„œ μ œκ³΅ν•˜λŠ” κ°€μž₯ 였래된 μ„œλΉ„μŠ€
  • AWS의 첫 번째 μ„œλΉ„μŠ€ 쀑 ν•˜λ‚˜μ˜€μŒ (10λ…„ λ„˜κ²Œ μ„œλΉ„μŠ€μ€‘μ΄μ–΄μ„œ μž‘λ™λ°©μ‹μ΄ ν™•μ‹€νžˆ κ΅¬μΆ•λ˜μ–΄μžˆμŒ)
  • μ™„μ „κ΄€λ¦¬ν˜• μ„œλΉ„μŠ€μ΄λ©°, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΆ„λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ¨

  • Standard SQS의 νŠΉλ³„ν•œ 점
    • λ¬΄μ œν•œ μ²˜λ¦¬λŸ‰μ„ 얻을 수 μžˆλ‹€.
    • μ΄ˆλ‹Ή μ›ν•˜λŠ”λ§ŒνΌ λ©”μ‹œμ§€λ₯Ό 보낼 수 μžˆλ‹€.
    • λŒ€κΈ°μ—΄(Queue)에도 μ›ν•˜λŠ” 만큼 λ©”μ‹œμ§€λ₯Ό ν¬ν•¨μ‹œν‚¬ 수 μžˆλ‹€.
    • μ²˜λ¦¬λŸ‰μ— μ œν•œμ΄ μ—†κ³ , λŒ€κΈ°μ—΄μ— μžˆλŠ” λ©”μ‹œμ§€ μˆ˜μ—λ„ μ œν•œμ΄ μ—†λ‹€.
    • λ©”μ‹œμ§€ 수λͺ…이 짧닀.
      • λ©”μ‹œμ§€λŠ” 기본적으둜 4μΌλ™μ•ˆ λŒ€κΈ°μ—΄μ— λ‚¨μ•„μžˆλ‹€. (μ΅œλŒ€ μ‹œκ°„ 14일)
    • λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄μžλ§ˆμž μ†ŒλΉ„μžκ°€ 읽고 ν•΄λ‹Ή 보쑴 κΈ°κ°„ 내에 μ²˜λ¦¬ν•œ ν›„ λŒ€κΈ°μ—΄μ—μ„œ μ‚­μ œν•΄μ•Ό ν•œλ‹€.
      • 그렇지 μ•ŠμœΌλ©΄ μ†Œμ‹€λœλ‹€.
    • μ§€μ—°μ‹œκ°„μ΄ μ§§μ•„μ„œ SQSλŠ” λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄κ±°λ‚˜, λ©”μ‹œμ§€λ₯Ό 읽을 λ•Œλ§ˆλ‹€ κ²Œμ‹œ 및 μˆ˜μ‹ μ΄ 10msμ΄λ‚΄λ‘œ 맀우 λΉ λ₯΄κ²Œ 응닡을 λ°›κ²Œ λœλ‹€.
    • SQS의 λ©”μ‹œμ§€λŠ” μž‘μ•„μ•Ό ν•œλ‹€.
      • μ „μ†‘λœ λ©”μ‹œμ§€λ‹Ή 256KB λ―Έλ§Œμ΄μ–΄μ•Ό ν•œλ‹€.
    • SQSλŠ” λŒ€κΈ°μ—΄ μ„œλΉ„μŠ€μ΄λ―€λ‘œ 높은 μ²˜λ¦¬λŸ‰, 높은 λ³Όλ₯¨λ“±μ΄ μžˆμ–΄μ„œ 쀑볡 λ©”μ‹œμ§€κ°€ μžˆμ„ 수 μžˆλ‹€.
      • λ©”μ‹œμ§€κ°€ λ‘λ²ˆ μ „μ†‘λ˜λŠ” κ²½μš°κ°€ μžˆλ‹€. (적어도 ν•œλ²ˆμ˜ 전솑)
    • μ΅œμ„ μ˜ μ˜€λ”λΌλŠ” 뜻으둜 ν’ˆμ ˆ λ©”μ‹œμ§€λ₯Ό 보낼 μˆ˜λ„ μžˆλ‹€.

κ·Έ μ œν•œμ„ μ²˜λ¦¬ν•  수 μžˆλŠ” SQS의 λ˜λ‹€λ₯Έ μœ ν˜•μ˜ μ œν’ˆμ΄ μžˆμ§€λ§Œ 뒷뢀뢄에 μ„€λͺ…ν•˜λ„λ‘ ν•œλ‹€.

02. SQS - Producing Messages

λ©”μ‹œμ§€ μƒμ‚°μž

image-20220906003708754

  • μ΅œλŒ€ 256KB의 λ©”μ‹œμ§€κ°€ μƒμ‚°μžμ— μ˜ν•΄ SQS둜 전솑 (using SDK, SendMessage API)
  • λ©”μ‹œμ§€κ°€ μž‘μ„±λ˜λ©΄ μ†ŒλΉ„μžκ°€ ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό 읽고 μ‚­μ œν•  λ•ŒκΉŒμ§€ SQSλŒ€κΈ°μ—΄μ— μœ μ§€λœλ‹€.
    • λ©”μ‹œμ§€κ°€ μ‚­μ œλ˜μ—ˆλ‹€λŠ” 것은 λ©”μ‹œμ§€κ°€ μ²˜λ¦¬λλ‹€λΌλŠ” 뜻
  • λ©”μ‹œμ§€ 보쑴기간 4일~14일 (default, 4일)

  • λ©”μ‹œμ§€ 생성은 μ–΄λ–¨λ•Œ ν•˜λŠ”κ°€?
    • νŒ¨ν‚·κ³Ό 같은 μ˜€λ”λ₯Ό μ²˜λ¦¬ν•œ λ‹€μŒ μ„Όν„°λ‘œ λ°°μ†‘ν•˜λ €κ³  ν•œλ‹€.
    • μ›ν•˜λŠ” μ‹œκ°„μ— 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ—¬ OrderId, ConsumerId 와 μ›ν•˜λŠ” 속성 λ“±μ˜ 일뢀 정보가 ν¬ν•¨λœ λ©”μ‹œμ§€λ₯Ό SQSλŒ€κΈ°μ—΄λ‘œ 보낸닀.
      • μ£Όμ†Œ, νœ΄λŒ€ν°λ²ˆν˜Έ λ“± μ›ν•˜λŠ” 속성도 λ“€μ–΄κ°ˆ 수 μžˆλ‹€.
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κΆŒν•œμ— μžˆλŠ” μ†ŒλΉ„μžλŠ” ν•΄λ‹Ή λ©”μ‹œμ§€ 자체λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€.
  • Standard SQSλŠ” λ¬΄μ œν•œμ˜ μ²˜λ¦¬λŸ‰μ„ 가지고 μžˆλ‹€.

03. SQS - Consuming Messages

λ©”μ‹œμ§€ μ†ŒλΉ„μž

image-20220906004933768

  • μ†ŒλΉ„μžλŠ” 일뢀 μ½”λ“œλ‘œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‹€.

  • μ΄λŸ¬ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ EC2, 즉 AWSμƒμ˜ 가상 μ„œλ²„μ—μ„œ 싀행될 수 μžˆλ‹€.

    • EC2, Server, Lambda. ,,, etc
    • λžŒλ‹€μ—μ„œ λ©”μ‹œμ§€λ₯Ό λ°”λ‘œ 읽을 μˆ˜λ„ μžˆλ‹€.
  • Consumerκ°€ 있고, μ†ŒλΉ„μžλŠ” SQSλ©”μ‹œμ§€λ₯Ό ν΄λ§ν•œλ‹€.

  • μ†ŒλΉ„μžκ°€ λŒ€κΈ°μ—΄μ— μžμ‹ μ˜ μ•žμœΌλ‘œ 온 λ©”μ‹œμ§€κ°€ μžˆλŠ”μ§€λ₯Ό ν™•μΈν•œλ‹€.

  • μ†ŒλΉ„μžλŠ” ν•œ λ²ˆμ— μ΅œλŒ€ 10개의 λ©”μ‹œμ§€λ₯Ό λ°›λŠ”λ‹€.

  • SQSλŒ€κΈ°μ—΄μ— λ©”μ‹œμ§€κ°€ 있으면 β€œλŒ€κΈ°μ—΄μ— μœ νš¨ν•œ λ©”μ‹œμ§€κ°€ μžˆλ‹€β€ λΌλŠ” 응닡을 λ°›λŠ”λ‹€.

  • 이 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜λ©΄ λœλ‹€.

  • λ©”μ‹œμ§€ μ²˜λ¦¬ν›„μ— SDK DeleteMessage API λ₯Ό 톡해 λŒ€κΈ°μ—΄μ—μ„œ μ‚­μ œν•œλ‹€.

    • λ‹€λ₯Έ μ†ŒλΉ„μžλ“€μ΄ 이 λ©”μ‹œμ§€λ₯Ό λ³Ό 수 μ—†κ²Œ λœλ‹€. (λ©”μ‹œμ§€ 처리 μ™„λ£Œ)

04. SQS - Multiple EC2 Instances Consumers

SQSλŒ€κΈ°μ—΄μ— λ©”μ‹œμ§€κ°€ λ§Žμ•„μ Έμ„œ, μ²˜λ¦¬λŸ‰μ„ λŠ˜λ €μ•Ό ν•˜λ©΄ μ†ŒλΉ„μž(Consumer)λ₯Ό μΆ”κ°€ν•˜κ³  μˆ˜ν‰ ν™•μž₯을 μˆ˜ν–‰ν•΄μ„œ μ²˜λ¦¬λŸ‰μ„ κ°œμ„ ν•  수 μžˆλ‹€.

image-20220906005222573

  • λ§Œμ•½ λ©”μ‹œμ§€κ°€ μ†ŒλΉ„μžμ— μ˜ν•΄ λΉ λ₯΄κ²Œ μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ λ‹€λ₯Έ μ†ŒλΉ„μžκ°€ μˆ˜μ‹ ν•˜κ²Œ 될 κ°€λŠ₯성이 μžˆλ‹€.
    • κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 적어도 ν•œλ²ˆμ€ 전솑이 λœλ‹€ 라고 ν‘œν˜„ν•¨
    • μ—¬λŸ¬ μ†ŒλΉ„μžλ₯Ό λ™μ‹œμ— κ°€μ§ˆ 수 μžˆλ‹€.

05. SQS - with Auto Scaling Group (ASG)

ASG(Auto Scaling Groups)와 λ”λΆˆμ–΄ SQSλ₯Ό μ‚¬μš©ν•˜λŠ” μ™„λ²½ν•œ 사둀이닀.

image-20220906005515233

  • μ†ŒλΉ„μžκ°€ ASG λ‚΄λΆ€μ—μ„œ EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰
  • SQSλŒ€κΈ°μ—΄μ—μ„œ λ©”μ‹œμ§€λ₯Ό 폴링
  • ASG 일쒅 μ§€ν‘œμ— 따라 ν™•μž₯λ˜μ–΄μ•Ό ν•˜λŠ”λ°, μ‚¬μš©ν•  수 μžˆλŠ” μ§€ν‘œλŠ” λŒ€κΈ°μ—΄μ˜ 길이 이닀.
    • ApproximateNumberOfMessages 라고 ν•œλ‹€.
    • μ΄λŠ” λͺ¨λ“  SQSλŒ€κΈ°μ—΄μ—μ„œ μ“Έ 수 μžˆλŠ” CloudWatch μ§€ν‘œμ΄λ‹€
  • μ•ŒλžŒμ„ μ„€μ •ν•  μˆ˜λ„ μžˆλŠ”λ° λŒ€κΈ°μ—΄μ˜ 길이가 νŠΉμ • μˆ˜μ€€μ„ λ„˜μ–΄κ°€λ©΄ CloudWatch Alarm 을 μ„€μ • κ°€λŠ₯

λ§Œμ•½ μ›Ήμ‚¬μ΄νŠΈμ— Order주문이 ν­μ£Όν–ˆλ‹€κ±°λ‚˜ ASG이 더 λ§Žμ€ EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μ œκ³΅ν•˜λ©΄ λ©”μ‹œμ§€λ“€μ„ 더 높은 μ²˜λ¦¬λŸ‰μœΌλ‘œ μ²˜λ¦¬ν•  수 있게 λœλ‹€.

  • Queue에 λ©”μ‹œμ§€ μŒ“μ΄λ©΄ Worker/ Consumer 같은거 λŠ˜λ €μ„œ κ·Έλƒ₯ 처리λ₯Ό λΉ λ₯΄κ²Œ ν•˜λΌλŠ” 뜻

06. SQS - decouple between Application tiers

SQSλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 간에 뢄리λ₯Ό μœ„ν•΄ μ‚¬μš©λœλ‹€.

image-20220906005637125

  • λΉ„λ””μ˜€λ₯Ό μ²˜λ¦¬ν•˜λŠ” App이 μžˆλ‹€κ³  κ°€μ •
  • ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ λΉ„λ””μ˜€μ²˜λ¦¬λ₯Ό μš”μ²­μ„ λ°›κ³  λΉ„λ””μ˜€κ°€ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•  λ•Œ, ν”„λ‘ νŠΈμ—”λ“œκ°€ 처리λ₯Ό ν•œ ν›„ S3 버킷에 μ—…λ‘œλ“œ
    • λ¬Έμ œλŠ” μ‹œκ°„μ΄ 맀우 였래 걸릴 수 있고, ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ 이λ₯Ό μ²˜λ¦¬ν•˜λ©΄ μ›Ήμ‚¬μ΄νŠΈμ˜ 속도가 느렀질 수 μžˆλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΆ„λ¦¬ν•˜μ—¬, νŒŒμΌμ²˜λ¦¬μš”μ²­κ³Ό μ‹€μ œνŒŒμΌμ²˜λ¦¬κ°€ μ„œλ‘œ λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•  수 μžˆλ„λ‘ ν•˜μž

파일처리 μš”μ²­μ„ 받을 λ•Œλ§ˆλ‹€ SQSλŒ€κΈ°μ—΄λ‘œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•œλ‹€. 그럼 처리 μš”μ²­μ„ ν•  λ•Œ ν•΄λ‹Ή νŒŒμΌμ€ SQSλŒ€κΈ°μ—΄μ— 있게 되며, 자체 ASG에 속할 Backend Appμ΄λΌλŠ” λ‘λ²ˆμ¨° 처리 계측을 생성할 수 있고, 이 λ°±μ—”λ“œμ—μ„œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜κ³  λΉ„λ””μ˜€λ₯Ό μ²˜λ¦¬ν•˜κ³  S3버킷에 이λ₯Ό μ—…λ‘œλ“œν•  것이닀.

μœ„ μ΄λ―Έμ§€μ—μ„œ λ³Ό 수 μžˆλ“―μ΄ 그에 따라 ν”„λ‘ νŠΈμ—”λ“œλ₯Ό ν™•μž₯ν•  수 있고 그에 따라 λ°±μ—”λ“œλ„ ν™•μž₯ν•  수 μžˆμ§€λ§Œ λ…λ¦½μ μœΌλ‘œ ν™•μž₯ν•  수 있게 λœλ‹€. SQSλŒ€κΈ°μ—΄μ€ μ²˜λ¦¬λŸ‰μ΄ λ¬΄μ œν•œμ΄κ³  λŒ€κΈ°μ—΄ μΈ‘λ©΄μ—μ„œ λ©”μ‹œμ§€ μˆ˜μ— μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— 정말 μ•ˆμ „ν•˜λ‹€.

μ΄λŠ” κ°•λ ₯ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μœ ν˜•μ˜ μ•„ν‚€ν…μ²˜μ΄λ‹€. λ˜ν•œ ν”„λ‘ νŠΈμ—”λ“œμ˜ 경우 졜적의 μœ ν˜•μ˜ EC2 μΈμŠ€ν„΄μŠ€ λ˜λŠ” μ•„ν‚€ν…μ²˜λ₯Ό ν”„λ‘ νŠΈμ—”λ“œμ— μ‚¬μš©ν•  수 있으며, λ°±μ—”λ“œμ˜ 경우 λΉ„λ””μ˜€ 처리λ₯Ό μˆ˜ν–‰ν•  λ•Œ κ·Έλž˜ν”½ 처리μž₯치 GPUκ°€ μžˆλŠ” 일뢀 EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•  수 있게 λœλ‹€.

μ΄λŸ¬ν•œ μœ ν˜•μ˜ μΈμŠ€ν„΄μŠ€κ°€ ν•΄λ‹Ή μ›Œν¬λ‘œλ“œλ₯Ό μˆ˜ν–‰ν•˜λŠ” 데에 졜적이기 λ•Œλ¬Έμ΄λ‹€.

07. SQS - Security

  • λ³΄μ•ˆ
    • https api λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ‹œμ§€λ₯Ό 보내고 μƒμ„±ν•¨μœΌλ‘œμ¨ 전솑쀑에 μ•”ν˜Έν™”
    • KMSν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ λ―Έμ‚¬μš© μ•”ν˜Έν™”λ₯Ό μ–»κ³ 
    • μ›ν•œλ‹€λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ•”ν˜Έν™”λ₯Ό ν•  μˆ˜λ„ μžˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈκ°€ 자체적으둜 μ•”ν˜Έν™” 및 μ•”ν˜Έν™” 해독을 μˆ˜ν–‰ν•΄μ•Ό 함을 μ˜λ―Έν•œλ‹€. SQSμ—μ„œ 기본적으둜 μ§€μ›ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. μ•‘μ„ΈμŠ€ μ œμ–΄λ₯Ό μœ„ν•΄ IAM 정책은 SQS API 에 λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό κ·œμ œν•  수 있고, S3버킷 μ •μ±…κ³Ό μœ μ‚¬ν•œ SQSμ•‘μ„ΈμŠ€ 정책도 μžˆλ‹€.

SQSλŒ€κΈ°μ—΄μ— λŒ€ν•œ ꡐ차계정 μ•‘μ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•˜λ €λŠ” κ²½μš°λ‚˜ 곧 배울 SNS ν˜Ήμ€ S3 같은 λ‹€λ₯Έ μ„œλΉ„μŠ€κ°€ SQSλŒ€κΈ°μ—΄μ— S3이벀트 같은 것을 μ“Έ 수 μžˆλ„λ‘ ν—ˆμš©ν•˜λ €λŠ” κ²½μš°μ— 맀우 μœ μš©ν•˜λ‹€.

λŒ“κΈ€λ‚¨κΈ°κΈ°