1.0.1 โ€ข Published 25 days ago

prospace-desktop v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
25 days ago

๐Ÿช Prospace

prospace

์ž‘๊ฐ€๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ, ์‹œ๊ฐ„ ์ ˆ์•ฝ, ์›Œ๋ผ๋ฐธ ์ฆ์ง„์„ ๋•๋Š” ์ƒ์‚ฐ์„ฑ ์•ฑ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ์…˜

์ ํ•ฉํ•œ ๋„๊ตฌ์™€ ์ง€์‹์„ ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋””์„œ๋‚˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์—…๋ฌด๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

์ œ๊ฐ€ ์ž…์‚ฌํ•˜๊ณ  ๊ถ๊ธˆํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค์„ Q&A ํ˜•์‹์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“  ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ธฐ๊ณ , ํ•ด๊ฒฐ ๋˜๋Š” ๊ณผ์ •์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ๋“œ๋ฏธ๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ŠคํŽ˜์ด์Šค๋Š” ์–ด๋–ค ์„œ๋น„์Šค์ผ๊นŒ?

ํ”„๋กœ์ŠคํŽ˜์ด์Šค๋Š” '๋งŽ์€ ํƒญ๊ณผ ์•ฑ์„ ํ†ตํ•ฉํ•ด์„œ ๊ด€๋ฆฌํ•  ์ˆœ ์—†์„๊นŒ?'๋ผ๋Š” ์งˆ๋ฌธ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

์—…๋ฌด๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๋งŽ์€ ํƒญ๊ณผ ์•ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋“ค๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์•ฑ๋“ค์€ ๋ธŒ๋ผ์šฐ์ € ์œ„์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ•˜๋‚˜์˜ ํƒญ ๊ทธ๋ฃน์œผ๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๊ณ , ๋‹จ์ถ•ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์งˆ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • Space

    ๊ณต๊ฐ„์„ ์˜๋ฏธํ•˜๋Š” ๋‹จ์–ด Space๋Š” Tap Group๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ณต๊ฐ„์„ ์ƒ์„ฑ, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. left-sidebar๊ฐ€ ์ ‘ํ˜€์žˆ์„ ๊ฒฝ์šฐ ์•„์ด์ฝ˜์œผ๋กœ Space๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Tap Group

    ์ผ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ํ•˜๋‚˜๋ฅผ Tap Group์œผ๋กœ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค. ํƒญ์„ ์ƒ๋‹จ๊ณผ ์ขŒ์ธก์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒญํ™”๋ฉด์„ ๋‹ซ์•„ ์ผ๋ฐ˜์ ์ธ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Keyboard shortcuts

    ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉ ํ•  ํ•„์š”์—†์ด Keyboard shortcuts๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์ŠคํŽ˜์ด์Šค๋ฅผ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ctrl or command + s ๋ฅผ ํ†ตํ•ด on/off ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. right-sidebar์—์„œ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ ์ด ๊ธฐ์ˆ ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์„๊นŒ?

๋” ์ƒ์‚ฐ์„ฑ์žˆ๋Š” ๊ฐœ๋ฐœ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ๊ฐœ๋ฐœ์†๋„์™€ ์‰ฌ์šด ๋Ÿฌ๋‹์ปค๋ธŒ๋ฅผ ์ถ”๊ตฌํ•˜๋ฉด์„œ๋„ ์„œ๋น„์Šค์˜ ํ€„๋ฆฌํ‹ฐ๋ฅผ ๋†’ํžˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๋” ์ข‹์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด yarn์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

yarn์€ ๋น ๋ฅธ ์†๋„๋ฅผ ๊ฐ€์ง„ javascript ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์„ค์น˜ํ•˜๋Š” npm๊ณผ ๋‹ฌ๋ฆฌ ํŒจํ‚ค์ง€๋ฅผ ๋ณ‘๋ ฌ๋กœ ์„ค์น˜ํ•˜๋ฉฐ, ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•˜์—ฌ ์บ์‹ฑํ•ด ๋‘๋ฒˆ์งธ ์„ค์น˜๋ถ€ํ„ฐ๋Š” ๋”์šฑ ์œ ์˜๋ฏธํ•œ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. (์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ฐธ๊ณ )

yarn๊ณผ yarn berry๋Š” ๊ธฐ๋ณธ ๋ช…๋ น์–ด๊ฐ€ ๊ฐ™์•„ migration์ด ์‰ฝ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ์–ด, ํ›„์— yarn berry๋กœ ๋‚˜์•„๊ฐˆ ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” yarn์˜ ๋ช…๋ น์–ด ๋ช‡๊ฐ€์ง€

