Amazon SQS
SQSμ ν΅μ¬μ λκΈ°μ΄
- SQS λ κ°λ¨ν λκΈ° μλΉμ€μ΄λ€.
- SQS λκΈ°μ΄μλ λ©μμ§λ₯Ό ν¬ν¨ν μ μλ€.
- λ©μμ§λ₯Ό λ΄κΈ° μν΄μλ λκ΅°κ°κ° QueueλκΈ°μ΄μ λ©μμ§λ₯Ό μ μ‘ν΄μΌ νλ€.
- μμ°μ(producer)
- SQSλκΈ°μ΄μ λ©μμ§λ₯Ό 보λ΄λ 주체
- μμ°μλ ν κ° or κ·Έ μ΄μμ΄ λ μ μλ€.
- μ¬λ¬ μμ°μκ° μ¬λ¬ κ°μ λ©μμ§λ₯Ό SQS λκΈ°μ΄μ λ³΄λΌ μ μλ€.
- λ©μμ§λ 무μμ΄λ μκ΄μλ€.
- μ€λλ₯Ό μ²λ¦¬ν΄λΌ, λΉλμ€λ₯Ό μ²λ¦¬ν΄λΌ.. λ±λ± etcβ¦
- μμ±ν λͺ¨λ λ©μμ§λ λκΈ°μ΄μ λ€μ΄κ°λ€.
- μλΉμ(consumer)
- λκΈ°μ΄μμ λ©μμ§λ₯Ό μ²λ¦¬νκ³ μμ ν΄μΌ νλ λμ
- λκΈ°μ΄Queueμμ λ©μμ§λ₯Ό ν΄λ§(polling) νλ€.
- λκΈ°μ΄μκ² μλΉμ μμΌλ‘ μ¨ λ©μμ§κ° μλμ§λ₯Ό λ¬Όμ΄λ³΄λ κ²
- λκΈ°μ΄μ λ©μμ§κ° μμΌλ©΄ μλΉμλ μ΄ λ©μμ§λ₯Ό ν΄λ§ν΄μ μ 보λ₯Ό μ»λλ€.
- λ©μμ§λ₯Ό μ²λ¦¬νκ³ λκΈ°μ΄μμ κ·Έ λ©μμ§λ₯Ό μμ
- μ¬λ¬ μλΉμκ° SQSλκΈ°μ΄μμ λ©μμ§λ₯Ό μλΉν μ μλλ‘ ν μλ μλ€.
- μμ°μ(producer)
- 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
λ©μμ§ μμ°μ
- μ΅λ 256KBμ λ©μμ§κ° μμ°μμ μν΄ SQSλ‘ μ μ‘ (using SDK, SendMessage API)
- λ©μμ§κ° μμ±λλ©΄ μλΉμκ° ν΄λΉ λ©μμ§λ₯Ό μ½κ³ μμ ν λκΉμ§ SQSλκΈ°μ΄μ μ μ§λλ€.
- λ©μμ§κ° μμ λμλ€λ κ²μ λ©μμ§κ° μ²λ¦¬λλ€λΌλ λ»
-
λ©μμ§ λ³΄μ‘΄κΈ°κ° 4μΌ~14μΌ (default, 4μΌ)
- λ©μμ§ μμ±μ μ΄λ¨λ νλκ°?
- ν¨ν·κ³Ό κ°μ μ€λλ₯Ό μ²λ¦¬ν λ€μ μΌν°λ‘ λ°°μ‘νλ €κ³ νλ€.
- μνλ μκ°μ μ΄ μμ
μ μννμ¬ OrderId, ConsumerId μ μνλ μμ± λ±μ μΌλΆ μ λ³΄κ° ν¬ν¨λ λ©μμ§λ₯Ό SQSλκΈ°μ΄λ‘ 보λΈλ€.
- μ£Όμ, ν΄λν°λ²νΈ λ± μνλ μμ±λ λ€μ΄κ° μ μλ€.
- μ ν리μΌμ΄μ κΆνμ μλ μλΉμλ ν΄λΉ λ©μμ§ μ체λ₯Ό μ²λ¦¬ν΄μΌ νλ€.
- Standard SQSλ 무μ νμ μ²λ¦¬λμ κ°μ§κ³ μλ€.
03. SQS - Consuming Messages
λ©μμ§ μλΉμ
-
μλΉμλ μΌλΆ μ½λλ‘ μμ±ν΄μΌ νλ μ ν리μΌμ΄μ μ΄λ€.
-
μ΄λ¬ν μ ν리μΌμ΄μ μ EC2, μ¦ AWSμμ κ°μ μλ²μμ μ€νλ μ μλ€.
- EC2, Server, Lambda. ,,, etc
- λλ€μμ λ©μμ§λ₯Ό λ°λ‘ μ½μ μλ μλ€.
-
Consumerκ° μκ³ , μλΉμλ SQSλ©μμ§λ₯Ό ν΄λ§νλ€.
-
μλΉμκ° λκΈ°μ΄μ μμ μ μμΌλ‘ μ¨ λ©μμ§κ° μλμ§λ₯Ό νμΈνλ€.
-
μλΉμλ ν λ²μ μ΅λ 10κ°μ λ©μμ§λ₯Ό λ°λλ€.
-
SQSλκΈ°μ΄μ λ©μμ§κ° μμΌλ©΄ βλκΈ°μ΄μ μ ν¨ν λ©μμ§κ° μλ€β λΌλ μλ΅μ λ°λλ€.
-
μ΄ λ©μμ§λ₯Ό μ²λ¦¬νλ©΄ λλ€.
-
λ©μμ§ μ²λ¦¬νμ SDK DeleteMessage API λ₯Ό ν΅ν΄ λκΈ°μ΄μμ μμ νλ€.
- λ€λ₯Έ μλΉμλ€μ΄ μ΄ λ©μμ§λ₯Ό λ³Ό μ μκ² λλ€. (λ©μμ§ μ²λ¦¬ μλ£)
04. SQS - Multiple EC2 Instances Consumers
SQSλκΈ°μ΄μ λ©μμ§κ° λ§μμ Έμ, μ²λ¦¬λμ λλ €μΌ νλ©΄ μλΉμ(Consumer)λ₯Ό μΆκ°νκ³ μν νμ₯μ μνν΄μ μ²λ¦¬λμ κ°μ ν μ μλ€.
- λ§μ½ λ©μμ§κ° μλΉμμ μν΄ λΉ λ₯΄κ² μ²λ¦¬λμ§ μμΌλ©΄ λ€λ₯Έ μλΉμκ° μμ νκ² λ κ°λ₯μ±μ΄ μλ€.
- κ·Έλ κΈ° λλ¬Έμ μ μ΄λ νλ²μ μ μ‘μ΄ λλ€ λΌκ³ ννν¨
- μ¬λ¬ μλΉμλ₯Ό λμμ κ°μ§ μ μλ€.
05. SQS - with Auto Scaling Group (ASG)
ASG(Auto Scaling Groups)μ λλΆμ΄ SQSλ₯Ό μ¬μ©νλ μλ²½ν μ¬λ‘μ΄λ€.
- μλΉμκ° ASG λ΄λΆμμ EC2 μΈμ€ν΄μ€λ₯Ό μ€ν
- SQSλκΈ°μ΄μμ λ©μμ§λ₯Ό ν΄λ§
- ASG μΌμ’
μ§νμ λ°λΌ νμ₯λμ΄μΌ νλλ°, μ¬μ©ν μ μλ μ§νλ λκΈ°μ΄μ κΈΈμ΄ μ΄λ€.
- ApproximateNumberOfMessages λΌκ³ νλ€.
- μ΄λ λͺ¨λ SQSλκΈ°μ΄μμ μΈ μ μλ CloudWatch μ§νμ΄λ€
- μλμ μ€μ ν μλ μλλ° λκΈ°μ΄μ κΈΈμ΄κ° νΉμ μμ€μ λμ΄κ°λ©΄ CloudWatch Alarm μ μ€μ κ°λ₯
λ§μ½ μΉμ¬μ΄νΈμ Orderμ£Όλ¬Έμ΄ νμ£Όνλ€κ±°λ ASGμ΄ λ λ§μ EC2 μΈμ€ν΄μ€λ₯Ό μ 곡νλ©΄ λ©μμ§λ€μ λ λμ μ²λ¦¬λμΌλ‘ μ²λ¦¬ν μ μκ² λλ€.
- Queueμ λ©μμ§ μμ΄λ©΄ Worker/ Consumer κ°μκ±° λλ €μ κ·Έλ₯ μ²λ¦¬λ₯Ό λΉ λ₯΄κ² νλΌλ λ»
06. SQS - decouple between Application tiers
SQSλ μ ν리μΌμ΄μ κ³μΈ΅ κ°μ λΆλ¦¬λ₯Ό μν΄ μ¬μ©λλ€.
- λΉλμ€λ₯Ό μ²λ¦¬νλ 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μ΄λ²€νΈ κ°μ κ²μ μΈ μ μλλ‘ νμ©νλ €λ κ²½μ°μ λ§€μ° μ μ©νλ€.
λκΈλ¨κΈ°κΈ°