Posts Software Engineering MSA
Post
Cancel

Software Engineering MSA

MSA(Micro Service Architecture)


๐Ÿ’ฟ MSA

Monolith: โ€˜ํ•œ ๋ฉ์–ด๋ฆฌโ€™์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด ์šด์˜ํ•œ๋‹ค.

  • ๊ฐœ๋ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์„ค์ •์— ์žˆ์–ด์„œ ๊ฐ„๋‹จํ•˜๊ธฐ์— ์ž‘์€ ์‚ฌ์ด์ฆˆ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ,
  • ์‹œ์Šคํ…œ์ด ์ ์  ํ™•์žฅ๋˜๊ฑฐ๋‚˜ ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹จ์ ๋“ค์ด ์กด์žฌํ•œ๋‹ค.
    • ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์˜ ์ฆ๊ฐ€: ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•ด๋„ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋นŒ๋“œํ•ด์•ผํ•จ, ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๋‹ค.
    • ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ด: ์„œ๋น„์Šค ํ•˜๋‚˜์˜ ํŠธ๋ž˜ํ”ฝ ๋ฌธ์ œ๋กœ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ์ด์šฉ ๋ถˆ๊ฐ€๋Šฅํ•ด ์ง„๋‹ค.
    • ํ™•์žฅ์„ฑ์— ๋ถˆ๋ฆฌ: ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์žฅํ•ด์•ผ ํ•œ๋‹ค.

MSA: ๋‹จ์ผ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ ์ปดํฌ๋„ŒํŠธ ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์€ ์„œ๋น„์Šค์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•

image

image

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


๐Ÿ’ฟ MSA ํ‘œ์ค€ ๊ตฌ์„ฑ์š”์†Œ

image

MSA๋Š” ํฌ๊ฒŒ Inner Architecture ์™€ Outer Architecture๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ ๋‚จ์‹ ๋ถ€๋ถ„์€ Inner ์ด๊ณ  ํšŒ์‹ ๋ถ€๋ถ„์€ Outer ์ž…๋‹ˆ๋‹ค.

Inner Architecture

  • ๊ณ ๋ ค ์‚ฌํ•ญ
    • ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜(๋‚˜๋ˆŒ)ํ•  ๊ฒƒ์ธ๊ฐ€.
      • ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ ๋น„์ฆˆ๋‹ˆ์Šค, ์„œ๋น„์Šค ๊ฐ„ ์ข…์†์„ฑ, ๋ฐฐํฌ ์šฉ์ด์„ฑ, ์žฅ์•  ๋Œ€์‘, ์šด์˜ ํšจ์œจ์„ฑ
    • DB Access ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ๊ฒƒ์ธ๋‹ค.
      • MSA๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ๊ด€๋œ API๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ์„œ๋น„์Šค์—๋Š” ์ž์ฒด์˜ DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ผ๋ถ€ ํŠธ๋žœ์žญ์…˜์€ ์—ฌ๋Ÿฌ microService์— ๊ฑธ์ณ ์žˆ๊ธฐ ๋–„๋ฌธ์— ๊ฐ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋œ DB์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์ด ํ•„์š”
    • api ์„ค๊ณ„
    • ๋…ผ๋ฆฌ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ Layer๋Š” ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ๊ฒƒ์ธ๊ฐ€.
      • ๋„์ปค layer์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

Inner Architecture

image

์œ„์™€ ๊ฐ™์ด Gartner์—์„œ๋Š” MSA์˜ Outer architecture์„ ์ด 6๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. External Gateway
  2. Service Mash
  3. Container Management
  4. Backing Services
  5. Telemetry
  6. CI/CD Automation

๐Ÿ’ฟ Inner Architecture

External Gateway

image

์ „์ฒด ์„œ๋น„์Šค ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜ค๋Š” ์ ‘๊ทผ์„ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋“œ๋Ÿฌ๋‚ด์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ธ์ฆ(Consumer Identity Provider)๊ณผ ๊ถŒํ•œ ์ •์ฑ… ๊ด€๋ฆฌ(policy management)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, API Gateway๊ฐ€ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Service Mesh

