๐Ÿ›๏ธ Architecture

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ• CH.5 ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ํ†ต์‹  ๊ตฌํ˜„

GroovyArea 2023. 12. 16. 16:42

5.1 ์ด์ƒ์ ์ธ ๊ธฐ์ˆ ์„ ์ฐพ์•„์„œ

  • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์–ฝํžŒ ๋งŒํผ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์‰ฝ๊ฒŒ ํ•ด์•ผ ํ•จ.
  • ๋ช…์‹œ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ
    • ๋ช…์‹œ์  ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋…ธ์ถœํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…์‹œ์ ์ž„์„ ๋ณด์žฅํ•œ๋‹ค.
  • ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด ๋‘๋˜, API๋ฅผ ๊ธฐ์ˆ  ์ค‘๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜์ž
    • “๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ๊ธฐ์ˆ ์Šคํƒ์„ ๊ฐ•์š”ํ•˜๋Š” ํ†ตํ•ฉ๊ธฐ์ˆ ์€ ํ”ผํ•ด์•ผ ํ•œ๋‹ค” ⇒ ์ดํ•ด๊ฐ€ ์•ˆ๋จ.
  • ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ฐ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์€๋‹‰ํ•˜๋ผ
    • ๋‚ด๋ถ€ ๊ตฌํ˜„ ์‚ฌํ•ญ์„ ์•Œ๊ฒŒ ๋˜๋ฉด ๊ฒฐํ•ฉ๋„๊ฐ€ ์ฆ๊ฐ€ํ•จ
    • ๋‚ด๋ถ€ ๊ตฌํ˜„ ์‚ฌํ•ญ ๋ณ€๊ฒฝ ์‹œ, ์†Œ๋น„์ž๋„ ๋ณ€๊ฒฝ์„ ํ•ด์•ผํ•˜๊ฒŒ ๋จ. → ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์ฆ๊ฐ€

5.2 ๊ธฐ์ˆ  ์„ ํƒ

  • RPC (Remote Procedure Call)
    • ์›๊ฒฉ ์„œ๋น„์Šค๋ฅผ ๋กœ์ปฌ์—์„œ ํ˜ธ์ถœํ•œ๋‹ค.
    • ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ๋งŒ ๊ฐ€๋Šฅ
    • ํด๋ผ์ด์–ด๋А ์ธก ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํ•˜๋“ฏ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์ด์ ์ด๋‹ค.
    • ๊ธฐ์ˆ  ๊ฒฐํ•ฉ์˜ ๋ฐœ์ƒ
      • gRPC ๋Š” ๋Œ€์ฒด ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›์„ ํ•˜์ง€๋งŒ, ์ƒํ˜ธ ์šด์šฉ์„ฑ์— ์ œ์•ฝ์ด ๋”ฐ๋ฅธ๋‹ค.
      • ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ  ๊ฒฐํ•ฉ์€ ๋‚ด๋ถ€ ๊ธฐ์ˆ ์˜ ๊ตฌํ˜„ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.
    • ๊ฒฐ๊ตญ ์›๊ฒฉ ํ˜ธ์ถœ์ด๋‹ค.
      • ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ์ „์†ก ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
      • ๋„คํŠธ์›Œํฌ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋‹ค.
        • ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ด๋ผ๋„ ๋„คํŠธ์›Œํฌ๋Š” ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ํŒจํ‚ท ๋ณ€์กฐ์˜ ์œ„ํ—˜์„ฑ๋„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•ด๋ผ
    • RPC ์˜ ์ ์šฉ ๋Œ€์ƒ
      • ๋„คํŠธ์›Œํฌ๊ฐ€ ์™„์ „ํžˆ ์ˆจ๊ฒจ์ ธ ์žˆ์„ ์ •๋„๋กœ ์›๊ฒฉ ํ˜ธ์ถœ์„ ์ถ”์ƒํ™”ํ•˜์ง€ ๋ง์ž
      • ํด๋ผ์ด์–ธํŠธ์— ์ƒ๊ด€ ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ์„  ์—ฌ๋ถ€๋ฅผ ๊ณ ๋ คํ•ด๋ผ
      • ๋™๊ธฐ์‹ ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ชจ๋ธ์— ์ ํ•ฉ
        • ๋ฐ˜์‘ํ˜• ํ™•์žฅ (reactive extension) ์—๋„ ์ ํ•ฉ
  • REST (Representational State Transfer)
    • ๋ฆฌ์†Œ์Šค (Resource) → ๊ฐ€์žฅ ์ค‘์š”
    • HATEOAS
      • ๋‹ค์–‘ํ•œ ํฌ๋งท์œผ๋กœ ๋œ ์—ฌ๋Ÿฌ ๋‹ค์–‘ํ•œ ์ปจํ…์ธ ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์ปจํ…์ธ ์— ํฌํ•จ๋œ ๊ฐœ๋…
      • ์ผ๋ฐ˜ ์›นํŽ˜์ด์ง€์—์„œ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ด๋‹ค.
        • ์•„๋งˆ์กด ์‡ผํ•‘ ์‚ฌ์ดํŠธ ์ƒ๊ฐ.
    • ์„ฑ๋Šฅ ๋ฌธ์ œ
      • HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ
      • ๋Œ€๋ถ€๋ถ„ TCP ์ง€๋งŒ, RPC ์—์„œ๋Š” UDP ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ ์šฉ ๋Œ€์ƒ
      • ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉ → ๋™๊ธฐ์‹ ์š”์ฒญ ๋ฐ ์‘๋‹ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ํ™•์‹คํ•œ ์„ ํƒ
      • ๊ฐ€์žฅ ๋„“๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฉ์‹
        • ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ
  • ๊ทธ๋ž˜ํ”„QL (GraphQL)
    • ๋ชจ๋ฐ”์ผ ์žฅ์น˜์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜์ง€๋งŒ, ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๋‹จ์ผ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ^ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜์— ๋…ธ์ถœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ๋ฌธ์ œ์ 
      • ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜๋Š” ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅ
        • ์„œ๋ฒ„ ์ธก์— ์ƒ๋‹นํ•œ ๋ถ€ํ•˜๋ฅผ ์ค€ ์‚ฌ๋ก€
        • SQL ๊ณผ ๋‹ฌ๋ฆฌ ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ๊ฐ€ ์—†์–ด์„œ ๋ฌธ์ œ ์ถ”์ ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค.
      • ์บ์‹ฑ์ด ์–ด๋ ต๋‹ค.
        • ๋ฐ˜ํ™˜ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ID ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์ƒ์„ฑ ํ›„ ID ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜๊ฐ€ ์บ์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ 
      • ์“ฐ๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์•„๋ณด์ธ๋‹ค.
    • ์ ์šฉ ๋Œ€์ƒ
      • ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ์— ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ฒฝ๊ณ„์—์„œ ์‚ฌ์šฉ
        • ๋ชจ๋ฐ”์ผ ์žฅ์น˜
      • ํ˜ธ์ถœ ์ง‘๊ณ„ ๋ฐ ํ•„ํ„ฐ๋ง ๋งค์ปค๋‹ˆ์ฆ˜
        • ํ•˜์œ„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ง‘๊ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
      • BFF (Backend For Frontend) ํŒจํ„ด์ด ๋Œ€์•ˆ
  • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค (Message Broker)
    • ๋ฏธ๋“ค์›จ์–ด
      • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์„ ๊ด€๋ฆฌ
    • ๋ฉ”์‹œ์ง€
      • ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ํฌํ•จ
    • ํ† ํ”ฝ๊ณผ ํ
      • ํ
        • ๋‘ ์ง€์  ๊ฐ„ (point to point)
        • ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋งค์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ž‘๋™ํ•จ (๊ฒฝ์Ÿ ์†Œ๋น„์ž ํŒจํ„ด)
        • ํ•˜๋‚˜์˜ ์†Œ๋น„์ž๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์Œ
        • ์š”์ฒญ ๋ฐ ์‘๋‹ต์— ์ ํ•ฉ
      • ํ† ํ”ฝ
        • ์—ฌ๋Ÿฌ ์†Œ๋น„์ž๊ฐ€ ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•˜์—ฌ ํ•ด๋‹น ๋ฉ”์‹œ์ง€์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ฐ›์Œ
        • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ˜‘์—… ๋ฐฉ์‹์— ์ ํ•ฉ
          • ์ด๋ฒคํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ์— ์œ ์šฉ
    • ์ „๋‹ฌ ๋ณด์žฅ๊ณผ ์‹ ๋ขฐ
      • ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ (exactly once)
        • ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ฒ ์ง€๋งŒ, ์ •๋ง ์‹ ๋ขฐ๊ฐ€ ๊นŠ์€ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ฐฉ์‹์ธ ๊ฒƒ ๊ฐ™๋‹ค.
        • ๋ณดํ†ต ๋ฉ”์‹œ์ง€์— ID ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ๊ตฌํ˜„

