[{"data":1,"prerenderedAt":1038},["ShallowReactive",2],{"docs:\u002Fko\u002Fguide\u002Fgetting-started":3},{"page":4,"untranslated":1037,"translated":253},{"id":5,"title":6,"body":7,"description":1028,"extension":1029,"meta":1030,"navigation":253,"path":1031,"publishedAt":1032,"seo":1033,"stem":1034,"updatedAt":1035,"__hash__":1036},"docs_ko\u002Fko\u002Fguide\u002Fgetting-started.md","Getting Started",{"type":8,"value":9,"toc":1018},"minimark",[10,14,19,31,35,87,91,107,134,155,183,196,199,217,381,388,405,412,450,454,471,857,883,887,912,933,937,951,986,990,1014],[11,12,6],"h1",{"id":13},"getting-started",[15,16,18],"h2",{"id":17},"前提条件","사전 요구 사항",[20,21,22,23,26,30],"p",{},"Workers Paid 플랜이 활성화된 Cloudflare 계정이 필요합니다.",[24,25],"br",{},[27,28,29],"code",{},"compatibility_date","는 2025-11-17 이후로 설정하세요.",[15,32,34],{"id":33},"インストール","설치",[36,37,42],"pre",{"className":38,"code":39,"language":40,"meta":41,"style":41},"language-bash shiki shiki-themes github-light github-dark","pnpm create cloudflare@latest my-jobs --type=hello-world\ncd my-jobs\npnpm add tsumugi\n","bash","",[27,43,44,67,76],{"__ignoreMap":41},[45,46,49,53,57,60,63],"span",{"class":47,"line":48},"line",1,[45,50,52],{"class":51},"sScJk","pnpm",[45,54,56],{"class":55},"sZZnC"," create",[45,58,59],{"class":55}," cloudflare@latest",[45,61,62],{"class":55}," my-jobs",[45,64,66],{"class":65},"sj4cs"," --type=hello-world\n",[45,68,70,73],{"class":47,"line":69},2,[45,71,72],{"class":65},"cd",[45,74,75],{"class":55}," my-jobs\n",[45,77,79,81,84],{"class":47,"line":78},3,[45,80,52],{"class":51},[45,82,83],{"class":55}," add",[45,85,86],{"class":55}," tsumugi\n",[15,88,90],{"id":89},"セットアップ","설정",[36,92,94],{"className":38,"code":93,"language":40,"meta":41,"style":41},"npx tsumugi init\n",[27,95,96],{"__ignoreMap":41},[45,97,98,101,104],{"class":47,"line":48},[45,99,100],{"class":51},"npx",[45,102,103],{"class":55}," tsumugi",[45,105,106],{"class":55}," init\n",[20,108,109,110,113,114,117,118,117,121,117,124,127,128,130,131,133],{},"새 프로젝트에서 ",[27,111,112],{},"init","을 실행하면 필요한 Cloudflare 리소스를 만들고 ",[27,115,116],{},"wrangler.jsonc",", ",[27,119,120],{},"src\u002Findex.ts",[27,122,123],{},"src\u002Fperformers\u002F",[27,125,126],{},".dev.vars","를 생성합니다.",[24,129],{},"\n마지막으로 데이터베이스 마이그레이션을 적용하고 종료합니다.",[24,132],{},"\n중간에 실패하면 경고와 함께 다시 실행할 명령을 출력합니다.",[20,135,136,137,139,140,142,143,145,146,148,149,154],{},"wrangler 설정 파일이 이미 있으면 ",[27,138,112],{},"은 설정 파일을 수정하지 않고 추가해야 할 내용을 출력합니다.",[24,141],{},"\n이 경우 마이그레이션도 적용되지 않습니다.",[24,144],{},"\n설정 파일을 편집한 후 출력된 절차에 따라 마이그레이션을 적용하세요.",[24,147],{},"\n옵션과 생성되는 파일은 ",[150,151,153],"a",{"href":152},"\u002Fko\u002Freference\u002Fcli","CLI","에서 설명합니다.",[20,156,157,160,161,163,164,166,167,169,170,117,174,117,178,182],{},[27,158,159],{},"TSUMUGI_METRICS"," binding은 선택 사항입니다.",[24,162],{},"\n설정하지 않으면 메트릭이 기록되지 않지만, 다른 동작은 달라지지 않습니다.",[24,165],{},"\nFlow와 정기 실행을 사용하는 경우에는 추가 binding을 설정하세요.",[24,168],{},"\n설정 내용은 ",[150,171,173],{"href":172},"\u002Fko\u002Freference\u002Fconfig#wrangler%E3%81%AEbinding","wrangler의 binding",[150,175,177],{"href":176},"\u002Fko\u002Fguide\u002Fflow#%E8%A8%AD%E5%AE%9A","Flow 설정",[150,179,181],{"href":180},"\u002Fko\u002Fguide\u002Fschedule#%E8%A8%AD%E5%AE%9A","정기 실행 설정","에 기재되어 있습니다.",[184,185,187],"callout",{"type":186},"warning",[20,188,189,190,192,193,195],{},"Tsumugi를 업데이트한 후에는 마이그레이션을 다시 적용하세요.",[24,191],{},"\n새 버전에서 마이그레이션이 추가되었을 수 있습니다.",[24,194],{},"\n적용되지 않은 마이그레이션이 남아 있으면 REST API는 503으로 응답하며, 응답 본문에 적용되지 않은 파일 이름을 포함합니다.",[15,197,198],{"id":198},"performer",[20,200,201,202,204,206,207,210,211,213,216],{},"작업 처리는 performer로 정의합니다.",[24,203],{},[27,205,112],{},"이 생성하는 ",[27,208,209],{},"src\u002Fperformers\u002Fhello.ts","가 가장 작은 예제입니다.",[24,212],{},[27,214,215],{},"perform","의 처리와 payload의 타입을 용도에 맞게 수정하세요.",[36,218,222],{"className":219,"code":220,"language":221,"meta":41,"style":41},"language-ts shiki shiki-themes github-light github-dark","\u002F\u002F src\u002Fperformers\u002Fhello.ts\nimport { Performer } from 'tsumugi\u002Fperformer';\n\nexport class Hello extends Performer\u003C{ name: string }, void, {}, Env> {\n  async perform(payload: { name: string }): Promise\u003Cvoid> {\n    console.log(`hello, ${payload.name}`);\n  }\n}\n","ts",[27,223,224,230,249,255,301,342,369,375],{"__ignoreMap":41},[45,225,226],{"class":47,"line":48},[45,227,229],{"class":228},"sJ8bj","\u002F\u002F src\u002Fperformers\u002Fhello.ts\n",[45,231,232,236,240,243,246],{"class":47,"line":69},[45,233,235],{"class":234},"szBVR","import",[45,237,239],{"class":238},"sVt8B"," { Performer } ",[45,241,242],{"class":234},"from",[45,244,245],{"class":55}," 'tsumugi\u002Fperformer'",[45,247,248],{"class":238},";\n",[45,250,251],{"class":47,"line":78},[45,252,254],{"emptyLinePlaceholder":253},true,"\n",[45,256,258,261,264,267,270,273,276,280,283,286,289,292,295,298],{"class":47,"line":257},4,[45,259,260],{"class":234},"export",[45,262,263],{"class":234}," class",[45,265,266],{"class":51}," Hello",[45,268,269],{"class":234}," extends",[45,271,272],{"class":51}," Performer",[45,274,275],{"class":238},"\u003C{ ",[45,277,279],{"class":278},"s4XuR","name",[45,281,282],{"class":234},":",[45,284,285],{"class":65}," string",[45,287,288],{"class":238}," }, ",[45,290,291],{"class":65},"void",[45,293,294],{"class":238},", {}, ",[45,296,297],{"class":51},"Env",[45,299,300],{"class":238},"> {\n",[45,302,304,307,310,313,316,318,321,323,325,327,330,332,335,338,340],{"class":47,"line":303},5,[45,305,306],{"class":234},"  async",[45,308,309],{"class":51}," perform",[45,311,312],{"class":238},"(",[45,314,315],{"class":278},"payload",[45,317,282],{"class":234},[45,319,320],{"class":238}," { ",[45,322,279],{"class":278},[45,324,282],{"class":234},[45,326,285],{"class":65},[45,328,329],{"class":238}," })",[45,331,282],{"class":234},[45,333,334],{"class":51}," Promise",[45,336,337],{"class":238},"\u003C",[45,339,291],{"class":65},[45,341,300],{"class":238},[45,343,345,348,351,353,356,358,361,363,366],{"class":47,"line":344},6,[45,346,347],{"class":238},"    console.",[45,349,350],{"class":51},"log",[45,352,312],{"class":238},[45,354,355],{"class":55},"`hello, ${",[45,357,315],{"class":238},[45,359,360],{"class":55},".",[45,362,279],{"class":238},[45,364,365],{"class":55},"}`",[45,367,368],{"class":238},");\n",[45,370,372],{"class":47,"line":371},7,[45,373,374],{"class":238},"  }\n",[45,376,378],{"class":47,"line":377},8,[45,379,380],{"class":238},"}\n",[20,382,383,384,387],{},"performer를 추가할 때는 ",[27,385,386],{},"add-performer","를 실행하세요.",[36,389,391],{"className":38,"code":390,"language":40,"meta":41,"style":41},"npx tsumugi add-performer send-mail\n",[27,392,393],{"__ignoreMap":41},[45,394,395,397,399,402],{"class":47,"line":48},[45,396,100],{"class":51},[45,398,103],{"class":55},[45,400,401],{"class":55}," add-performer",[45,403,404],{"class":55}," send-mail\n",[20,406,407,408,411],{},"performer 파일이 생성되고 ",[27,409,410],{},"src\u002Fperformers\u002Findex.ts","에 export 줄이 한 줄 추가됩니다.",[36,413,415],{"className":219,"code":414,"language":221,"meta":41,"style":41},"\u002F\u002F src\u002Fperformers\u002Findex.ts\nexport { Hello } from '.\u002Fhello.js';\nexport { SendMail } from '.\u002Fsend-mail.js';\n",[27,416,417,422,436],{"__ignoreMap":41},[45,418,419],{"class":47,"line":48},[45,420,421],{"class":228},"\u002F\u002F src\u002Fperformers\u002Findex.ts\n",[45,423,424,426,429,431,434],{"class":47,"line":69},[45,425,260],{"class":234},[45,427,428],{"class":238}," { Hello } ",[45,430,242],{"class":234},[45,432,433],{"class":55}," '.\u002Fhello.js'",[45,435,248],{"class":238},[45,437,438,440,443,445,448],{"class":47,"line":78},[45,439,260],{"class":234},[45,441,442],{"class":238}," { SendMail } ",[45,444,242],{"class":234},[45,446,447],{"class":55}," '.\u002Fsend-mail.js'",[45,449,248],{"class":238},[15,451,453],{"id":452},"worker","Worker",[20,455,456,458,459,127,461,463,464,466,467,154],{},[27,457,112],{},"은 다음 내용의 ",[27,460,120],{},[24,462],{},"\nperformer는 Worker의 엔트리포인트에서 export하며, 그 이름이 binding 이름으로 사용됩니다.",[24,465],{},"\nbinding 이름의 규칙은 ",[150,468,470],{"href":469},"\u002Fko\u002Fguide\u002Fperformer#binding%E5%90%8D","binding 이름",[36,472,474],{"className":219,"code":473,"language":221,"meta":41,"style":41},"import { bearerAuth, defineTsumugi } from 'tsumugi';\nimport { ui } from 'tsumugi\u002Fui';\nimport * as performers from '.\u002Fperformers\u002Findex.js';\n\nexport * from '.\u002Fperformers\u002Findex.js';\n\nconst tsumugi = defineTsumugi({\n  performers,\n  \u002F\u002F secret에서 가져옴, 직접 작성하면 리포지토리와 번들에 남음\n  auth: bearerAuth((env: Env) => env.TSUMUGI_TOKEN, { cookie: 'tsumugi_token' }),\n  ui: ui({ tokenCookie: 'tsumugi_token' }),\n});\n\n\u002F\u002F Durable Object 클래스를 다시 export해야 함\nexport { TsumugiJobShard } from 'tsumugi';\n\nexport default {\n  ...tsumugi,\n  async fetch(request, env, ctx) {\n    const { pathname } = new URL(request.url);\n    if (pathname === '\u002Fenqueue') {\n      const id = await tsumugi.enqueue(env, { binding: 'Hello', payload: { name: 'world' } });\n      return Response.json({ id });\n    }\n    \u002F\u002F 나머지는 대시보드와 REST API로 전달\n    return tsumugi.fetch!(request, env, ctx);\n  },\n} satisfies ExportedHandler\u003CEnv>;\n",[27,475,476,490,504,524,528,541,545,561,566,572,613,629,635,640,646,660,665,676,685,710,736,753,788,803,809,815,832,838],{"__ignoreMap":41},[45,477,478,480,483,485,488],{"class":47,"line":48},[45,479,235],{"class":234},[45,481,482],{"class":238}," { bearerAuth, defineTsumugi } ",[45,484,242],{"class":234},[45,486,487],{"class":55}," 'tsumugi'",[45,489,248],{"class":238},[45,491,492,494,497,499,502],{"class":47,"line":69},[45,493,235],{"class":234},[45,495,496],{"class":238}," { ui } ",[45,498,242],{"class":234},[45,500,501],{"class":55}," 'tsumugi\u002Fui'",[45,503,248],{"class":238},[45,505,506,508,511,514,517,519,522],{"class":47,"line":78},[45,507,235],{"class":234},[45,509,510],{"class":65}," *",[45,512,513],{"class":234}," as",[45,515,516],{"class":238}," performers ",[45,518,242],{"class":234},[45,520,521],{"class":55}," '.\u002Fperformers\u002Findex.js'",[45,523,248],{"class":238},[45,525,526],{"class":47,"line":257},[45,527,254],{"emptyLinePlaceholder":253},[45,529,530,532,534,537,539],{"class":47,"line":303},[45,531,260],{"class":234},[45,533,510],{"class":65},[45,535,536],{"class":234}," from",[45,538,521],{"class":55},[45,540,248],{"class":238},[45,542,543],{"class":47,"line":344},[45,544,254],{"emptyLinePlaceholder":253},[45,546,547,550,552,555,558],{"class":47,"line":371},[45,548,549],{"class":234},"const",[45,551,103],{"class":65},[45,553,554],{"class":234}," =",[45,556,557],{"class":51}," defineTsumugi",[45,559,560],{"class":238},"({\n",[45,562,563],{"class":47,"line":377},[45,564,565],{"class":238},"  performers,\n",[45,567,569],{"class":47,"line":568},9,[45,570,571],{"class":228},"  \u002F\u002F secret에서 가져옴, 직접 작성하면 리포지토리와 번들에 남음\n",[45,573,575,578,581,584,587,589,592,595,598,601,604,607,610],{"class":47,"line":574},10,[45,576,577],{"class":238},"  auth: ",[45,579,580],{"class":51},"bearerAuth",[45,582,583],{"class":238},"((",[45,585,586],{"class":278},"env",[45,588,282],{"class":234},[45,590,591],{"class":51}," Env",[45,593,594],{"class":238},") ",[45,596,597],{"class":234},"=>",[45,599,600],{"class":238}," env.",[45,602,603],{"class":65},"TSUMUGI_TOKEN",[45,605,606],{"class":238},", { cookie: ",[45,608,609],{"class":55},"'tsumugi_token'",[45,611,612],{"class":238}," }),\n",[45,614,616,619,622,625,627],{"class":47,"line":615},11,[45,617,618],{"class":238},"  ui: ",[45,620,621],{"class":51},"ui",[45,623,624],{"class":238},"({ tokenCookie: ",[45,626,609],{"class":55},[45,628,612],{"class":238},[45,630,632],{"class":47,"line":631},12,[45,633,634],{"class":238},"});\n",[45,636,638],{"class":47,"line":637},13,[45,639,254],{"emptyLinePlaceholder":253},[45,641,643],{"class":47,"line":642},14,[45,644,645],{"class":228},"\u002F\u002F Durable Object 클래스를 다시 export해야 함\n",[45,647,649,651,654,656,658],{"class":47,"line":648},15,[45,650,260],{"class":234},[45,652,653],{"class":238}," { TsumugiJobShard } ",[45,655,242],{"class":234},[45,657,487],{"class":55},[45,659,248],{"class":238},[45,661,663],{"class":47,"line":662},16,[45,664,254],{"emptyLinePlaceholder":253},[45,666,668,670,673],{"class":47,"line":667},17,[45,669,260],{"class":234},[45,671,672],{"class":234}," default",[45,674,675],{"class":238}," {\n",[45,677,679,682],{"class":47,"line":678},18,[45,680,681],{"class":234},"  ...",[45,683,684],{"class":238},"tsumugi,\n",[45,686,688,690,693,695,698,700,702,704,707],{"class":47,"line":687},19,[45,689,306],{"class":234},[45,691,692],{"class":51}," fetch",[45,694,312],{"class":238},[45,696,697],{"class":278},"request",[45,699,117],{"class":238},[45,701,586],{"class":278},[45,703,117],{"class":238},[45,705,706],{"class":278},"ctx",[45,708,709],{"class":238},") {\n",[45,711,713,716,718,721,724,727,730,733],{"class":47,"line":712},20,[45,714,715],{"class":234},"    const",[45,717,320],{"class":238},[45,719,720],{"class":65},"pathname",[45,722,723],{"class":238}," } ",[45,725,726],{"class":234},"=",[45,728,729],{"class":234}," new",[45,731,732],{"class":51}," URL",[45,734,735],{"class":238},"(request.url);\n",[45,737,739,742,745,748,751],{"class":47,"line":738},21,[45,740,741],{"class":234},"    if",[45,743,744],{"class":238}," (pathname ",[45,746,747],{"class":234},"===",[45,749,750],{"class":55}," '\u002Fenqueue'",[45,752,709],{"class":238},[45,754,756,759,762,764,767,770,773,776,779,782,785],{"class":47,"line":755},22,[45,757,758],{"class":234},"      const",[45,760,761],{"class":65}," id",[45,763,554],{"class":234},[45,765,766],{"class":234}," await",[45,768,769],{"class":238}," tsumugi.",[45,771,772],{"class":51},"enqueue",[45,774,775],{"class":238},"(env, { binding: ",[45,777,778],{"class":55},"'Hello'",[45,780,781],{"class":238},", payload: { name: ",[45,783,784],{"class":55},"'world'",[45,786,787],{"class":238}," } });\n",[45,789,791,794,797,800],{"class":47,"line":790},23,[45,792,793],{"class":234},"      return",[45,795,796],{"class":238}," Response.",[45,798,799],{"class":51},"json",[45,801,802],{"class":238},"({ id });\n",[45,804,806],{"class":47,"line":805},24,[45,807,808],{"class":238},"    }\n",[45,810,812],{"class":47,"line":811},25,[45,813,814],{"class":228},"    \u002F\u002F 나머지는 대시보드와 REST API로 전달\n",[45,816,818,821,823,826,829],{"class":47,"line":817},26,[45,819,820],{"class":234},"    return",[45,822,769],{"class":238},[45,824,825],{"class":51},"fetch",[45,827,828],{"class":234},"!",[45,830,831],{"class":238},"(request, env, ctx);\n",[45,833,835],{"class":47,"line":834},27,[45,836,837],{"class":238},"  },\n",[45,839,841,844,847,850,852,854],{"class":47,"line":840},28,[45,842,843],{"class":238},"} ",[45,845,846],{"class":234},"satisfies",[45,848,849],{"class":51}," ExportedHandler",[45,851,337],{"class":238},[45,853,297],{"class":51},[45,855,856],{"class":238},">;\n",[20,858,859,862,863,117,865,117,868,871,872,874,875,878,879,182],{},[27,860,861],{},"defineTsumugi","의 반환값에는 ",[27,864,825],{},[27,866,867],{},"queue",[27,869,870],{},"scheduled"," 핸들러 외에 작업을 투입하는 함수와 Flow를 시작하는 함수가 포함됩니다.",[24,873],{},"\n반환값 목록은 ",[150,876,90],{"href":877},"\u002Fko\u002Freference\u002Fconfig#definetsumugi","에, 투입 방법별 차이는 ",[150,880,882],{"href":881},"\u002Fko\u002Fguide\u002Fenqueue#%E6%8A%95%E5%85%A5%E6%96%B9%E6%B3%95","작업 투입",[15,884,886],{"id":885},"トークンの設定","토큰 설정",[20,888,889,892,893,896,897,899,900,902,903,905,906,908,909,911],{},[27,890,891],{},"auth","를 지정하지 않으면 ",[27,894,895],{},"tsumugi.fetch","는 모든 요청에 404로 응답합니다.",[24,898],{},"\n위 예제에서는 ",[27,901,580],{},"를 사용합니다. 로컬 환경에서는 ",[27,904,126],{},"에 정의된 ",[27,907,603],{},"을 참조합니다.",[24,910],{},"\n프로덕션 환경에서는 아래 명령을 실행하여 Secret을 등록하세요.",[36,913,915],{"className":38,"code":914,"language":40,"meta":41,"style":41},"pnpm wrangler secret put TSUMUGI_TOKEN\n",[27,916,917],{"__ignoreMap":41},[45,918,919,921,924,927,930],{"class":47,"line":48},[45,920,52],{"class":51},[45,922,923],{"class":55}," wrangler",[45,925,926],{"class":55}," secret",[45,928,929],{"class":55}," put",[45,931,932],{"class":55}," TSUMUGI_TOKEN\n",[15,934,936],{"id":935},"動作確認","동작 확인",[36,938,940],{"className":38,"code":939,"language":40,"meta":41,"style":41},"pnpm wrangler dev\n",[27,941,942],{"__ignoreMap":41},[45,943,944,946,948],{"class":47,"line":48},[45,945,52],{"class":51},[45,947,923],{"class":55},[45,949,950],{"class":55}," dev\n",[20,952,953,956,957,960,961,963,964,967,968,970,971,973,974,976,977,979,981,982,985],{},[27,954,955],{},"\u002Fenqueue","에 접속하면 Hello 작업이 투입되고, 작업 ID를 포함한 ",[27,958,959],{},"{ \"id\": \"...\" }"," 응답이 반환됩니다.",[24,962],{},"\n투입한 작업은 대시보드(",[27,965,966],{},"\u002F",")의 목록에 표시됩니다.",[24,969],{},"\n토큰 입력을 요청받으면 ",[27,972,126],{},"의 ",[27,975,603],{}," 값을 입력하세요.",[24,978],{},[27,980,112],{},"이 생성한 직후의 값은 ",[27,983,984],{},"dev-token","입니다.",[15,987,989],{"id":988},"次に参照するページ","다음으로 볼 페이지",[991,992,993,1001,1007],"ul",{},[994,995,996,1000],"li",{},[150,997,999],{"href":998},"\u002Fko\u002Fguide\u002Fperformer","Performer",": 작업 처리를 정의합니다.",[994,1002,1003,1006],{},[150,1004,882],{"href":1005},"\u002Fko\u002Fguide\u002Fenqueue",": 예약 실행, 우선순위, 중복 제거",[994,1008,1009,1013],{},[150,1010,1012],{"href":1011},"\u002Fko\u002Fguide\u002Fexecution","실행 제어",": 작업 상태 관리, 재시도 설정, 실행량 제한, 실행 보장에 대해 설명합니다.",[1015,1016,1017],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":41,"searchDepth":78,"depth":78,"links":1019},[1020,1021,1022,1023,1024,1025,1026,1027],{"id":17,"depth":69,"text":18},{"id":33,"depth":69,"text":34},{"id":89,"depth":69,"text":90},{"id":198,"depth":69,"text":198},{"id":452,"depth":69,"text":453},{"id":885,"depth":69,"text":886},{"id":935,"depth":69,"text":936},{"id":988,"depth":69,"text":989},"Tsumugi 설치부터 performer를 정의한 Worker의 동작 확인까지","md",{},"\u002Fko\u002Fguide\u002Fgetting-started","2026-07-22",{"title":6,"description":1028},"ko\u002Fguide\u002Fgetting-started","2026-10-25","fd4wKrPVH98Avkwvp50pwUqOLcIglJpHrrVQkUunJGo",false,1794027568505]