image

๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ (๋„คํŠธ์›Œํฌ)์„ ๋‹ด๋‹นํ•˜๋Š” ์š”์†Œ

  • ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ๊ตฌ์„ฑ ์š”์†Œ๊ฐ„ ์ƒํ˜ธ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” Service Discovery, ์„œ๋น„์Šค ๋ผ์šฐํŒ…, Failure recovery, load balancing(ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ), ๋ณด์•ˆ ๋“ฑ์˜ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค
  • Service Mesh๋Š” ํ†ต์‹  ๋ฐ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•œ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์ธํ”„๋ผ. ๋ชจ๋“  ์„œ๋น„์Šค์˜ ์ธํ”„๋ผ ๋ ˆ์ด์–ด๋กœ์„œ ์„œ๋น„์Šค๋“ค ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์œ„์˜ ์–ธ๊ธ‰๋œ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ํฌํ•จ

API Gateway์™€์˜ ์ฐจ์ด์ 

  • ์ ์šฉ๋˜๋Š” ์œ„์น˜
    • API Gateway๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ทธ๋ฃน์˜ ์™ธ๋ถ€ ๊ฒฝ๊ณ„์— ์œ„์น˜ํ•˜์—ฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ServiceMesh๋Š” ๊ฒฝ๊ณ„ ๋‚ด๋ถ€์—์„œ ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์•„ํ‚คํ…์ณ ํ˜•ํƒœ
    • API Gateway๊ฐ€ ์ค‘์•™์ง‘์ค‘ํ˜• ์•„ํ‚คํ…์ณ์—ฌ์„œ SPOF(Single Point of Failure)์„ ์ƒ์„ฑํ•œ๋‹ค๋ฉด,
    • Service Mesh๋Š” ๋ถ„์‚ฐํ˜• ์•„ํ‚คํ…์ณ๋ฅผ ์ทจํ•˜๊ธฐ ๋•Œ๋ฌธ์— SPOF๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํ™•์žฅ์ด ์šฉ์ด
  • ํŒจํ„ด
    • API Gateway๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Gateway proxy pattern์„ ์‚ฌ์šฉํ•ด์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. Consumer(ํ˜ธ์ถœ์ž)์€ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์•Œ ํ•„์š” ์—†์ด Gateway๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์•Œ๋ฉด Gateway๊ฐ€ ์•Œ์•„์„œ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ๋ฐฉ์‹
    • Sidecar proxy pattern์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Consumer(ํ˜ธ์ถœ์ž)์˜ ์ฝ”๋“œ์—๋Š” Provider(๊ณต๊ธ‰์ž)์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š”๋ฐฉ๋ฒ•, failover์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ ๋“ฑ์˜ ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ํ˜ธ์ถœ์ž์˜ ์ฝ”๋“œ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์— ๋‚ด์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ sidecar ํ˜•ํƒœ๋กœ ๋ณ„๊ฐœ๋กœ ๊ด€๋ฆฌ

์ตœ๊ทผ MSA์—์„œ API Gateway๋Š” ๋…ธ์ถœ๋˜๋Š” ๋ถ€๋ถ„์— ์œ„์น˜ํ•˜์—ฌ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋ฅผ ๋ณดํ˜ธ ๋ฐ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ ,

Service Mesh๋Š” ๋‚ด๋ถ€ ์„œ๋น„์Šค์— ์œ„์น˜ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋จ

