๏ฃฟ Apple Lover Developer & Artist

์˜์†์ ์ธ ๋””์ž์ธ์— ํ˜„๋Œ€์˜ ๊ณต๊ฐ์„ ์ฑ„์›Œ๋„ฃ๋Š” ๊ณต๋ฐฉ์ž…๋‹ˆ๋‹ค

๐Ÿถ Experience/Life Story

[ํšŒ๊ณ ] ํŒŒ์ด์ฌ ํ† ์ด ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ

singularis7 2022. 12. 11. 02:53
๋ฐ˜์‘ํ˜•

Overview

๊ตญ๋ฏผ๋Œ€ํ•™๊ต 22๋…„ 2ํ•™๊ธฐ ์ด๋ฏผ์„ ๊ต์ˆ˜๋‹˜์˜ ์‚ฌ์ œ๋™ํ–‰์„ธ๋ฏธ๋‚˜ ์ˆ˜์—…์„ ์ˆ˜๊ฐ•ํ•˜๋˜ ์ค‘ ๊ต์ˆ˜๋‹˜๊ป˜์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”๋ฅผ ์ฒดํ—˜์„ ์œ„ํ•ด ํ•™์šฐ ๋ถ„๊ณผ ํŒ€์„ ๊ตฌ์„ฑํ•ด์ฃผ์…จ๋‹ค.

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

๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์„œ๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ† ๋ก ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธธ์„ ์ฐพ์•„๋‚˜๊ฐ€๋Š” ๊ฒฝํ—˜ ๊ณผ์ •์„ ์ƒ์ƒํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฒˆ ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ์ด๋‹ค.


๊ณ„ํš

์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ† ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ํ† ์ด ํ”„๋กœ์ ํŠธ, ์†Œํ†ต ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ง„ํ–‰ ๋ฐฉ์‹์— ๊ด€ํ•˜์—ฌ ๊ฐ„๋žตํ•œ ๊ณ„ํš์„ ์„ธ์›Œ๋ณด๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค.

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

๊ธฐ์ˆ  ์Šคํƒ์˜ ๊ฒฐ์ •

๋‚œ๊ด€์€ ํŒ€์› ๊ฐ„์˜ ๊ธฐ์ˆ ์  ๊ฒฝํ—˜ ๋ฐฐ๊ฒฝ์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค. ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด์„  ์„œ๋กœ์˜ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋ ค์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๋ฉด ์–‘์งˆ์˜ ๊ฑด์„ค์ ์ธ ๋…ผ์Ÿ์ด ์ด๋ค„์งˆ ์ˆ˜ ์žˆ์„๊นŒ?

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

๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์ง€์› GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ PyQt๋ฅผ ์„ ํƒํ•˜์˜€๋‹ค. GUI ๊ฐœ๋ฐœ ํˆด๋กœ ๋Œ€ํ‘œ์ ์ด๊ธฐ๋„ ํ–ˆ๊ณ  ์ถฉ๋ถ„ํ•œ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ตœ๊ทผ์— ๋ฉ”์ด์ € ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ค„์ง„ ๋งŒํผ ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

ํŠน์ดํ•œ ์ ์ด๋ผ๋ฉด GPL ๋ผ์ด์„ผ์Šค๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋งŒํผ ์ •์ฑ…์ด ๊น๊นํ•˜๊ธด ํ–ˆ์œผ๋‚˜ GitHub ์ƒ์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•  ๊ฒƒ์„ ์—ผ๋‘ํ•˜๊ณ  ์žˆ๊ธฐ์— ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค.

ํ˜‘์—… ๋ฐฉ์‹์˜ ๊ฒฐ์ •

