Aspire를 사용한 Runtime과 Observability

Lino๊ฐ€ ์„œ๋น„์Šค, web apps, ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„ Aspire๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์‹œ์„ฑ ์žˆ๊ฒŒ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. Observability๋Š” ์‚ฌ์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. APIs, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, cache, messaging, workers๊ฐ€ ์ •์ƒ์ธ์ง€ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

events, Outbox, workers, Redis, RabbitMQ, ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ํ™”๋ฉด์—๋งŒ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. logs, queues, jobs, migrations, ํŒŒ๋ผ๋ฏธํ„ฐ, runtime ๋ฆฌ์†Œ์Šค์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์€ ์†”๋ฃจ์…˜์„ ์ƒ์„ฑ๋œ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ์‹คํ–‰ ์ค‘์ธ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

Aspire๋กœ ์‹คํ–‰

AppHost๋Š” ์†”๋ฃจ์…˜์˜ ๋กœ์ปฌ ์‹คํ–‰์„ ํ•œ๊ณณ์— ๋ชจ์๋‹ˆ๋‹ค. ์„œ๋น„์Šค, web apps, PostgreSQL, Redis, RabbitMQ, workers ๊ฐ™์€ ์˜์กด์„ฑ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

dotnet run --project src/Aspire/AppHost/<ProjectName>.AppHost.csproj

dashboard๋ฅผ ์‚ฌ์šฉํ•ด logs, ๋ณ€์ˆ˜, endpoints, ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์œผ๋ฉด AppHost์™€ AppHost๊ฐ€ ์ฃผ์ž…ํ•˜๋Š” ์˜์กด์„ฑ๋ถ€ํ„ฐ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Aspire๋Š” ๋กœ์ปฌ ํ† ํด๋กœ์ง€๋ฅผ ๋ณด์ด๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. APIs, web apps, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, cache, message broker, workers๊ฐ€ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ทฐ๋Š” ์ž˜๋ชป๋œ connection string, ๋ˆ„๋ฝ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ, endpoint๊ฐ€ ์—†๋Š” ์„œ๋น„์Šค, ์•„์ง ์‹œ์ž‘๋˜์ง€ ์•Š์€ ์˜์กด์„ฑ์ฒ˜๋Ÿผ ์ˆ˜๋™ ์‹คํ–‰์—์„œ๋Š” ์ˆจ๊ฒจ์งˆ ์ˆ˜ ์žˆ๋Š” ์„ค์ • ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

  • Logs: ์ดˆ๊ธฐํ™” ์˜ค๋ฅ˜, ์ธ์ฆ ์‹คํŒจ, migrations ๋ฌธ์ œ, worker ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  • Endpoints: ํฌํŠธ, URLs, health checks, web apps ๋ฐ APIs ๋งํฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • Parameters: ๊ฐ ์„œ๋น„์Šค๋กœ ์ „ํŒŒ๋˜๋Š” secrets์™€ ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  • Dependencies: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง„๋‹จํ•˜๊ธฐ ์ „์— Redis, RabbitMQ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ provision ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฆฌ์†Œ์Šค

Lino๊ฐ€ ์ƒ์„ฑํ•œ ์„œ๋น„์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฒด DbContexts, migrations, connection strings๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ˜• ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ฐ ๋ชจ๋“ˆ์ด ์˜ˆ์ƒํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/schema๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, migrations๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜์‹ญ์‹œ์˜ค.

  • ํ™˜๊ฒฝ๋ณ„ connection strings๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ schema์— ์˜์กดํ•˜๋Š” ํ๋ฆ„์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ „์— migrations๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์‹คํŒจ์™€ query ์‹œ๊ฐ„์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ์‹คํ–‰์—์„œ ์šด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋‹จ์ˆœํ•œ ์„œ๋น„์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ˜• ์„œ๋น„์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์„œ๋น„์Šค์— ์†ํ•˜์ง€๋งŒ, ๊ฐ ๋ชจ๋“ˆ์€ ์ž์ฒด schema, DbContext, migrations, scripts๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ„๋ฆฌ๋Š” ์šด์˜์—๋„ ๋“œ๋Ÿฌ๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. migrations๋ฅผ ์ ์šฉํ•  ๋•Œ๋Š” ์‹คํ–‰ ์ „์— ์„œ๋น„์Šค, ๋ชจ๋“ˆ, provider, ํ™˜๊ฒฝ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฅ์• ๋Š” ๋ณดํ†ต API ์˜ค๋ฅ˜๋กœ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ, ์›์ธ์€ AppHost, connection string, ๋ณด๋ฅ˜ ์ค‘์ธ migration, ์กด์žฌํ•˜์ง€ ์•Š๋Š” schema ๋˜๋Š” ๋กœ์ปฌ ์ž๊ฒฉ ์ฆ๋ช…์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง„๋‹จ์€ ์ „์ฒด ์ฒด์ธ์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Aspire ํŒŒ๋ผ๋ฏธํ„ฐ, ํ™œ์„ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฆฌ์†Œ์Šค, ์ ์šฉ๋œ migration, ์˜ฌ๋ฐ”๋ฅธ DbContext, ์˜ˆ์ƒํ•œ ๋ชจ๋“ˆ์„ ํ˜ธ์ถœํ•˜๋Š” endpoint์ž…๋‹ˆ๋‹ค.