์œ ํ˜•

  1. PaaS (Platform as a Service)์˜ ์ผ๋ถ€๋กœ ์„œ๋น„์Šค ์ฝ”๋“œ์— ํฌํ•จ๋˜๋Š” ์œ ํ˜•
    • Microsoft Azure Service fabric, lagom, SENECA ๋“ฑ์ด ์ด ์œ ํ˜•์— ํ•ด๋‹น๋˜๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋น„์Šค๋ฉ”์‰ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์— ํŠนํ™”๋œ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ( Mesh-native Code )
  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌํ˜„๋˜์–ด API ํ˜ธ์ถœ์„ ํ†ตํ•ด Service mesh์— ๊ฒฐํ•ฉ๋˜๋Š” ์œ ํ˜•
    • Spring Cloud, Netflix OSS(Ribbon/Hystrix/Eureka/Archaius), finagle ๋“ฑ์ด ์ด ์œ ํ˜•์— ํ•ด๋‹น๋˜๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ด์ค‘ Netfilix์˜ Prana๋Š” sidecar ํ˜•ํƒœ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (Mesh Aware Code)
  3. Side car proxy๋ฅผ ์ด์šฉํ•˜์—ฌ Service mesh๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์ฃผ์ž…ํ•˜๋Š” ์œ ํ˜•
    • Istio/Envoy, Consul, Linkerd ๋“ฑ์ด ์ด ์œ ํ˜•์— ํ•ด๋‹น๋˜๋ฉฐ, sidecar proxy ํ˜•ํƒœ๋กœ ๋™์ž‘๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค๋ฉ”์‹œ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Container Management

image

์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์šด์˜์€ ์œ ์—ฐ์„ฑ๊ณผ ์ž์œจ์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์†์‰ฝ๊ฒŒ ์ ‘๊ทผ ๋ฐ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ”„๋ผ ๊ด€๋ฆฌ ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ์— MSA์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ํ‰๊ฐ€๋ฐ›๊ณ  ์žˆ์Œ

kubernetes์— ๊ด€ํ•œ ๊ฒƒ์€ ๋”ฐ๋กœ Post์—์„œ ๋‹ค๋ฃจ๊ฒŸ์Œ

Backing Service

image

MSA ์—์„œ ํŠน์ง•์ ์ธ Backing Service ์ค‘ ํ•˜๋‚˜์ธ Message queue

MSA์—์„œ๋Š” ๋ฉ”์„ธ์ง€์˜ ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž๊ฐ€ ์ง์ ‘ ํ†ต์‹ ํ•˜์ง€ ์•Š๊ณ  Message Queue๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•จ

Message Queue๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ•ํ•œ ๊ฒฐํ•ฉ ๊ตฌ์กฐ์˜ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๊ฑธ์น˜๋Š” ์‹ค์‹œ๊ฐ„ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆฐ๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜์ด ๋Š์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์„œ๋น„์Šค ์š”์ฒญ์„ ๋ณด์กดํ•  ์ˆ˜ ์—†๊ณ  ํฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

MSA์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด๋‚˜, ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜๊ณผ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋Š” Message Queue๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ Message Queue์—๋Š” ์นดํ”„์นด, RabbitMq ๋“ฑ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ์ถ”ํ›„์— ๋‹ค์‹œ ๋‹ค๋ฃจ๊ฒ ์Œ

Telemetry

์‹ค์‹œ๊ฐ„ ์›๊ฒฉ ์„ฑ๋Šฅ ์ธก์ •

MSA์—์„œ ์ƒ๋‹น์ˆ˜์˜ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์šด์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋“ค์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ด์Šˆ์— ๋Œ€์‘ํ•˜๋Š”๊ฒƒ์€ ๋งค์šฐ ๊ณ ๋˜๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ผ

Telemetry๋Š” ์„œ๋น„์Šค๋“ค์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ์„œ๋น„์Šค๋ณ„๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋“ค์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ญํ• 

Grafana + Prometheus๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๋กœ๊ทธ ์ €์žฅ์ด ๊ฐ€๋Šฅ ์ด๋„ ์ถ”ํ›„์— ๋‹ค๋ฃจ๊ฒ ์Œ

This post is licensed under CC BY 4.0 by the author.

Operation System 3 thread 1

Operation System 3 thread 2