์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•  ๋•Œ, ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ฝ”๋“œ๊ฐ€ ๊ฐœ๋ฐœ๋˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ž‘์„ฑ๋œ ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณผ ์—ฌ์ง€๋ฅผ ์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์™„์„ฑ๋œ ์ฝ”๋“œ์™€ ๊ฐœ๋ฐœ ๊ณผ์ • ๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋…ผ์Ÿ์„ ํ•˜๋‚˜์˜ ํ”Œ๋žซํผ์—์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด์ƒ์ ์ผ ๊ฒƒ์ด๋‹ค.

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

  1. Pull Request ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ๋ณ€ํ™”๋ฅผ ์ค€๋‹ค.
  3. ์ฝ”๋“œ์˜ diff, ์ปค๋ฐ‹ history ๋“ฑ์„ ํ™œ์šฉํ•ด ์—…๋ฐ์ดํŠธ ๋‚ด์—ญ์„ ํ™•์ธํ•œ๋‹ค.
  4. ์ฝ”๋ฉ˜ํŠธ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์ฝ”๋“œ์— ๋Œ€ํ•ด ํ† ๋ก ํ•œ๋‹ค.
  5. conflict ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ๋‹ค.
  6. ํ’ˆ์งˆ์ด ๊ฐœ์„ ๋œ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•œ๋‹ค.

Git์„ ํ™œ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ˜•์ƒ ๊ด€๋ฆฌํ•˜๋‹ค ๋ณด๋ฉด commit์„ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•œ๋‹ค. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ์„œ๋กœ๊ฐ€ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ์ถ”์ ํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์นด๋ฅด๋งˆ ์Šคํƒ€์ผ ์„ ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. <type>์— feat, fix, docs ๋“ฑ์˜ ์˜ˆ์•ฝ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์˜๋„๋ฅผ ํ•จ์ถ•์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ค‘์š”ํ•œ ์˜๋…ผ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ทฐ ์š”์ฒญ ๋ฐ ์ง„ํ–‰ ์ƒํƒœ ๊ณต์œ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋“ฑ ์‹ค์‹œ๊ฐ„ ์†Œํ†ต์„ ์œ„ํ•ด Slack์„ ํ™œ์šฉํ–ˆ๋‹ค. ์†Œํ†ต ๊ณผ์ •์ด ๊ธฐ๋ก์— ๋‚จ๊ธฐ๋„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ด๋ฉด ํฌ๋งทํŒ…์ด ๋˜์–ด ๋ณด์ด๋Š” ๋“ฑ ํŽธ๋ฆฌํ•œ ์ ์ด ๋งŽ์€ ํˆด์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์Šฌ๋ž™์„ ๋„์ž…ํ•œ ์ด์œ ๋Š” ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜์— ๊ฐœ๊ด„์ ์ธ ๋ฐฉํ–ฅ์„ฑ์„ ํ•ฉ์˜ํ•˜๊ณ  ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋Š” ๋น ๋ฅด๊ฒŒ ์˜๋…ผํ•ด์„œ ๊ฒฐ์ •ํ•˜๋Š” ์ด๋ฒˆ ์†Œํ†ต ๋ฐฉ์‹์— ์ ํ•ฉํ•œ ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐœ๋ฐœ

์ˆ˜๋„์ฟ  ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ • ์†์— ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ ๊ฐ€์น˜๊ด€ ๋ฐ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ์ถ”๋ ค์„œ ์†Œ๊ฐœํ•ด๋ณธ๋‹ค.

Minimalism - Less is more

ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๋Š” ๋ง‰์—ฐํ•œ ์˜ˆ์ƒ์œผ๋กœ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š์•˜๋‹ค. ๋น„์–ด ์žˆ๋Š” ํด๋”์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ๊ผญ ํ•„์š”ํ•œ (ํ˜น์€ ์กด์žฌ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š”) ํŒŒ์ผ๋งŒ ์ƒ์„ฑํ–ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ PyQt ๋งŒ ์™ธ๋ถ€ ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ์ค‘์š”ํ•œ ์ •์ฑ… ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€๋‹ค.

์ œํ’ˆ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ์ค„์˜€๋‹ค. ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํ™œ์šฉํ•ด requrement.txt ์— ์ •์˜๋œ ์˜์กด์„ฑ์ด ํ•œ๋ฒˆ์— ์„ค์น˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ œํ’ˆ์˜ ์‹คํ–‰ ์ง€์ ์ด ์™ธ๋ถ€์— ํŒŒ์ผ๋กœ ๋…ธ์ถœ๋˜๊ณ  ๋‚ด๋ถ€ ๋กœ์ง์„ ์บก์Šํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.