# ํŒŒ์ผ์— ๋ช…์‹œ๋œ ์˜์กด์„ฑ๋“ค์„ ์„ค์น˜
yarn
# ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€
yarn add [package]# dependencies
yarn add [package] --dev# devDependencies
# ํŒจํ‚ค์ง€๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ
yarn upgrade [package]
# ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์˜์กด์„ฑ ์ •๋ณด๋„ ํ•จ๊ป˜ ์‚ญ์ œ
yarn remove [package]
# package.json์˜ script๋ฅผ ์‹คํ–‰
yarn [script]

electron์œผ๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐ์Šคํฌํƒ‘ ์•ฑ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

javascript๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์Šคํฌํƒ‘ ์•ฑ์„ ์ ์€ ๋Ÿฌ๋‹ ํƒ€์ž„์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ ‰ํŠธ๋ก ์€ ํ”„๋กœ์ŠคํŽ˜์ด์Šค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋”ฐ๋กœ ๊ณต๋ถ€๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ์ต์ˆ™ํ•œ javascript, html, css๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๋Š”๋ฐ ๋“ค์ด๋Š” ๋…ธ๋ ฅ๊ณผ ์‹œ๊ฐ„์„ ์ƒ๊ฐํ•˜๋ฉด ์ด๊ฒƒ์€ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค.

์ผ๋ ‰ํŠธ๋ก ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ํฌ๋กœ์Šคํ”Œ๋žซํผ์„ ์ง€์›ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. javascript ์ฝ”๋“œ ํ•˜๋‚˜๋กœ Windows, macOS, Linux๋“ฑ๋“ฑ์„ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”Œ๋žซํผ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ํ•„์š”์—†์Šต๋‹ˆ๋‹ค.

million.js๋ฅผ ์ด์šฉํ•ด React์˜ ๋žœ๋”๋ง ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

ํ”„๋กœ์ŠคํŽ˜์ด์Šค์—์„œ ์†๋„์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š”?

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

million.js๋Š” React Component๋ฅผ HOC(Higher Order Component)๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ Œ๋”๋ง ์†๋„๋ฅผ ์ตœ๋Œ€ 70% ํ–ฅ์ƒ์‹œํ‚ค๋Š” virtual DOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. (๋ Œ๋”๋ง ์†๋„ ๋ฒค์น˜๋งˆํฌ : krausest/js-framework-benchmark)

ํ”„๋กœ์ŠคํŽ˜์ด์Šค ์•ฑ ์‹คํ–‰ ์‹œ ์†๋„ ๊ฐœ์„ 

์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง์ด ์ ๊ฒŒ๋Š” 45%์—์„œ ์ตœ๋Œ€ 100%๊นŒ์ง€ ๋นจ๋ผ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm.io

million.js์—์„œ๋Š” Spread attribute๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๊ฐ€ ํฌํ•จ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๊ณต์‹๋ฌธ์„œ)

์•ฑ ๋‚ด์—์„œ๋Š” ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ์ฐจ์ด๊ฐ€ ๋‚ ๊นŒ?

ํ”„๋กœ์ŠคํŽ˜์ด์Šค ์•ฑ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋žœ๋”๋ง ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

million.js๋Š” reconciliation์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— node ๊ฐœ์ˆ˜์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ DOM ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋•Œ๋ฌธ์— ๊ฐ™์€ ์กฐ๊ฑด์—์„œ ์‹œ์ž‘ํ•œ ๋žœ๋”๋ง์ผ ๊ฒฝ์šฐ ์™„๋ฃŒ ์†๋„๊ฐ€ 65% ๊ฐ€๋Ÿ‰ ๊ฐ์†Œํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

without millon
with millon

๋ฌธ์ œ๋Š” ์—†์—ˆ์„๊นŒ?

millon.js๊ฐ€ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๋Š” <slot/> ๋•Œ๋ฌธ์— ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์˜ ์ˆœ์„œ๊ฐ€ ๊ผฌ์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. (์ด์Šˆ ๋งํฌ) onMouseDown() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฒ„๋ธ”๋ง์„ ๋ง‰์•„์ฃผ์–ด ์ผ์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ , millon.js๊ฐ€ v3.0.0 ๋ฒ„์ „์—์„œ slot์„ ์‚ญ์ œํ•˜๋ฉฐ ํ•ด๊ฒฐ ๋  ๊ฒƒ์œผ๋กœ ํ™•์ธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‰ฝ๊ณ  ๊ฐ€๋ฒผ์šด ์ƒํƒœ๊ด€๋ฆฌ zustand

