Skip to main content

๐Ÿ“– ๋ฐ•๋ฏธ์ •์˜ ๊นƒ&๊นƒํ—ˆ๋ธŒ ์ž…๋ฌธ

Chanho Lee
๋‹ค์–‘ํ•œ ๋ถ„์•ผ๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” ํ•™์ƒ
info

๊ณจ๋“ ๋ž˜๋น— ์ถœํŒ์‚ฌ๋กœ๋ถ€ํ„ฐ ์ฑ…์„ ์ œ๊ณต๋ฐ›์•„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

โ„น๏ธBook Infoโ€‹

tip

์ฑ… ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ต๋ณด๋ฌธ๊ณ  ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค!

์ฑ…

  • ์ œ๋ชฉ: ๋ฐ•๋ฏธ์ •์˜ ๊นƒ&๊นƒํ—ˆ๋ธŒ ์ž…๋ฌธ
  • ์ €์ž: ๋ฐ•๋ฏธ์ •
  • ์ถœํŒ์‚ฌ: ๊ณจ๋“ ๋ž˜๋น—
  • ์ถœ๊ฐ„: 2021-09-13

๐ŸŽฌIntroโ€‹

์ด ์ฑ…์˜ ์ €์ž๋Š” ํŽ˜์ด์Šค๋ถ ์–ผ๋˜(Early ๋˜๋ผ์ด) ๊ทธ๋ฃน์„ ์šด์˜ํ•˜์‹œ๋Š” ์šด์˜์ง„ ์ค‘ ํ•œ ๋ถ„์ด๋ฉฐ, ๋ฐฐ๋ฏผ ๋ฒ ํŠธ๋‚จ์„ ๊ฑฐ์ณ ํ˜„์žฌ ๋ฌด์‹ ์‚ฌ์— ๊ณ„์‹  ๋ฐ•๋ฏธ์ • ๋‹˜์ด๋‹ค. ์ •๋ง ๋ฐฐ์šธ ์ ์ด ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋ถ„ ์ค‘ ํ•œ ๋ถ„์ด๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋œ๋‹ค๋ฉด ํƒˆ์ž‰์—์„œ **์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ '๊ณต์œ ์˜ ๊ธฐ์ˆ '**์ด๋ผ๋Š” ์ฃผ์ œ๋กœ ๋ฐœํ‘œํ•˜์‹  ์›”๊ฐ„ ์ฝ”๋“œ๋ฆฌ๋ทฐ ver_0.1: ์ปค๋ฆฌ์–ด ์„ฑ์žฅ CODE๋ฅผ ๋ณด๋Š” ๊ฒƒ๋„ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์„ฑ์žฅํ•˜๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

์ฑ…์ด ์ถœ๊ฐ„๋˜๊ธฐ ์ „ ๋ฒ ํƒ€๋ฆฌ๋”๋ฅผ ๋ชจ์ง‘ํ–ˆ์„ ๋•Œ, ์ €์ž๋ฅผ ํ–ฅํ•œ ๊ฐœ์ธ์ ์ธ ํŒฌ์‹ฌ์œผ๋กœ ์‹ ์ฒญํ–ˆ์œผ๋‚˜ ๋–จ์–ด์กŒ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ถœ๊ฐ„๋œ ์ดํ›„ ๊ณจ๋“ ๋ž˜๋น— ์ถœํŒ์‚ฌ์—์„œ ๋ถ์Šคํฌ์ผ๋Ÿฌ๋ฅผ ๋ชจ์ง‘ํ–ˆ๊ณ , ์ง€์›ํ•˜์—ฌ ์ด ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ฐœ์ธ์ ์ธ ํŒฌ์‹ฌ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ git์„ ํ™œ์šฉํ•˜์—ฌ ํ˜‘์—…ํ•  ์ค„ ์•„๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ๋‹ค๋Š” ๋งˆ์Œ์ด ๋” ์ปธ๋‹ค. ๋Œ€ํ•™์—์„œ ์˜คํ”ˆ์†Œ์Šค ๊ด€๋ จ ์ˆ˜์—…์„ ๋“ค์–ด git์˜ ๊ธฐ๋Šฅ์„ ์–ด๋А์ •๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋‹จ์ˆœํžˆ commit, push์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ branch ๋ณ€๊ฒฝ, merge, pull request ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์“ธ ์ค„ ์•„๋Š” ํ˜‘์—…์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ์—ˆ๋‹ค.

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

๐Ÿ“–Book Reviewโ€‹

์‹œ๋‚˜๋ฆฌ์˜คโ€‹

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

๊นƒํ—ˆ๋ธŒ์˜ ์ด์Šˆ๋‚˜ ํ”„๋กœ์ ํŠธ ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹ค์ œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฝ”๋“œ์— ๋ฐ˜์˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š”๋ฐ .md ํŒŒ์ผ ์ˆ˜์ •๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋ฐ ์ž๋™ํ™”โ€‹

์œ„์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋‹ค๋ฅธ ์ฑ… ๋˜๋Š” ๊ฐ•์˜์—์„œ๋Š” Git, GitHub ์‹ค์Šต์„ ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ์ˆ˜์ •์œผ๋กœ ์ง„ํ–‰ํ–ˆ์„ ํ…๋ฐ ์ด ์ฑ…์—์„œ๋Š” Node.js ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์•„๋งˆ 'GitHub Actions๋ฅผ ์ด์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด์„œ'๋ผ๋Š” ์ด์œ ๋„ ์žˆ์—ˆ์ง€ ์•Š์•˜์„๊นŒ ์ถ”์ธกํ•ด๋ณธ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฑ…์—์„œ GitHub Actions๊นŒ์ง€ ์„ค๋ช…ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ์— ์ƒ๋‹นํžˆ ์ธ์ƒ์ ์ด์—ˆ๋‹ค.