Abstraction - Understandable, Maintainable

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, UI ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠน์ • "๋ชจ๋“œ" ์— ๋†“์ด์ง€ ์•Š๋Š”๋‹ค. ์–ด๋–ค ์ž…๋ ฅ์ด ๋“ค์–ด์™€๋„ solve์™€ reset ๋ฒ„ํŠผ์€ ๋™์ผํ•œ ๋™์ž‘์„ ์ง๊ด€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„๊ณผ ๊ฒŒ์ž„ ๋ฐ ํ…Œ์ŠคํŠธ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค. ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค๋ช…์€ ํ•ด๋‹น ์ฝ”๋“œ์˜ ์—ญํ•  ๋ฐ ์˜๋ฏธ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค์ด๋ฐ์„ ํ•˜๊ณ ์ž ๊ณ ๋ฏผํ–ˆ๋‹ค.

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

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

๊ณผ์ •

GitHub ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Jira ์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ ํ”Œ๋ž˜๋‹์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์— ์ •์˜ํ•œ Phase๋ฅผ ์„ ์–ธํ•ด๋ณด์•˜๋‹ค. ๋˜ํ•œ ๊ฐ Phase๋ฅผ issue๋กœ ํ™•์žฅํ•˜์—ฌ ์„ธ๋ถ€ ์ž‘์—…์„ ์ •์˜ํ•˜๊ณ  ์ด๋•Œ ๋ฐœ๊ธ‰๋œ issue #๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ ์—ฐ๋™๋˜์–ด ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์†์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ issue๋ฅผ ๋งˆ์ผ์Šคํ†ค์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋ฒˆ์˜ ๊ฒฝ์šฐ์—” ํ”„๋กœ์ ํŠธ Phase๋กœ ๋ฌถ์—ฌ ์žˆ์–ด ๋งˆ์ผ ์Šคํ†ค ๋‹จ์œ„ ๋ถ„๋ฅ˜๋Š” ์ง„ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค.

์ „์ฒด์ ์ธ ๊ฐœ๋ฐœ ํ๋ฆ„์€ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€๊นŒ์šด ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์™„์„ฑ๋˜๋„๋ก ์ง„ํ–‰๋œ๋‹ค.

  1. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ
  2. ๊ฒŒ์ž„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
  3. GUI ์ฝ”๋“œ ์—ฐ๊ฒฐ์‹œํ‚ค๊ธฐ
  4. PR ์ž‘์„ฑ ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ง„ํ–‰ํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ

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

.gitignore ํŒŒ์ผ์— IDE, ๋งฅ OS ๊ด€๋ จ ํŒŒ์ผ์„ Git ์ด ํ˜•์ƒ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋„๋ก ์„ ์–ธํ•ด๋‘์—ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ ํŒŒ์ผ์„ ์ž์‹ ์ด ์„ ํ˜ธํ•˜๋Š” IDE์™€ ์—ฐ๋™ํ•˜์—ฌ ์œ ์ง€ ๋ณด์ˆ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ •๊ณผ ๊ด€๋ จ๋œ ๋งŒํผ ์ „์šฉ ๋ธŒ๋žœ์น˜ configureENV์—์„œ ์ž‘์—… ํ›„ main์— PR์„ ์ž‘์„ฑํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜์˜€๋‹ค.

๊ฒŒ์ž„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœํ•˜๊ธฐ

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

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ unittest ๋ฅผ ํ†ตํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ฌํ•ด ๊ฒฝํ—˜ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Swift์™€ dart ๊ทธ๋ฆฌ๊ณ  Python์ด๋‹ค. ์ด ์…‹์€ ๋ชจ๋‘ ๋‹ค๋ฅธ ์–ธ์–ด์ด์ง€๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์šฉ๋ฒ•์€ ์ •๋ง ๋น„์Šทํ•˜๋‹ค. setup ๊ณผ tearDown์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ํ†ต๊ณผ, ์‹คํŒจ๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ๊ฒ€์ฆํ•˜๊ณ ์ž ํ•˜๋Š” API์˜ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ์ฐพ์•„์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•œ GitHub Action CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹์ด ๊ฒ€์ฆ๋˜๋„๋ก ํ™•์žฅํ•ด๋ณด๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์ด๋ฒˆ์˜ ๊ฒฝ์šฐ ์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰ํ•˜์ง€๋Š” ์•Š์•˜๋‹ค.