5.4 ์Šคํ‚ค๋งˆ

  • ๊ตฌ์กฐ์  ๊ณ„์•ฝ ์œ„๋ฐ˜
    • ์†Œ๋น„์ž๊ฐ€ ๋” ์ด์ƒ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์—”๋“œํฌ์ธํŠธ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ
      • ํ•„๋“œ, ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, ์ƒˆ๋กœ์šด ํ•„๋“œ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ ๋“ฑ๋“ฑ
    • ๊ทธ๋‚˜๋งˆ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์‰ฌ์›€
  • ์˜๋ฏธ์  ๊ณ„์•ฝ ์œ„๋ฐ˜
    • ๋‚ด๋ถ€ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋จ
    • ๋ฉ”์„œ๋“œ์˜ ์˜๋ฏธ๊ฐ€ ์†Œ๋น„์ž์˜ ๊ธฐ๋Œ€์™€ ๋‹ค๋ฅด๊ฒŒ ์ฒด๊ณ„๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ
  • ์†Œํ†ต๊ณผ ๋ฌธ์„œํ™”
    • ์ง€์†์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์šด์˜ ๋ฐ ํ•ด๊ฒฐํ•ด์•ผ.

5.6 ์ค‘๋‹จ ๋ณ€๊ฒฝ ํ”ผํ•˜๊ธฐ

  • ๊ด€๋Œ€ํ•œ ๋…์ž
  • ๋‹น์‹ ์ด ํ•˜๋Š” ์ผ์—๋Š” ์—„๊ฒฉํ•˜๊ณ , ๋‚จ์—๊ฒŒ์„œ ๋ฐ›์•„๋“ค์ผ ๋•Œ๋Š” ๋„ˆ๊ทธ๋Ÿฝ๊ฒŒ ํ•˜๋ผ
  • ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค
    • ์ˆจ๊ฒจ์ง„ ์ •๋ณด์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ๊ฒฐ๊ตญ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž
๋ฐ˜์‘ํ˜•