GitHub Actions์˜ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด๊ณ  AWS ECS์™€ Azure Web App Service์— ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ์„ค์ •ํ•ด๋ณธ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ง€๋Š” ์•Š๊ณ , '์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.'๋ผ๋Š” ๋А๋‚Œ์œผ๋กœ ์†Œ๊ฐœํ•œ๋‹ค. AWS, Azure๊นŒ์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์ฑ…์˜ ์ทจ์ง€์™€ ๋งž์ง€ ์•Š๊ธฐ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœ๋˜์–ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

VSCode ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•ด๋ณด๊ธฐโ€‹

์˜ˆ์ „์— ๋‚˜๋Š” CLI(Command-Line Interface) ํ™˜๊ฒฝ์—์„œ Git ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กญ๋‹ค๊ณ  ์—ฌ๊ฒผ๋‹ค. ์ฒ˜์Œ ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ๋Š” "์ด๊ฑธ ๊ตณ์ด command๋ฅผ ๋‹ค ์™ธ์šฐ๊ณ  ์žˆ์–ด์•ผ ํ• ๊นŒ?"๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜์—ฌ Sourcetree, GitHub Desktop, TortoiseGit ๋“ฑ๊ณผ ๊ฐ™์€ GUI(Graphical User Interface) ํˆด์„ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. (๊ทผ๋ฐ ๊ฒฐ๊ตญ ์ž์ฃผ ์“ฐ๊ณ  ์‰ฌ์šด ๋ช…๋ น์–ด๋“ค์€ ๋‹ค ์™ธ์šฐ๊ฒŒ ๋˜๋”๋ผ...๐Ÿคฆโ€โ™‚๏ธ) ์ €๋Ÿฐ ํˆด๋“ค๋„, command๋„ ๋‹ค ์ข‹์ง€๋งŒ ์ตœ๊ทผ์˜ ๋‚˜๋Š” VSCode๋ฅผ ์• ์šฉํ•œ๋‹ค.

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

์‰ฝ๊ฒŒ ์„ค๋ช…๋˜์–ด์ง„ ์ฑ…โ€‹

๋‚œ ์˜ˆ์ „์— Git์„ ์ƒํ™œ์ฝ”๋”ฉ ๊ฐ•์˜์™€ Pro Git์œผ๋กœ ๊ณต๋ถ€ํ–ˆ์—ˆ๋‹ค. GitHub๋Š” ๋”ฐ๋กœ ์ธํ„ฐ๋„ท์—์„œ ๋ฌธ์„œ๋“ค์„ ๋ง‰ ์ฐพ์•„๊ฐ€๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ์—ˆ๋‹ค. ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ์ฑ…์œผ๋กœ Git์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๋‘ ๋ฒˆ ์ •๋„ ํฌ๊ธฐํ–ˆ๋˜ ๊ฒฝํ—˜๋„ ์žˆ๋‹ค. tracked, staged ๋“ฑ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋จธ๋ฆฌ๊ฐ€ ์•„ํŒ ์—ˆ๋‹ค. ์ด ์ฑ…์€ ์‰ฝ๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ์–ด ๊ทธ๋Ÿด ์ผ์ด ์—†๋‹ค.

๋˜ํ•œ, ๋…์ž๋ฅผ ๋ฐฐ๋ คํ•˜๋Š” ์„ธ์„ธํ•œ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•˜๋‹ค. ํŽธ์ง‘์ž์ด์‹  ์ƒ๊ฐ์ด ์ฑ…์œผ๋กœ, ๋ฐ•๋ฏธ์ •์˜ ๊นƒ&๊นƒํ—ˆ๋ธŒ ๋งŒ ์ฝ์–ด๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ •๋ง ๋…์ž๋ฅผ ์œ„ํ•˜๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ์ฑ…์„ ์ฝ์–ด ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ์ฑ…์„ ์ถ”์ฒœํ•œ๋‹ค.

๐Ÿง‘โ€๐Ÿซ๋Œ€์ƒ ๋…์žโ€‹

Git๊ณผ GitHub๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ˆ„๊ตฌ๋“ ์ง€ ์•Œ์•„์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ์ง€์‹์ด ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ๊ธฐ์ˆ ์ด ๋˜ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€”์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, GitHub๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ์†Œ์…œ ๋ฏธ๋””์–ด ๊ฐ™์€ ๋А๋‚Œ์ด๋ผ ์œ ์šฉํ•œ ์ •๋ณด์™€ ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ์˜ฌ๋ผ์˜จ๋‹ค. ๊ฐœ๋ฐœ์ž๋ฅผ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค๋ฉด ์ผ์ฐ ๋ฐฐ์šฐ๋ฉด ๋ฐฐ์šธ์ˆ˜๋ก ์ข‹๋‹ค.

์ด ์ฑ…์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์ž…๋ฌธ์„œ์ด๋ฉด์„œ ์‹ค์ œ๋กœ ํ˜‘์—…ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. Git๋„ ์‚ฌ์‹ค ์‹ฌํ™”์ ์ธ ๋ถ€๋ถ„์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด submodule ๋“ฑ์˜ ๋‚ด์šฉ์ด ์žˆ์ง€๋งŒ ๊ทธ๋Ÿฐ ๋‚ด์šฉ์€ ์ œ์™ธํ•˜๊ณ  ์ •๋ง ์‹ค์ œ๋กœ ์ž์ฃผ ์“ฐ์ด๋Š” ๋‚ด์šฉ๋งŒ ๋‹ด๊ฒจ ์žˆ์œผ๋‹ˆ Git๊ณผ GitHub์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์ž…๋ฌธ์ž์—๊ฒŒ ์ถ”์ฒœํ•œ๋‹ค.