๊ฐœ๋ฐœํ•˜๋ฉด์„œ ํ•„์ž๊ฐ€ ์ƒ๊ฐํ•œ ํŠน์ด ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

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

๋‹คํ–‰ํžˆ๋„ ํŒŒ์ด์ฌ์—๋Š” ์ด ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ํŒŒ์ด์ฌ 3.5 ๋ฒ„์ „์— Type Annotation์ด ๋„์ž…๋˜์–ด ํ•จ์ˆ˜, ๋ณ€์ˆ˜ ๋“ฑ์˜ ์ •์˜ ๋ถ€์— ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ํ˜•ํƒœ๋Š” ์Šค์œ„ํ”„ํŠธ์˜ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ : ๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์„ ๋ช…์‹œํ•˜๊ณ  -> ์„ ํ†ตํ•ด ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

์™ธ์—๋„ ํŒŒ์ด์ฌ์˜ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๊ฐ€ reference๋ฅผ ํ†ตํ•œ ํ• ๋‹น์ด ์ด๋ค„์ง€๋Š” ์ ์„ ์ฃผ์˜ํ•˜์—ฌ ์ฝ”๋”ฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

ํŒŒ์ด์ฌ๋„ C++ ๋ฒกํ„ฐ์ฒ˜๋Ÿผ ์ดˆ๊ธฐ๊ฐ’๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค. 2์ฐจ์› ๋ฐฐ์—ด์„ ์„ ์–ธํ•  ๋•Œ ํ•„์š”ํ–ˆ๋Š”๋ฐ, ๋Œ€์•ˆ์œผ๋กœ list comprehension์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ด์„  ์ ์ธ ๋ฌธ๋ฒ•์œผ๋กœ ์†์‰ฝ๊ฒŒ ์ดˆ๊ธฐ๊ฐ’์ด ์žˆ๋Š” ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธด ํ•˜๋‹ค.

์ด๋ฒˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Sudoku Game๊ณผ ๊ด€๋ จ๋œ ๋งŒํผ ์ „์šฉ ๋ธŒ๋žœ์น˜ devSudokuGame์—์„œ ์ž‘์—… ํ›„ main์— PR์„ ์ž‘์„ฑํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜์˜€๋‹ค.

GUI ์ฝ”๋“œ ์—ฐ๊ฒฐ์‹œํ‚ค๊ธฐ

GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์ž๋Š” View์™€ Model์„ ์—ฐ๋™ํ•˜๊ณ  ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๊ด€ํ•˜์—ฌ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•œ๋‹ค.

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

์ด๋ฒˆ์˜ ๊ฒฝ์šฐ ์ „ํ†ต์ ์ธ MVC ํŒจํ„ด์„ ํ†ตํ•ด ์—ญํ• ์„ ๋‚˜๋ˆ„๊ณ  Controller์—์„œ View์™€ Model์„ ์ง์ ‘ ๋ฐ”์ธ๋”ฉํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฐ”์ธ๋”ฉ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ตฌํ˜„๋ฒ•์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐœ๋ฐœํ•˜๋ฉด์„œ ํ•„์ž๊ฐ€ ์ƒ๊ฐํ•œ ํŠน์ด ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜์—๋Š” ์ตœ์‹ ์€ ์•„๋‹ˆ์ง€๋งŒ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” PyQt5 ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋‹ค. ๋ฌธ์ œ๋Š” ํ•„์ž์˜ ๋งฅ๋ถ์—์„œ ๋ฐœ์ƒํ–ˆ๋‹ค. 2020๋…„๋ถ€ํ„ฐ M1 ๋งฅ์„ ์‹œ์ž‘์œผ๋กœ ARM ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ด์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค. PyQt5๋Š” ARM ๋งฅ ํ™˜๊ฒฝ์„ ํ˜ธํ™˜ํ•˜์ง€ ์•Š์•„์„œ PyQt6 ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๊ธฐ์ˆ  ์Šคํƒ์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๋ฒˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ธŒ๋žœ์น˜ devSudokuGame์—์„œ ์ด์–ด์„œ ์ž‘์—…ํ•œ ํ›„ main์— PR์„ ์ž‘์„ฑํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜์˜€๋‹ค.