Zustand๋Š” ์•„ํ‚คํ…์ฒ˜๋‚˜ ํŒจํ„ด์„ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์œ ์—ฐํ•œ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ์—†์–ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ์ตœ์†Œํ™” ๋˜๋ฉฐ, SSR๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ์ข‹๊ณ , ์ž‘์€ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ(187kb)๋กœ ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ํฐ ์ด์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ Zustand๋Š” npm trends์—์„œ recoil์„ ์•ž์„œ๊ฐ€๊ณ  ์žˆ์œผ๋ฉฐ, ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต

์ƒํƒœ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ƒํƒœ์˜ ๋” ๋งŽ์€ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ง„ ๊ธฐ๋Šฅ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— create-slice.ts ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ํŒŒ์ผ ๋‚ด ์ดˆ๊ธฐ๊ฐ’๊ณผ ๊ทธ ๊ฐ’์„ ๊ด€๋ฆฌํ•  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ ์–ธ ํ›„ app/shared/hooks/use-store.ts ํŒŒ์ผ์—์„œ store์— ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค.

์ƒํƒœ๋ช…๊ณผ ํƒ€์ž… (v-2024.03.23)

  // app/space/create-slice.ts
  spaces: ISpace[];
  modalTabGroup: any | null;

  // app/tool-bar/create-slice.ts
  toolbarStatus: ToolbarStatus;

  // app/tab-croup/create-slice.ts
  tabGroups: ITabGroup[];

  // app/resizable/create-slice.ts
  isResizing: boolean;

  // app/left-sidebar/create-slice.ts
  emoji: Emoji;
  isOpen: boolean;
  currentIcon: string;
  currentAppName: string;
  editingSpaceId: string;
  isCreatingApp: boolean;
  currentCategory: string;
  deletingSpaceId: string;
  isEditingSpace: boolean;
  currentSpaceName: string;
  isCreatingSpace: boolean;
  isDeletingSpace: boolean;
  isFoldedSidebar: boolean;
  isOpenEmojiPicker: boolean;

  // app/right-sidebar/create-slice.ts
  isOpenRightSidebar: boolean;

์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์„๊นŒ?

๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ผ์„ ์œ„ํ•œ ์ผ์„ ์ค„์ด๊ณ , ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์˜ ๋‹ค์–‘์„ฑ์„ ์กด์ค‘ํ•˜๊ณ , ์ƒ์‚ฐ์„ฑ์„ ์ค‘์‹œํ•˜๋Š” ํšŒ์‚ฌ์˜ fit์— ๋งž๋Š” ์—…๋ฌด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ

ํ˜‘์—…์„ ์œ„ํ•œ Git ์‚ฌ์šฉ์€ ๋„ˆ๋ฌด ์—„๊ฒฉํ•˜๊ณ  ๋งŽ์€ ์ปจํ”Œ๋ฆญ์„ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋–„๋ฌธ์— ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์ปจํ”Œ๋ฆญ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ(trunk-based-development)์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์€ main์ด๋ผ๋Š” ์ฃผ ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜๋งŒ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…ํ•œ ๋ธŒ๋žœ์น˜๋Š” main์œผ๋กœ ๋ฐ”๋กœ ๋จธ์ง€ํ•˜์—ฌ ์ž์ฃผ, ๋น ๋ฅธ ํ†ตํ•ฉ๊ณผ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ž‘์—…

์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ feature ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ž‘์—…ํ•˜๋ฉฐ, ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ์ข‹์€ ํ’ˆ์งˆ์˜ ํ”ผ๋“œ๋ฐฑ์„ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ˆ˜ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ CI ๋นŒ๋“œ

main์œผ๋กœ ๋ฐ”๋กœ ๋จธ์ง€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ๋‘๋ ต์ง€ ์•Š๋„๋ก ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ†ต๊ณผํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ๋จธ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํด๋ฆญ์—…๊ณผ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์—ฐ๊ฒฐํ•ด Task๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํด๋ฆญ์—…์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Github branch์™€ pull requests๋ฅผ ๋ฒ„ํŠผ ํ•˜๋‚˜๋กœ ๊ฐ„๋‹จํžˆ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

ํด๋ฆญ์—…์— dev-jakga๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค

ํด๋ฆญ์—…์˜ App Center์—์„œ GitHub๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. Create a private connection์˜ Connect ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ Authorize ClickUp์„ ํ•ด์ค๋‹ˆ๋‹ค. โ—๏ธ์ด๋•Œ ๋ณธ์ธ์˜ ๊ณ„์ •์—์„œ ์ž ์‹œ ๋กœ๊ทธ์•„์›ƒ ํ•œ ํ›„ dev-jakga ์•„์ด๋””๋กœ ์ ‘์†ํ•ด ๋กœ๊ทธ์ธ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋œ ์ดํ›„๋Š” ๋‹ค์‹œ ๋ณธ์ธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž‘์—… ์ „ ํด๋ฆญ์—…์— task๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํด๋ฆญ์—… ๊นƒํ—ˆ๋ธŒ ์›นํ›…์€ ์˜์–ด๋งŒ ํฌํ•จํ•˜๋„๋ก ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. task๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉ์€ [๊ธฐ๋Šฅ์˜๋ฌธ๋ช…]ํ•œ๊ธ€๊ธฐ๋Šฅ์„ค๋ช…์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. description์— ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ์ด๋•Œ ํด๋ฆญ์—…์—์„œ task_id๋ฅผ ๋ฐœ์ƒํ•ด์ค๋‹ˆ๋‹ค. ์˜ˆ์‹œ : CU-86ent4gh3

๋ธŒ๋žœ์น˜ ์ƒ์„ฑ, PR์€ ํด๋ฆญ์—…์„ ํ†ตํ•ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํด๋ฆญ์—…์„ ํ†ตํ•ด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด taskid๋ฅผ ํฌํ•จํ•˜์—ฌ ์ƒ์„ฑํ•ด์ฃผ๋ฉฐ, ๋ธŒ๋žœ์น˜์ด๋ฆ„๊ณผ ์ƒ์„ฑ ๋ช…๋ น์–ด๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ : git checkout -b "add-readme---_CU-86ent4gh3"

PR ๋˜ํ•œ ํด๋ฆญ์—…์—์„œ ๊ฐ„๋‹จํžˆ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ํ™•์ธ์ด ํ•„์š”ํ•œ checklist๋ฅผ ํฌํ•จํ•˜์—ฌ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‘๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ธŒ๋žœ์น˜์™€ PR์˜ ์ƒํƒœ๊ฐ€ ํด๋ฆญ์—… task์— ์—ฐ๋™๋˜์–ด ํ•œ๊ณณ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ๋ชฉ์ ์„ ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊นƒ๋ชจ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋ชจ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊นƒ๋ชจ์ง€๋Š” ๋‹ค๋ฅธ ํ”„๋ฆฌํ”ฝ์Šค๋ณด๋‹ค ์ „๋‹ฌ๋ ฅ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜, ์ผ๋ฐ˜์ ์ธ ํ”„๋ฆฌํ”ฝ์Šค๋ณด๋‹ค ๋” ์„ธ๋ถ„ํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ€์ž๋กœ ๊ฐ€๋“ํ•œ ๋ฉ”์„ธ์ง€๋“ค ์‚ฌ์ด์—์„œ ์ปค๋ฐ‹์˜ ๋ชฉ์ ๊ณผ ์˜๋„๋ฅผ ์•„์ฃผ ์‰ฝ๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Gitmoji ์ต์Šคํ…์…˜์ด๋‚˜ gitmoji-cli๋ฅผ ํ™œ์šฉํ•ด ์ ‘๊ทผํ•˜๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ์‹œ [๊นƒ๋ชจ์ง€] ์ปค๋ฐ‹ ๋‚ด์šฉ์˜ ๊ตฌ์กฐ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ : ๐ŸŽ‰ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์‹œ์ž‘

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

์•ฑ ๋‚ด ํŽ˜์ด์ง€ ์ด๋™์ด ์—†๋Š” ํ”„๋กœ์ŠคํŽ˜์ด์Šค๋Š” ํฐ ๊ธฐ๋Šฅ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋””๋ ‰ํ† ๋ฆฌ

  // ๊ถŒ์žฅ ์ต์Šคํ…์…˜์„ ์ถ”๊ฐ€
  .vscode
  โ”— extensions.json

  // ๊ณต์œ  ์‚ฌ์šฉ
  shared
  โ”ฃ components
  โ”ฃ hooks
  โ”— utils

  // app/๊ธฐ๋Šฅ ํด๋”์˜ ๊ตฌ์กฐ
  space
  โ”ฃ blocks              
  โ”ฃ create-slice.ts     
  โ”ฃ index.tsx 
  โ”— types.ts

  // electron์˜ process
  process

์ „์ฒด ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋™ : ์ตœ์ข… ์—…๋ฐ์ดํŠธ ์ผ์ž 2024-03-12 (๋งํฌ)