Skip to main content

deploy-prod

Deploy OpenMMO to production or prepare a production village-data transfer. Use when the user asks to deploy, ship, or apply public village changes to prod; preserve production player data and verify the complete facility, terrain, and vegetation changes.

Source facts

Repository
Julian-adv/OpenMMO
Last source activity
September 20, 2026 at 06:49
Detected SKILL.md language
Mixed languages
Stars
1,790
Forks
252

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions ยท Read-only preview
name
deploy-prod
description
Deploy OpenMMO to production or prepare a production village-data transfer. Use when the user asks to deploy, ship, or apply public village changes to prod; preserve production player data and verify the complete facility, terrain, and vegetation changes.
# Deploy OpenMMO Use the shared [deployment workflow](../../../.claude/commands/deploy.md). Read `~/work/notes/DEPLOY_NOTES.md` before preparing a deployment and retain its production-data preservation rules. Follow the user's requested scope; preparing or editing deployment instructions does not authorize a production deployment. ## Public village transfers ๊ณต์šฉ ์‹œ์„ค์ด๋‚˜ ๊ตฌ์—ญ ํ•˜๋‚˜๋ฅผ ์ด๊ด€ ๋‹จ์œ„๋กœ ์‚ผ๋Š”๋‹ค. ๋ฐฐํฌ๋งˆ๋‹ค ์š”์ฒญ๋œ ๋งˆ์„ ํŽธ์ง‘, ๋ฐฐํฌ ๋ฉ”๋ชจ, ๋งˆ์ง€๋ง‰ ์ด๊ด€ ๊ธฐ๋ก๊ณผ ํ•ด๋‹น ๊ตฌ์—ญ์˜ ๊ฐœ๋ฐœยท์šด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด ์‹ ๊ทœยท์ˆ˜์ •ยท์ด๋™ยท์‚ญ์ œ๋ฅผ ์ฐพ๋Š”๋‹ค. ๊ธฐ๋ก์ด ์—†์œผ๋ฉด ํ˜„์žฌ ์–‘์ชฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด ๋ฒ”์œ„๋ฅผ ์ •ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„ Git์—์„œ ์ œ์™ธ๋œ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ๊นจ๋—ํ•œ ์ž‘์—… ํŠธ๋ฆฌ๋‚˜ ๊ฐ™์€ ์ˆ˜์ • ์‹œ๊ฐ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ ์—†์Œ์„ ํŒ๋‹จํ•˜์ง€ ์•Š๋Š”๋‹ค. ### ๋ณ€๊ฒฝ ๋ชฉ๋ก๊ณผ ๋ณด์กด ๊ฐ ์‹œ์„ค์˜ ์ด๋ฆ„, ๊ฑด๋ฌผยท์˜ค๋ธŒ์ ํŠธ ID, ์ด๋™ ์ „ํ›„ ์›”๋“œ ๋ฒ”์œ„, ๋Œ€์ƒ ๊ฒฝ๋กœยท์šด์˜ ํ•ด์‹œยท์…€ยทID๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์•„๋ž˜ ๊ณ„์ธต๋งˆ๋‹ค `์ถ”๊ฐ€/์ˆ˜์ •/์ด๋™/์‚ญ์ œ/๋ณ€๊ฒฝ ์—†์Œ/์ œ์™ธ`์™€ ๊ทผ๊ฑฐ, ๊ธฐ๋Œ€ ์ƒํƒœ๋ฅผ ์ •ํ•œ๋‹ค. ๊ด€๋ จ ๋ณ€๊ฒฝ์„ ์„ค๋ช… ์—†์ด ์ œ์™ธํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๊ด€์ด ์—†์„ ๋•Œ๋„ ๋น„๊ต ๊ทผ๊ฑฐ๋ฅผ ๋‚จ๊ธด๋‹ค. | ๊ณ„์ธต | ํ•จ๊ป˜ ํ™•์ธํ•  ๋ฐ์ดํ„ฐ | | --- | --- | | ๊ฑด๋ฌผ | `data/housing/`์˜ originยท๋ฐฉยท์ธตยท์†Œ์œ ์žยท์ถœ์ž…๊ตฌ. ์šด์˜ ๋ฌธ ์ƒํƒœ์™€ ๊ฐœ์ธ ์ฃผํƒ์„ ๋ณด์กดํ•œ๋‹ค. | | ๊ฐ€๊ตฌยท์ „์‹œ๋ฌผยท๊ฐ„ํŒ | `data/terrain/objects/`์˜ IDยท์ข…๋ฅ˜ยท์œ„์น˜ยท์ธตยท๋ฌธ๊ตฌ. ํ”Œ๋ ˆ์ด์–ด ๋ณด๊ด€ํ•จยท๋‚ด์šฉ๋ฌผ์€ DB์—๋„ ์žˆ์œผ๋ฏ€๋กœ ๊ฑด๋ฌผ JSON๋งŒ์œผ๋กœ ํŒ๋‹จํ•˜์ง€ ์•Š๋Š”๋‹ค. | | ๋†’์ด | `data/terrain/height/`์˜ ๋ฐ”๋‹ฅ ๋†’์ดยท์™ธ๊ณฝ ์—ฐ๊ฒฐยท๊ณต์œ  ๊ฒฝ๊ณ„์™€ ๋ณต์›์šฉ `height-original/`. | | ๋ฐ”๋‹ฅ ์žฌ์งˆ | `data/terrain/splat/`๊ณผ `landscaping/`. ์กฐ๊ฒฝ์ด ์žˆ์œผ๋ฉด ์กฐ๊ฒฝ์˜ ์žฌ์งˆ์ด ์šฐ์„ ํ•œ๋‹ค. | | ํ’€ยท๋‚˜๋ฌด | `data/terrain/grass/`, `trees/`, ์กฐ๊ฒฝ ์ œ๊ฑฐ ๋งˆ์Šคํฌ๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•œ ๊ฒฐ๊ณผ์™€ ๋ณต์›์šฉ `grass-original/`. | | ์‹œ์„ค ์„ค์ • | ์ƒ์  ์ „์‹œ IDยท๊ฐ€๊ฒฉ, NPC ์„ค์ •ยท์Šค์ผ€์ค„, ์ง€๋„ ํ‘œ์‹œ, ํ•„์š”ํ•œ ์˜ˆ์•ฝ ํ† ์ง€์™€ ์‹ค์ œ ๋ฐฐ์น˜์˜ ์ผ์น˜. | - ๊ณต์šฉ ๋Œ€์ƒ์€ ์š”์ฒญยทํŽธ์ง‘ ๊ธฐ๋กยท์‹œ์„ค ๋ฌธ์„œ๋กœ ์‹๋ณ„ํ•œ๋‹ค. ๊ฐœ๋ฐœ์˜ `ownerId`๋‚˜ ๊ฐ™์€ ์ง€์—ญ ํŒŒ์ผ์— ๋“ค์–ด ์žˆ๋‹ค๋Š” ์ด์œ ๋กœ ๊ฐœ์ธ ๊ฑด๋ฌผยท๊ฐ€๊ตฌ๋ฅผ ๊ณต์šฉ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. - ํ˜„์žฌ ์šด์˜ ๋ฐ์ดํ„ฐ์— ์„ ํƒํ•œ ์…€ยทID๋งŒ ๋ณ‘ํ•ฉํ•œ๋‹ค. ๊ฐœ๋ฐœ DBยท์˜์ง€ยท์ง‘ยท๊ฐ€๊ตฌยท๋ชฉ์ฑ…ยท์ง€ํ˜•์„ ์ผ๊ด„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ํŒŒ์ผ ํ•˜๋‚˜์—๋„ ๊ณต์šฉ ๊ตฌ์—ญ๊ณผ ์šด์˜ ๊ฐœ์ธ ํŽธ์ง‘์ด ์„ž์ผ ์ˆ˜ ์žˆ๋‹ค. - `tools/sync-terrain.sh`์˜ ์ˆ˜์ • ์‹œ๊ฐ ๋น„๊ต๋Š” ํ›„๋ณด ํƒ์ƒ‰์ผ ๋ฟ์ด๋‹ค. ์„ ํƒ ์ด๊ด€์— ์ „์ฒด `--apply`ยท`--delete`๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•ด์‹œ๋Š” ๋Œ€์ƒ ํŒŒ์ผ๋งŒ ๋น„๊ตํ•œ๋‹ค. - ๊ฐœ๋ฐœ์— ์—†๋‹ค๋Š” ์ด์œ ๋กœ ์šด์˜ ์†Œ์œ ๋ฌผ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜๋„๋œ ์ด๋™ยท์ฒ ๊ฑฐ๋Š” ์˜› ์ž๋ฆฌ ๋ณต์›๋„ ํฌํ•จํ•˜๋˜ ์ด์›ƒ ์‹œ์„ค๊ณผ ์ดํ›„ ์šด์˜ ํŽธ์ง‘์„ ๋ณด์กดํ•œ๋‹ค. - ์ง€๋‚œ ๋ฐฐํฌ ๋’ค ์šด์˜์—์„œ ๋ณด์ •ํ•œ ๋‚ด์šฉ์„ ๊ธฐ์ค€์— ํฌํ•จํ•œ๋‹ค. ์˜ค๋ž˜๋œ ๊ฐœ๋ฐœ ํŒŒ์ผ์ด๋‚˜ ์–‘์ชฝ ํŽธ์ง‘์˜ ์ถฉ๋Œ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ž๋™ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ํ•ด๋‹น ๋ฒ”์œ„๋ฅผ ๋‹ค์‹œ ๋ณ‘ํ•ฉํ•œ๋‹ค. ### ์ขŒํ‘œ์™€ ์ ์šฉ ์ „ ๊ฒ€์ฆ ์ง€ํ˜•์€ `tile = floor((world + 32) / 64)`, `tileOrigin = tile * 64 - 32`, `cellIndex = localZ * 64 + localX`๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋†’์ด๋งต์€ 65ร—65 ์ •์ , ์Šคํ”Œ๋žซยทํ’€ยท์ œ๊ฑฐ ๋งˆ์Šคํฌ๋Š” 64ร—64 ์…€์ด๋‹ค. ์Œ์ˆ˜ ์ขŒํ‘œ์™€ ๊ฒฝ๊ณ„ ํƒ€์ผ์€ [์ขŒํ‘œ ๊ตฌํ˜„](../../../terrain/src/coords.rs)์„ ๋”ฐ๋ฅด๊ณ , ๊ธฐ๋กํ•œ ์›”๋“œ ๋ฒ”์œ„๋ฅผ ์…€ ์ธ๋ฑ์Šค์—์„œ ์—ญ์‚ฐํ•ด ๋Œ€์กฐํ•œ๋‹ค. ํƒ€์ผ ์ค‘์‹ฌ๊ณผ ์›์ ์„ ํ˜ผ๋™ํ•˜๋ฉด 32m ์–ด๊ธ‹๋‚œ ํŒจ์น˜๊ฐ€ ๋œ๋‹ค. ์šด์˜ ์›๋ณธ์— ํŒจ์น˜๋ฅผ ์ ์šฉํ•œ ์ž„์‹œ ๊ฒฐ๊ณผ์—์„œ ๋‹ค์Œ ์กฐ๊ฑด์„ ์ˆ˜์น˜๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ฑด๋ฌผยท๊ฐ€๊ตฌ๋งŒ ๋ฐ”๋€Œ์—ˆ๊ฑฐ๋‚˜ ๊ฐœ๋ฐœยท์šด์˜ ํŒŒ์ผ์ด ๊ฐ™์•„๋„ ์ƒ๋žตํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐœ๋ฐœ ์›๋ณธ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. - **๋ฐ”๋‹ฅ:** ์ง€์ƒ์ธต ์ง€ํ˜•์ด ์‹ค์ œ ๋ฐ”๋‹ฅ ์œ—๋ฉด๋ณด๋‹ค ๋‚ฎ์€์ง€ ๋†’์ด ์ €์žฅ ๋‹จ์œ„์˜ ๋ฐ˜์˜ฌ๋ฆผ๊นŒ์ง€ ์ ์šฉํ•ด ๊ฒ€์‚ฌํ•œ๋‹ค. ํ˜„์žฌ [๊ฑด์ถ• ์ฒ˜๋ฆฌ](../../../server/src/game_state/house_building.rs)๋Š” ๊ฑด๋ฌผ `origin.y`์— ๋งž์ถ”๊ณ  ์™ธ๊ณฝ 4m๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. [ํ‰ํƒ„ํ™”](../../../terrain/src/height.rs) ์‹œ ์ด์›ƒ ๊ธฐ์ดˆ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ํƒ€์ผ ๊ณต์œ  ๊ฒฝ๊ณ„ ์ •์ ์„ ์ผ์น˜์‹œํ‚จ๋‹ค. - **์‹์ƒ:** ํ˜„์žฌ [๊ฑด์ถ• ๋ฒ”์œ„](../../../server/src/housing/routes.rs)์˜ ๋ฐฉ ์ฃผ๋ณ€ ํ’€ 1mยท๋‚˜๋ฌด 2m์— ํ‘œ์‹œ๋  ์‹์ƒ์ด ์—†๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. GR04๋Š” ์…€๋ณ„ ๊ฐœ์ˆ˜์ด๋ฏ€๋กœ [์…€ ๊ต์ฐจ ํŒ์ •](../../../terrain/src/grass.rs)๊ณผ ์กฐ๊ฒฝ ์ œ๊ฑฐ ๋งˆ์Šคํฌ๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•œ๋‹ค. ๊ฑด๋ฌผ JSON ์ง์ ‘ ๋ณต์‚ฌ๋Š” ํ‰ํƒ„ํ™”ยท์‹์ƒ ์ œ๊ฑฐ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. - **ํฌ์žฅ:** ๋Œ๊ธธยทํฌ์žฅ์€ ์žฌ์งˆ๊ณผ ์ œ๊ฑฐ ๋งˆ์Šคํฌ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•œ๋‹ค. `vegMeta=0`๋งŒ์œผ๋กœ ๊ธฐ์กด ํ’€์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค. `LND1` ๋งˆ์Šคํฌ์™€ ํ’€ ์›๋ณธ์„ ํ•ฉ์ณ ํ‘œ์‹œ ๋Œ€์ƒ 0๊ฐœ๋ฅผ ํ™•์ธํ•œ๋‹ค. ๋งˆ์Šคํฌ๋Š” ๋‚˜๋ฌด๋„ ์ˆจ๊ธฐ๋ฏ€๋กœ ๋ณด์กดํ•  ๋‚˜๋ฌด๊ฐ€ ์žˆ์œผ๋ฉด ํ’€ ๋ฐ์ดํ„ฐ๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๋“ฑ ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•œ๋‹ค. - **๋ฐฐ์น˜:** ๊ฐ€๊ตฌยท๊ฐ„ํŒยทNPC์˜ ๊ฑด๋ฌผยท์ธตยท๋†’์ด์™€ ์„ค์ •์˜ ์ฐธ์กฐ ID๋ฅผ ํ™•์ธํ•œ๋‹ค. ๊ฑด๋ฌผ ๋†’์ด๋ฅผ ๋ฐ”๊พธ๋ฉด ๋ฐฐ์น˜๋ฌผ ๋†’์ด๋„ ํ™•์ธํ•œ๋‹ค. - **๋ณด์กด:** ๋Œ€์ƒ ๋ฐ–์˜ ์…€ยท๋ฐฐ์น˜ยท์šด์˜ ์†Œ์œ  ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์€ ํ•ด์‹œ๋กœ, ๊ณต์œ  ํŒŒ์ผ์€ ์„ ํƒํ•œ ์…€ยทID๋ฅผ ์ œ์™ธํ•œ ๋‚ด์šฉ์œผ๋กœ ๊ฒ€์ฆํ•œ๋‹ค. ์กฐ๊ฑด์ด ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ์ด๊ด€์„ ๊ณ ์นœ ๋’ค ๋‹ค์‹œ ๊ฒ€์‚ฌํ•œ๋‹ค. ์˜๋„๋œ ์˜ˆ์™ธ๋Š” ๋ฒ”์œ„์™€ ์ด์œ ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ### ์ ์šฉ๊ณผ ์™„๋ฃŒ ํ™•์ธ 1. ์ˆ˜์ •ํ•  ์šด์˜ ํŒŒ์ผยทํ–‰๊ณผ ๋ฒ„์ „ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„ ๋ฐฐํฌ ๊ธฐ๋ก ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฑ์—…ํ•œ๋‹ค. ์“ฐ๊ธฐ ์ง์ „ ์›๋ณธ ํ•ด์‹œยทํ–‰ ๋‚ด์šฉ์ด ์ค€๋น„ ์‹œ์ ๊ณผ ๋‹ค๋ฅด๋ฉด ์ตœ์‹  ์šด์˜ ์ƒํƒœ๋กœ ํŒจ์น˜๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค. 2. ์ง€์›๋˜๋Š” ํŽธ์ง‘ API๋ฅผ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ  ๋ณต์›์šฉ ๋†’์ดยทํ’€์„ ๋ณด์žฅํ•œ๋‹ค. ํŒŒ์ผ ๊ต์ฒด๋Š” ์›์ž์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฑด๋ฌผยท์„ค์ • ํŒŒ์ผ ๋ณ€๊ฒฝ์€ ์„œ๋ฒ„ยทNPC ์บ์‹œ ๊ฐฑ์‹  ๋˜๋Š” ๊ณ„ํš๋œ ์žฌ์‹œ์ž‘๊นŒ์ง€ ์ฒ˜๋ฆฌํ•œ๋‹ค. 3. ์ง€ํ˜• ๋ณ€๊ฒฝ ํ›„ ํ•ด์‹œ ๋ชฉ๋ก๊ณผ WebSocket ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•œ๋‹ค. ๋†’์ด ํŽธ์ง‘์€ ์„œ๋ฒ„ ๋†’์ด ์บ์‹œ๋„ ๊ฐฑ์‹ ํ•œ๋‹ค. ์™ธ๋ถ€ ํŒŒ์ผ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ manifest๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. [์ง€ํ˜• ์„œ๋น™](../../../doc/TERRAIN_STATIC_SERVING.md)์˜ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. 4. ๊ณต๊ฐœ manifestยท์›๋ณธ ๋ฐ”์ดํŠธยท์šด์˜ ๋””์Šคํฌ๋ฅผ ๋Œ€์กฐํ•˜๊ณ , ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ”๋‹ฅยท์‹์ƒยทํฌ์žฅ ์กฐ๊ฑด๊ณผ ๋Œ€์ƒ ๋ฐ– ๋ณด์กด์„ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋ณต์‚ฌ ์„ฑ๊ณต์ด๋‚˜ ํ•ด์‹œ ์ผ์น˜๋งŒ์œผ๋กœ ์™„๋ฃŒํ•˜์ง€ ์•Š๋Š”๋‹ค. 5. ๊ฒŒ์ž„์—์„œ ๋ฐ”๋‹ฅ ๋…ธ์ถœ, ๋‚จ์€ ํ’€ยท๋‚˜๋ฌด, ํฌ์žฅ ๊ฒฝ๊ณ„, ์ถœ์ž…๊ตฌยท๊ฐ€๊ตฌ์™€ ๋ณ€๊ฒฝํ•œ ์‹œ์„ค ๊ธฐ๋Šฅ์„ ํ™•์ธํ•œ๋‹ค. ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ๊ณผ ํ™”๋ฉด ๋ฏธํ™•์ธ์„ ๋ถ„๋ฆฌํ•ด ๊ธฐ๋กํ•˜๊ณ  ๋งˆ์„ ๊ฒ€์ฆ ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. 6. ๋ฐฐํฌ ๋ฉ”๋ชจ์— ๊ฒฐ๊ณผยท๋ณต๊ตฌ ๊ฒฝ๋กœยท๋ฏธํ™•์ธ ํ•ญ๋ชฉ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. ์šด์˜ ๋ณด์ •์˜ ๊ฐœ๋ฐœ ๋ฐ˜์˜ ์—ฌ๋ถ€๋„ ๊ธฐ๋กํ•œ๋‹ค. ๊ฐœ๋ฐœ ๋ฐ˜์˜ ์‹œ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๊ณ , ๋ฏธ๋ฐ˜์˜์ด๋ฉด ๋‹ค์Œ ๋ฐฐํฌ์˜ ์šด์˜ ๋ณด์กด ๋Œ€์ƒ์œผ๋กœ ๋ช…์‹œํ•œ๋‹ค. ๋ณต๊ตฌ๋„ ๋ณ€๊ฒฝํ•œ ์…€ยทID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ์ดํ›„ ์šด์˜ ํŽธ์ง‘์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋ฐฑ์—… ์ „์ฒด๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค.
View on GitHub