๋ฆฌ๋ทฐ

์ˆ˜๋„์ฟ  ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ ์ž‘์„ฑ์ž ์ž…์žฅ์—์„œ ์šฐ๋ฆฌ ํŒ€ ํ•™์šฐ ๋ถ„๊ป˜ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์˜ฌ๋ฆฐ PR๊ณผ ํ•™์šฐ๋ถ„์˜ ๊ฐ€์œ„ ๋ฐ”์œ„ ๋ณด ํ”„๋กœ์ ํŠธ PR์— ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ฒจ๋“œ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์ง„ํ–‰๋˜์—ˆ๋‹ค.

์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ํ–ฅํ•œ ํ† ๋ก ์„ ํ•ด์•ผ ํ•˜๋Š”๋ฐ, "๋‚ด ์ƒ๊ฐ์ด ๋ฌด์กฐ๊ฑด ์˜ณ์•„!!!" ์‹์œผ๋กœ ๋‚˜์™€์„œ ํŒ€์›๊ณผ ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์—†๋Š” ์˜๋ฏธ ์—†๋Š” ๋…ผ์Ÿ์ด ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฑด์„ค์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด ํ•„์ž์˜ ๋งˆ์Œ ๊ฐ€์ง์„ ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๊ณ  ์‹œ์ž‘ํ–ˆ๋‹ค.

์ „์ œ๋Š” "๋‚ด ์˜๊ฒฌ์€ ํ‹€๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ์ •๋‹ต์€ ์—†๋‹ค"๋กœ ๊น”์•„๋ณด์•˜๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋‚ด์šฉ์„ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ „๋‹ฌํ•  ๋•Œ์—๋Š” ๊ณต์‹์ ์ธ ์ž๋ฃŒ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์ธ์šฉํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ฝ”๋ฉ˜ํŠธ๋กœ ๋‚จ๊ธด๋‹ค.

์‚ฌ๋žŒ๊ณผ ํ•จ๊ป˜ ๊ธฐ๋ถ„ ์ข‹๊ฒŒ ๋ฐฐ์šฐ๊ณ  ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

์ฝ”๋ฉ˜ํŠธ๋Š” ๊ฐ€๋Šฅํ•œ ์ƒ๋Œ€๋ฐฉ์˜ ๊ธฐ๋ถ„์„ ํ•ด์น˜์ง€ ์•Š๋„๋ก ๊ณต๊ฒฉ์ ์ธ ์–ด์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์นญ์ฐฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ ์นญ์ฐฌํ•œ๋‹ค. ์ด๋ชจ์ง€๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ๋ฐ๊ณ  ๋”ฐ๋“ฏํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์„œ๋กœ์˜ ๋ฐฐ์›€์„ ์œ„ํ•ด ๋‹ต์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๋‚ด์šฉ์„ ์ง์ ‘์ ์œผ๋กœ ๋…ธ์ถœํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์Šค์Šค๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•œ๋‹ค.

์ฝ”๋“œ

์ž‘์„ฑํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ "์ฝ”๋”ฉ ์Šคํƒ€์ผ"์— ๋Œ€ํ•œ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋งŽ์ด ๋‚จ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ํŒŒ์ด์ฌ์˜ ๋Œ€ํ‘œ์ ์ธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ผ์ธ ์ค‘ PEP8 ์„ ๊ธฐ๋ฐ˜์œผ๋กœ API ๋„ค์ด๋ฐ, ๋ ˆ์ด์•„์›ƒ ๋“ฑ์— ๊ด€๋ จํ•œ ๋‚ด์šฉ์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฆฐํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ต๋ฅ˜ํ•˜์˜€๋‹ค.