Redis์™€ cache

Redis๋Š” ํ™œ์„ฑํ™”๋œ templates์— ๋”ฐ๋ผ cache, ์ž„์‹œ ์ƒํƒœ, tokens, rate limiting ๋˜๋Š” ๊ธฐํƒ€ ๋ฆฌ์†Œ์Šค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. cache๋Š” ์„ฑ๋Šฅ์„ ๋†’์ด์ง€๋งŒ invalidation๊ณผ eventual consistency๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค, ๋งŒ๋ฃŒ ์‹œ๊ฐ„, ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜๋ฅผ ๋ฌธ์„œํ™”ํ•˜์‹ญ์‹œ์˜ค. ์•”ํ˜ธํ™”, ๋งŒ๋ฃŒ, ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ์—์„œ ๋ฏผ๊ฐํ•œ secrets๋ฅผ cache์— ์ €์žฅํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ถ„์‚ฐ cache๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ’์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด ์ˆ˜ํ‰ ํ™•์žฅ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ธ๋ฉ”๋ชจ๋ฆฌ cache๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์ฒด ๋ณต์‚ฌ๋ณธ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฐจ์ด๋Š” ์šด์˜ ํ™˜๊ฒฝ ๋™์ž‘, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ, ๋ฐ์ดํ„ฐ invalidation์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

์งˆ๋ฌธ์ค‘์š”ํ•œ ์ด์œ 
cache๋œ ๋ฐ์ดํ„ฐ์˜ ์ถœ์ฒ˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ invalidation๋  ๋•Œ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ๊ณ„์‚ฐํ• ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ TTL์€ ์–ผ๋งˆ์ž…๋‹ˆ๊นŒ?์‹œ์Šคํ…œ์ด ์ž ์žฌ์ ์œผ๋กœ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ํ—ˆ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
cache๋Š” tenant๋ณ„, ์‚ฌ์šฉ์ž๋ณ„ ๋˜๋Š” ์ „์—ญ์ž…๋‹ˆ๊นŒ?์ปจํ…์ŠคํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์œ ์ถœ๊ณผ ์ž˜๋ชป ๋ชจ๋ธ๋ง๋œ ํ‚ค๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

RabbitMQ์™€ messaging

messaging์€ integration events์™€ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ๋’ท๋ฐ›์นจํ•ฉ๋‹ˆ๋‹ค. Outbox๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์€ ์ˆœ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ publishํ•˜๋Š” ๊ฒƒ์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฉฐ, worker๊ฐ€ ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒ์„ฑ๋œ exchanges, queues, bindings๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉˆ์ถ˜ ๋ฉ”์‹œ์ง€์™€ ๋น„ํ™œ์„ฑ consumers๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  • idempotentํ•œ handlers๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • correlation logs๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

integration events๊ฐ€ ์œ ์šฉํ•œ ์ด์œ ๋Š” producer๊ฐ€ ๋ชจ๋“  consumers๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋กœ ์ธํ•ด ๋ณต์žก์„ฑ์˜ ์ผ๋ถ€๊ฐ€ ์šด์˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋Š” ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๊ณ , consumers๋Š” ์‹คํŒจํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, payloads๋Š” ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ณ , handlers๋Š” ๋‘ ๋ฒˆ ์ด์ƒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ๋ฆ„ ๋ฌธ์„œ๋Š” ์–ด๋–ค event๊ฐ€ publish๋˜๋Š”์ง€, ๋ˆ„๊ฐ€ consumeํ•˜๋Š”์ง€, ์–ด๋–ค ๋กœ์ปฌ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Shadow Entities๋Š” ์ด๋Ÿฌํ•œ observability์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. tenant ๋˜๋Š” ์‚ฌ์šฉ์ž entity๊ฐ€ event๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ณต์ œ๋˜๋Š” ๊ฒฝ์šฐ consumer ์‹คํŒจ๋กœ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์ด ์˜ค๋ž˜๋œ ์ƒํƒœ๋กœ ๋‚จ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ event, ๋ฉ”์‹œ์ง€, handler, consumer ๋ชจ๋“ˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜ํ–‰๋œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Hangfire Dashboard