์ฝ”๋“œ ์ค‘ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์ด๋‚˜ ์ƒ์ˆ˜, ๋ณ€์ˆ˜, ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ์ผ๋ฐ˜ํ™”์‹œ์ผœ์„œ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค.

์ด์ „์— ํ•„์ž๊ฐ€ ๊ฒฝํ—˜ํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์„ธ์…˜์—์„œ ์ฝ”๋“œ์˜ ์„ค๊ณ„๋ฅผ ํ–ฅํ•ด ํ† ๋ก ์„ ํ•˜๊ณ  ์‹ถ์€ ๊ฐˆ์ฆ์ด ๋งŽ์ด ์žˆ์—ˆ๋‹ค.

์ด๋ฒˆ ํŒ€ ๋ฉ”์ดํŠธ ํ•™์šฐ ๋ถ„๊ณผ๋„ ๋ถ€์กฑํ• ์ง€๋ผ๋„ ์ฝ”๋“œ ์„ค๊ณ„์— ๊ด€ํ•œ ํ† ๋ก  ๊ฒฝํ—˜์„ ํ•œ๋ฒˆ์ฏค ๊ณต์œ ํ•˜๊ณ  ์‹ถ์–ด์„œ ๋…ผ์ œ ์ค‘ GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ทฐ-๋ชจ๋ธ ๋ฐ”์ธ๋”ฉ ๋ฐฉ์‹์— ๊ด€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒจ๋ณด์•˜๋‹ค.

์ˆ˜๋„์ฟ  ํ”„๋กœ์ ํŠธ ์ค‘์—๋„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋ช…์„ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•œ ์‚ฌ๋ก€๊ฐ€ ์žˆ์—ˆ๋‹ค. PEP8์—์„œ 120 % ์ž๊ตญ๋ฏผ๋งŒ ์ฝ๋Š”๋‹ค๊ณ  ์ƒ๊ฐ๋˜์ง€ ์•Š์œผ๋ฉด ์˜์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ฐพ๊ฒŒ ๋˜์–ด ์˜์–ด๋กœ ํ•จ์ˆ˜๋ช…์„ ์žฌ์ž‘์„ฑํ•˜์˜€๋‹ค.

์ œํ’ˆ

์ฝ”๋“œ์™€ ๋”๋ถˆ์–ด ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด ์ œ์•ˆ๋„ ์‹œ๋„ํ•ด๋ณด์•˜๋‹ค.

ํ•œ ์‚ฌ๋ก€๋กœ ๊ฐ€์œ„ ๋ฐ”์œ„ ๋ณด ํ”„๋กœ๊ทธ๋žจ ์ค‘ ์•ˆ๋‚ด ์‚ฌํ•ญ์„ ํ…์ŠคํŠธ ํŽธ์ง‘ Form์— text ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์•ˆ๋‚ด ๋ฌธ์ž์—ด์„ ์ง€์šฐ๊ณ  ์ž์‹ ์˜ ๊ฐ’์„ ํผ์— ์ž…๋ ฅํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ์žˆ์—ˆ๋‹ค.

์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ๋ฐœ๊ฒฌ๋œ ์ด ์ด์Šˆ๋Š” Placeholder๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๊ฐ’์„ ํผ์— ์ž…๋ ฅํ•  ๋•Œ, ์•ˆ๋‚ด ๋ฌธ์ž์—ด์ด ๋ฐ”๋กœ ์ˆจ๊ฒจ์ง€๋„๋ก ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ฒฐ๊ณผ

์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜๊ณ  ํŒ€์›๊ณผ ํ•จ๊ป˜ ์„œ๋กœ ๋Š๋‚€ ์ ์„ ๊ต๋ฅ˜ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํŒ€์› ๊ฐ„์˜ ์˜๊ฒฌ์„ ์†Œ๊ฐœํ•˜๋ฉฐ ์ด๋ฒˆ ํฌ์ŠคํŒ…์„ ๋งˆ๋ฌด๋ฆฌ ์ง€์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

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

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

๋ฐ˜์‘ํ˜•