background jobs๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด Hangfire Dashboard๋Š” ๋ฐ˜๋ณต jobs, ์‹คํŒจ, retries, Outbox ์ฒ˜๋ฆฌ ์‹คํ–‰์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ณต์œ  ํ™˜๊ฒฝ์—์„œ๋Š” dashboard๋ฅผ ๋ณดํ˜ธํ•˜์‹ญ์‹œ์˜ค. ๊ด€๋ จ ์šด์˜ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•˜๋ฏ€๋กœ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ ์—†์ด ๊ณต๊ฐœ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

dashboard๋ฅผ ์ง„๋‹จ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋˜ logs์™€ metrics์˜ ๋Œ€์ฒด๋ฌผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. queues, ์‹œ๋„ ํšŸ์ˆ˜, ์‹คํ–‰ ์ด๋ ฅ์„ ๋ณด์—ฌ ์ฃผ์ง€๋งŒ, job์ด ์‹คํŒจํ•œ ์ด์œ ๋ฅผ ์™„์ „ํžˆ ์กฐ์‚ฌํ•˜๋ ค๋ฉด correlation id, ๊ตฌ์กฐํ™”๋œ logs, ๋น„์ฆˆ๋‹ˆ์Šค ์ปจํ…์ŠคํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Retries: ์‹คํŒจ๊ฐ€ ์ผ์‹œ์ ์ธ์ง€, ๋˜๋Š” job์ด ๊ณ„์† ์‹คํŒจํ•  ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต jobs: ๊ฐ„๊ฒฉ, ๋ฐฐ์น˜, ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • Outbox: ๋ฉˆ์ถ˜ ๋ฉ”์‹œ์ง€, ์žฌ์ฒ˜๋ฆฌ, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ handlers๋ฅผ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค.
  • Security: payloads์™€ ์˜ค๋ฅ˜๊ฐ€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ‘๊ทผ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

Workers์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ฒ˜๋ฆฌ

Workers๋Š” HTTP ์š”์ฒญ์„ ์ฐจ๋‹จํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์ „์†ก, Outbox ์ฒ˜๋ฆฌ, ์ •๋ฆฌ, ๋™๊ธฐํ™”, ์™ธ๋ถ€ ํ†ตํ•ฉ ๋“ฑ์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณผ๋ฅจ์— ๋งž๋Š” ๋ฐฐ์น˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • retries์™€ ์‹คํŒจ ์ฒ˜๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ์ฒ˜๋ฆฌ์— ์ถฉ๋ถ„ํ•œ ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ์˜๊ตฌ์ ์ธ ์‹คํŒจ๋ฅผ ์ผ๋ฐ˜์ ์ธ logs์— ์ˆจ๊ธฐ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

worker๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋นˆ๋„, ๋ฐฐ์น˜ ํฌ๊ธฐ, ์‹คํŒจ ์‹œ ๋™์ž‘, ๋„๋ฉ”์ธ ์˜ํ–ฅ๋„ ํ•จ๊ป˜ ์ •์˜ํ•˜์‹ญ์‹œ์˜ค. ๋ช‡ ์ดˆ๋งˆ๋‹ค 100๊ฐœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” worker๋Š” ์ผ์ผ job๊ณผ ๋‹ค๋ฅธ ์šด์˜ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์‹ค์ œ ๋ณผ๋ฅจ์— ๋”ฐ๋ผ ๊ด€์ฐฐํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰์‹œ ์‘๋‹ตํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ background์—์„œ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. worker๋Š” ํ›„์† ์ž‘์—…, ํ†ตํ•ฉ, ์•Œ๋ฆผ, ์žฌ์ฒ˜๋ฆฌ, ์œ ์ง€๋ณด์ˆ˜์— ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์œ ์Šค์ผ€์ด์Šค๊ฐ€ ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ๋ฅผ ์œ„ํ•ด ๊ฒฐ๊ณผ์— ์˜์กดํ•œ๋‹ค๋ฉด ๋™๊ธฐ ํ๋ฆ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์ค‘๊ฐ„ ์ƒํƒœ๋ฅผ ๋ชจ๋ธ๋งํ•˜์‹ญ์‹œ์˜ค.

처리되지 않은 오류가 발생했습니다. 새로 고침 ๐Ÿ—™