[S1U7] Linux/Git ๊ธฐ์ดˆ

๐Ÿ‘ฝยท2024๋…„ 1์›” 8์ผ
0
post-thumbnail

Ch1. CLI (Command-Line Interface)

๐Ÿ”ธ CLI : WSL ๋ฆฌ๋ˆ…์Šค์šฉ ์œˆ๋„์šฐ์ฆˆ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ์•ฝ์ž.

๐Ÿ“Œ CLI ๋ช…๋ น์–ด

๐Ÿ”ธ GUI(Graphical User Interface) :
๐Ÿ”ธ I/O(Input/Output) : "์•„์ด์˜ค", ์ปดํ“จํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ
ํ„ฐ๋ฏธ๋„ = CLI

๐Ÿ”ธPrompt (ํ”„๋กฌํ”„ํŠธ) : ํ„ฐ๋ฏธ๋„ ์•ˆ์—์„œ ํ‚ค๋ณด๋“œ์˜ ์ž…๋ ฅ์„ ํ™•์ธํ•˜๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ์ค„์˜ ๊ณต๊ฐ„.

  • pwd (print working directory) : ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ํด๋”์˜ ์œ„์น˜ ํ™•์ธ. directory๋Š” ํด๋”.
  • mkdir (make directory) : mkdir ํด๋”๋ช…. ์ƒˆ๋กœ์šด ํด๋” ์ƒ์„ฑํ•˜๊ธฐ. (ํด๋” ๋˜๋Š” ํŒŒ์ผ ์ด๋ฆ„์— ๊ณต๋ฐฑ(๋„์–ด์“ฐ๊ธฐ)๋‚˜ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฉด. ๋ฐฑ์Šฌ๋ž˜์‹œ(\)๋ฅผ ์ด์šฉํ•ด ์ ์šฉ.
  • ls (list) : ํŠน์ • ํด๋”์— ํฌํ•จ๋œ ํŒŒ์ผ์ด๋‚˜ ํ•˜์œ„ ํด๋”์˜ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ.
    • ls -l : ํด๋”๋‚˜ ํŒŒ์ผ์˜ ํฌ๋งท์„ ์ „๋ถ€ ํ‘œํ˜„ํ•˜๋ผ๋Š” ์˜๋ฏธ.
      • drwxr-xr-x : ํด๋”๋ฅผ ๋‚˜ํƒ€๋ƒ„. ์ง„์ž…๊ฐ€๋Šฅ.
      • -rw-r--r-- : ํŒŒ์ผ์„ ๋‚˜ํƒ€๋ƒ„. ์ง„์ž…๋ถˆ๊ฐ€๋Šฅ.
    • ls -a : 'all'์ด๋ผ๋Š” ์˜๋ฏธ๋กœ ์ˆจ์–ด์žˆ๋Š” ํด๋”๋‚˜ ํŒŒ์ผ์„ ํฌํ•จํ•œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ.
    • ls -al ๋˜๋Š” ls -la : (์˜ต์…˜์„ ๋œปํ•˜๋Š” ๋Œ€์‹œ(dash, -) ๋’ค์— ์˜ค๋Š” ์˜ต์…˜์˜ ์ˆœ์„œ๋Š” ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ)
  • explorer.exe . : ํ„ฐ๋ฏธ๋„์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ GUI์˜ ํƒ์ƒ‰๊ธฐ๋กœ ์—ด๊ธฐ
  • cd (change directory) : cd ํด๋”๋ช… ํ”„๋กฌํฌํŠธ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ํด๋„๋ฅผ ๋‹ค๋ฅธ ํด๋”๋กœ ๋ณ€๊ฒฝ. cd ๋’ค์— ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•œ๋ฒˆ์— ์ด๋™์ด ๊ฐ€๋Šฅ. (cd ~/hellpWorld/hello).
  • touch : touch ํŒŒ์ผ๋ช….ํ™•์žฅ์ž. ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ. (ex. touch code.txt ํ…์ŠคํŠธ ํŒŒ์ผ ์ƒ์„ฑ)
  • cat : cat ํŒŒ์ผ๋ช…. ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅํ•˜๊ธฐ. ํŒŒ์ผ๋ช…์„ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅํ•˜๋ฉด ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์คŒ.
    • cat์„ ํ†ตํ•ด ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅํ•˜๋ฉด, ํŒŒ์ผ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•จ. ์›๊ฒฉ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” ์ผ์€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ด๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•œ ์ƒํƒœ์—์„œ ํฐ ํŒŒ์ผ์„ ์ถœ๋ ฅํ•˜๋Š” ์ผ์€ ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ .
  • rm (remove) : ํด๋”๋‚˜ ํŒŒ์ผ ์‚ญ์ œ.
    • rm ํŒŒ์ผ๋ช… ๋‹จ์ผ ํŒŒ์ผ์‚ญ์ œ.
    • rm -r ํด๋”๋ช… (recursive) : ํด๋”๋ฅผ ์ง€์šธ ๋•Œ ์‚ฌ์šฉ
    • rm -f (force) : ์งˆ๋ฌธ์„ ๋ฐ›์ง€ ์•Š๊ณ  ์ง€์šธ ๋•Œ ์‚ฌ์šฉ rm -rf ํด๋”๋ช…
  • mv (move) : [mv ํด๋”๋‚˜_ํŒŒ์ผ์ด๋ฆ„] [๋„์ฐฉ_ํด๋”๋ช…] ํด๋”๋‚˜ ํŒŒ์ผ์˜ ์œ„์น˜ ์˜ฎ๊ธฐ๊ธฐ. // ๋˜๋Š”, ํด๋”๋‚˜ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝ. mv ํ˜„์žฌ_ํด๋”๋‚˜_ํŒŒ์ผ์ด๋ฆ„ ๋ฐ”๋€”_์ด๋ฆ„

์ปดํ“จํ„ฐ๊ฐ€ ํŒŒ์ผ์„ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ๋ฒ•
a. ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ž ์‹œ ์ €์žฅ.
b. ์›๋ž˜ ์œ„์น˜์˜ ํŒŒ์ผ์„ ์‚ญ์ œ. (ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ถ€๋ถ„์€ ์ œ์™ธ๋จ)
c. ๋„์ฐฉ ํด๋”์— a.์—์„œ ์ €์žฅํ•œ ๋‚ด์šฉ์œผ๋กœ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑ.

  • cp (copy) : cp [์›๋ณธ ํŒŒ์ผ ์ด๋ฆ„] [๋ณต์‚ฌํ•  ํŒŒ์ผ ์ด๋ฆ„] ํŒŒ์ผ ๋ณต์‚ฌ.
  • CLI์—์„œ .์€ ํ˜„์žฌ ํ•˜์œ„ํด๋”๋ฅผ ๋‚˜ํƒ€๋ƒ„. ..์€ ํ˜„์žฌ ํด๋” (.)๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ์•ž์— .์ด ํ•˜๋‚˜ ๋” ๋ถ™์œผ๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ..์€ ํ˜„์žฌ ํด๋”๋ณด๋‹ค ์•ž์— ์žˆ๋Š” ํด๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ด.
    • cp -rf [์›๋ณธ ํด๋” ์ด๋ฆ„] [๋ณต์‚ฌํ•  ํด๋” ์ด๋ฆ„] : ํด๋” ๋ณต์‚ฌ.

๐Ÿ“Œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ๊ณผ ๊ฒฝ๋กœ

  • ์‚ฌ์šฉ์ž : ๋ฐ”ํƒ•ํ™”๋ฉด์— ์ง„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธํ•˜๋Š” ๊ณ„์ •.
  • ๊ด€๋ฆฌ์ž : ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์˜์—ญ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์€ ๊ถŒํ•œ์„ ๊ฐ€์ง.
  • MS(MicroSoft)์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ์šด์˜์ฒด์ œ์ธ ์œˆ๋„์šฐ์˜ ์ดˆ๊ธฐ ๋ฒ„์ „์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์—†์ด ํ•ญ์ƒ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜, ๋ณ€๊ฒฝ, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์—ˆ์Œ.
  • ์ด ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ง€์‹์ด ์—†๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋ณด๋ฅผ ํƒˆ์ทจ๋‹นํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•จ (hacking). ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์„ฑ์ฝ”๋“œ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ์‚ฝ์ž…ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒ.

๋ธ”๋ฃจ ์Šคํฌ๋ฆฐ

  • ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์Šคํ…œ(์šด์˜์ฒด์ œ)์˜ ์„ค์ • ๋ณ€๊ฒฝ์— ์ฐธ์—ฌํ•˜๋Š” ๊ณผ์ •์—์„œ, ๊ธฐ์กด์˜ ์„ค์ •์—์„œ๋งŒ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•จ.
  • ์ด๋ ‡๊ฒŒ ๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ(์šด์˜์ฒด์ œ)์„ ๋†“๊ณ  ๋‹คํˆฌ๋Š” ๊ณผ์ •์„ ํ”„๋กœ๊ทธ๋žจ ์ถฉ๋Œ(Conflict)์ด๋ผ๊ณ  ํ•จ.
  • ์ด๋กœ ์ธํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ํ™”๋ฉด์— ๋ธ”๋ฃจ ์Šคํฌ๋ฆฐ์„ ์ถœ๋ ฅํ•จ.

๐Ÿ”ธ ์ด๋ ‡๊ฒŒ ์•…์„ฑ์ฝ”๋“œ์™€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฐ์ œํ•˜๊ธฐ ์œ„ํ•ด, MS์‚ฌ๋Š” ์œˆ๋„์šฐ Vista์— ์‚ฌ์šฉ์ž ๊ณ„์ • ์ปจํŠธ๋กค์„ ํƒ‘์žฌํ•จ.
๐Ÿ”ธ ์‚ฌ์šฉ์ž ๊ณ„์ • ์ปจํŠธ๋กค(UAC, User Account Control) : ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€๋ฆฌ์ž์™€, ์ผ์ƒ์ ์œผ๋กœ PC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„. ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋ฅด๋Š” ์‚ฌ์ด์— ์‹œ์Šคํ…œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ง‰์•„ ์‚ฌ์šฉ์ž๋ฅผ ๋ณดํ˜ธ.
๊ด€๋ฆฌ์ž๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•˜๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ์ œํ•œ๋œ ๊ถŒํ•œ์„ ๊ฐ€์ง.

์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ์ƒ๋Œ€ ๊ฒฝ๋กœ

๐Ÿ”ธ ์ ˆ๋Œ€ ๊ฒฝ๋กœ : ๊ธฐ์ค€์ (๋ฃจํŠธ ํด๋”; /)์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ ˆ๋Œ€์ ์ธ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ„. ์ฆ‰, ํŠน์ • ํด๋”๋‚˜ ํŒŒ์ผ์ด ๋ฃจํŠธ ํด๋”๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ํด๋”๋กœ ์ง„์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋ƒ„.
๐Ÿ”ธ ์ƒ๋Œ€ ๊ฒฝ๋กœ : ํŠน์ • ํด๋” ๋˜๋Š” ํŒŒ์ผ ์œ„์น˜๋ฅผ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์ ์œผ๋กœ ๋‚˜ํƒ€๋ƒ„. ํ˜„์žฌ ์œ„์น˜ํ•œ ํด๋”๋Š” ์ (.)์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ์ƒ์œ„ ํด๋”๋Š” ๋‘ ๊ฐœ์˜ ์ (..)์œผ๋กœ ํ‘œํ˜„.

๊ด€๋ฆฌ์ž(root) ๊ถŒํ•œ

๐Ÿ’ก ์ฃผ์˜ ! ๊ด€๋ฆฌ์ž ์˜์—ญ์„ ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด, ์šด์˜์ฒด์ œ(Operating System)๊ฐ€ ๋จนํ†ต์ด ๋  ์ˆ˜ ์žˆ์Œ. ์šด์˜์ฒด์ œ๊ฐ€ ๋ง๊ฐ€์ง€๋ฉด, ์šด์˜์ฒด์ œ๋ฅผ ์žฌ์„ค์น˜ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Œ ๐Ÿ’ก

๐Ÿ”ธ ๋ฃจํŠธ ํด๋”(/)๋Š” Linux์˜ ๊ด€๋ฆฌ์ž ์˜์—ญ์œผ๋กœ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์œผ๋กœ๋Š” ์–ด๋–ค ํด๋”๋‚˜ ํŒŒ์ผ๋„ ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œํ•  ์ˆ˜ ์—†์Œ.

๋ฃจํŠธํด๋”๋กœ ์ด๋™ํ•˜์—ฌ ๋ช…๋ น์–ด mkdir์„ ์ด์šฉํ•ด ํด๋” test๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, "Read-only file system"์ด๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋œธ. ์ฝ๊ธฐ ์ „์šฉ(Read-only)์ด๋ผ๋Š” ๋ง์€, ํด๋”๋‚˜ ํŒŒ์ผ์„ ์ƒ์„ฑ, ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ.

๐Ÿ”ธ whoami : ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด.

๐Ÿ”ธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์€ [username] ํด๋” ๋‚ด์—์„œ๋งŒ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ. [username]์— ๋งž๊ฒŒ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๋‹น ํด๋” ๋‚ด์—์„œ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œ. ๋ฐ˜๋ฉด์— ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ์ด์šฉํ•˜๋ฉด, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ํด๋”์—๋„ ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ์Œ.

๐Ÿ”ธ ์‚ฌ์šฉ์ž ํด๋”์˜ ๊ฒฝ๋กœ(Path)๋Š” ~/๋กœ ํ‘œ์‹œ๋จ. ๋ฌผ๊ฒฐ ๊ธฐํ˜ธ(~)๋Š” ๋ฃจํŠธํด๋”(/)๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž ํด๋”(username)๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ์ถ•์•ฝํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

๐Ÿ”ธ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•  ๋•Œ์—๋Š”, ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”.
๐Ÿ”ธ sudo : ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ, ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ํš๋“ํ•˜๋Š” ๋ช…๋ น์–ด.

  • sudo๋ฅผ ํ†ตํ•ด ํด๋”๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์ƒ์„ฑํ•œ ํด๋”์˜ ์†Œ์œ ์ž๋Š” ๋ฃจํŠธ์ž„.
  • ๋ช…๋ น์–ด ls -l์„ ํ†ตํ•ด ํŠน์ • ํด๋”๋‚˜ ํŒŒ์ผ์ด ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ด€๋ฆฌ์ž์˜ ์†Œ์œ ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ“Œ ํ…์ŠคํŠธ ์—๋””ํ„ฐ nano

  • CLI์—์„œ ํ™˜๊ฒฝ์—์„œ ์œ ๋ช…ํ•œ ์—๋””ํ„ฐ๋Š” vim(vi), emacs ๋“ฑ์ด ์žˆ์Œ. ์ด๋“ค์€ ์—๋””ํ„ฐ ์‚ฌ์šฉ์„ ์œ„ํ•ด ํ•™์Šต์„ ๋”ฐ๋กœ ํ•ด์•ผํ•  ์ •๋„๋กœ ์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์Œ. (vim์˜ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•)
  • ์—๋””ํ„ฐ ์ค‘ ๊ฐ€์žฅ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์—๋””ํ„ฐ๋Š” nano ์—๋””ํ„ฐ์ž„.

nano

๐Ÿ”ธ nano : nano ์‹คํ–‰

ํŒŒ์ผ์„ nano ์—๋””ํ„ฐ๋ฅผ ์ด์šฉํ•ด ์—ฐ ํ™”๋ฉด.

  • A : ํŒŒ์ผ ์ด๋ฆ„
  • B : ํŒŒ์ผ ํŽธ์ง‘ ํ™”๋ฉด
  • C : ์‚ฌ์šฉ์— ํ•„์š”ํ•œ ๊ฐ์ข… ๋‹จ์ถ•ํ‚ค.
    • ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ^X์™€ ๊ฐ™์€ ๋‚ด์šฉ์€ ctrl+x ํ‚ค ์กฐํ•ฉ์„ ์˜๋ฏธํ•จ

ํŒŒ์ผ ์—ด๊ธฐ

๐Ÿ”ธ ^T : ํ™”์‚ดํ‘œ ํ‚ค๋ฅผ ์ด์šฉํ•ด ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„ ๋ถˆ๋Ÿฌ์˜ด.
๐Ÿ”ธ nano [ํŒŒ์ผ๋ช… or .] : ํŒŒ์ผ ํ˜น์€ ํ•ด๋‹น ํด๋”๋ฅผ nano์—์„œ ์—ผ.

ํŒŒ์ผ ํŽธ์ง‘ ํ›„ ์ข…๋ฃŒ

๐Ÿ”ธ ํŒŒ์ผ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์กด์žฌํ•˜๋ฉด, ์ข…๋ฃŒ ์‹œ ์ €์žฅํ• ์ง€ ๋ฌผ์–ด๋ด„.
๐Ÿ”ธ ^X : Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? ๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋œจ๋ฉฐ Y์™€ N ํ‚ค๋ฅผ ํ†ตํ•ด ์ €์žฅ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ.

ํŒŒ์ผ ์ €์žฅ

๐Ÿ”ธ ^O : nano๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ ์ €์žฅ.


CH2. ํŒจํ‚ค์ง€์™€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

๐Ÿ“Œ 1. apt ๋ช…๋ น์–ด ์ด์šฉํ•˜๊ธฐ

๐Ÿ”ธ ์šฐ๋ถ„ํˆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ apt๋ผ๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Œ.
๐Ÿ”ธ apt : ํ™”๋ฉด์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ.

๐Ÿ”ธ apt update (๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”) : ํŒจํ‚ค์ง€ ๋ชฉ๋ก ๊ฐฑ์‹ .

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

๐Ÿ”ธ apt list -โ€”upgradable : ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์ถœ๋ ฅ.
๐Ÿ”ธ apt upgrade (๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”) : ์ „์ฒด ํŒจํ‚ค์ง€ ์—…๊ทธ๋ ˆ์ด๋“œ(๋ฒ„์ „ ์—…)
๐Ÿ”ธ apt --only-upgrade install ํŒจํ‚ค์ง€ ์ด๋ฆ„ (๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”) : ํŠน์ • ํŒจํ‚ค์ง€๋งŒ ์—…๊ทธ๋ ˆ์ด๋“œ(๋ฒ„์ „ ์—…)
๐Ÿ”ธ apt install ํŒจํ‚ค์ง€ ์ด๋ฆ„ (๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”) : ํŒจํ‚ค์ง€ ์„ค์น˜
๐Ÿ”ธ apt list --installed : ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋ณด๊ธฐ
๐Ÿ”ธ apt search ๊ฒ€์ƒ‰์–ด : ํŒจํ‚ค์ง€ ๊ฒ€์ƒ‰
๐Ÿ”ธ apt show ํŒจํ‚ค์ง€ ์ด๋ฆ„ : ํŒจํ‚ค์ง€ ์ •๋ณด ํ™•์ธ
๐Ÿ”ธ apt remove ํŒจํ‚ค์ง€ ์ด๋ฆ„(๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”) : ํŒจํ‚ค์ง€ ์‚ญ์ œ

๐Ÿ“Œ 2. ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿ”ธ ํŒจํ‚ค์ง€ ์„ค์น˜/์‚ญ์ œ ๋“ฑ์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ํš๋“ํ•ด์•ผ ํ•จ. ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ๋ฐ, ์„ค์น˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋„์›€.

๐Ÿ”ธ ๋”ฐ๋ผ์„œ ๋ช…๋ น์–ด ์•ž์— sudo๋ฅผ ๋ถ™์—ฌ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•จ.

// wget์ด๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๊ฒฝ์šฐ,
sudo apt install wget

๐Ÿ”ธ ์ดํ›„, ๊ด€๋ฆฌ์ž ์•”ํ˜ธ ์ž…๋ ฅ ํ›„ ์„ค์น˜๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Œ.
๐Ÿ”ธ ctrl + C : ์ž‘์—…์„ ์ทจ์†Œํ•˜๊ณ , ํ„ฐ๋ฏธ๋„ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋‹ค์‹œ ๋˜์ฐพ์•„์˜ด. (๊ฐ•์ œ ์ข…๋ฃŒ)
๐Ÿ”ธ ctrl + shift + c : ๋ณต์‚ฌ
๐Ÿ”ธ ctrl + shift + v : ๋ถ™์—ฌ๋„ฃ๊ธฐ

Action Items

๐Ÿ”ธ wget : URL์„ ํ†ตํ•ด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ.


CH3. Node.js

๐Ÿ“Œ nvm & node.js

๐Ÿ”ธ Node.js : JavaScript ๋Ÿฐํƒ€์ž„(runtime) ์ค‘ ํ•˜๋‚˜.
๐Ÿ”ธ nvm(Node Version Manager) : Node.js์˜ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ. (โš ๏ธ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ๋Š” nvm์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ)

1. nvm ์„ค์น˜

๐Ÿ”ธ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ์— ์„ค์น˜

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

๐Ÿ”ธ ๋งŒ์•ฝ Command 'wget' not found ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์„ค์น˜๊ฐ€ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, Package Manager๋ฅผ ์ด์šฉํ•ด wget์„ ์„ค์น˜ํ•ด์•ผ ํ•จ.

# Ubuntu
sudo apt update
sudo apt install wget

2. ์„ค์น˜ ํ™•์ธ


๐Ÿ”ธ ์„ค์น˜ ์™„๋ฃŒ ํ›„, ํ„ฐ๋ฏธ๋„์„ ๋‹ค์‹œ ์‹œ์ž‘.
๐Ÿ”ธ nvm --version : nvm ๋ฒ„์ „ ํ™•์ธ.

3. Node.js ์„ค์น˜

๐Ÿ”ธ nvm install --lts : LTS(Long-Term Support) ๋ฒ„์ „ Node.js ์„ค์น˜. (Node.js์—์„œ LTS๋Š” ์ง€์›ํ•˜๋Š” ๊ธฐ๊ฐ„์ด ๊ธธ๋‹ค๋Š” ์˜๋ฏธ)
๐Ÿ”ธ node -v : Node.js ๋ฒ„์ „ ํ™•์ธ

Node.js๋กœ JavaScriptํŒŒ์ผ ์‹คํ–‰ํ•˜๊ธฐ

# helloWorld.js๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ํ…์ŠคํŠธ ์—๋””ํ„ฐ nano๋กœ ์—ผ
nano helloWorld.js

// ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ํŒŒ์ผ์— ์ž…๋ ฅ.
function helloWorld () {
  console.log("Hello world!");
}

helloWorld();
  • ์œ„ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ ํ›„ ^X๋ฅผ ๋ˆŒ๋Ÿฌ ํŽธ์ง‘์„ ์ข…๋ฃŒ
  • ํ„ฐ๋ฏธ๋„ ํ•˜๋‹จ์— "Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?"๋ผ๋Š” ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚˜๋ฉด, y๋ฅผ ๋ˆ„๋ฅด๊ณ  ์—”ํ„ฐํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅ.
# helloWorld.js ํŒŒ์ผ์„ node ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰.
node helloWorld.js

๐Ÿ”ธ node [ํŒŒ์ผ๋ช…] : ํŒŒ์ผ์„ node ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰.

๐Ÿ“Œ nvm ์‚ฌ์šฉ๋ฒ•

  • Node.js๋Š” ๋‹ค์–‘ํ•œ ๋ฒ„์ „์ด ์กด์žฌํ•จ.
  • ์˜ˆ๋ฅผ ๋“ค์–ด node 12.18.3 ๋ฒ„์ „์—์„œ ์ง  ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๋Š”๋ฐ, Node.js 14.15.5 ๋ฒ„์ „์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ.
  • ๊ณผ๊ฑฐ์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Node.js 12.18.3 ๋ฒ„์ „์ด ํ•„์š”ํ•จ.
  • ์ด์ „(๊ณผ๊ฑฐ) ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘, ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์€ ์„ค์น˜๋œ Node.js๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ.
  • ํ•˜์ง€๋งŒ ๋ฒ„์ „์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋งˆ๋‹ค ์‚ญ์ œ ํ›„ ํ•ด๋‹น ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์‹ค์ œ ์ž‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ์— ์ง‘์ค‘ํ•˜์ง€ ๋ชปํ•ด ์ƒ์‚ฐ์„ฑ์ด ๋–จ์–ด์ง.
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ NVM์ด ํ•ด๊ฒฐํ•ด ์คŒ.

๐Ÿ”ธ nvm ls : nvm์„ ํ†ตํ•ด ์„ค์น˜ํ•œ Node.js version๋“ค์ด ๋‚˜์˜ด.
๐Ÿ”ธ nvm install 12.18.3 : ํŠน์ • ๋ฒ„์ „์˜ Node.js ์„ค์น˜. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ ์„ค์น˜๋œ ๋ฒ„์ „์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ , ์›ํ•˜๋Š” ๋ฒ„์ „์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Œ.
๐Ÿ”ธ nvm use ๋ฒ„์ „ ๋„˜๋ฒ„ : ์‚ฌ์šฉ ์ค‘์ธ Node.js version์„ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ.

๐Ÿ“Œ npm & package.json

package.json ์ƒ์„ฑํ•˜๊ธฐ

๐Ÿ”ธ npm init : ์ƒˆ๋กœ์šด package.json ํŒŒ์ผ์„ ์ƒ์„ฑ.

๐Ÿ”ธ package.json ํŒŒ์ผ์— ๋“ค์–ด๊ฐˆ ์ •๋ณด๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅ. ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ํ›„ enterํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Œ.
๐Ÿ”ธ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋จ. ์†Œ๊ด„ํ˜ธ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’.
๐Ÿ”ธ npm init -y : ์œ„ ๊ณผ์ •์„ ๋ชจ๋‘ ์ƒ๋žตํ•˜๋ฉด์„œ package.json์„ ์ƒ์„ฑ.

npm๊ณผ package.json

๐Ÿ”ธ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ์ด ํ•ฉ์ณ์ ธ์„œ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ, ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค ๋งŒ๋“ค์–ด์„œ ์“ฐ์ง€๋Š” ์•Š์Œ.
๐Ÿ”ธ node.js์—์„œ ๋‚จ์ด ๋งŒ๋“ค์–ด๋†“์€ ๋ชจ๋“ˆ์„ npm ๋ชจ๋“ˆ์ด๋ผ๊ณ  ๋ถ€๋ฆ„.
๐Ÿ”ธ node.js ํ™˜๊ฒฝ์—์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ, ๊ทธ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ ๋ฐ”๋กœ npm.
๐Ÿ”ธ npm(Node Package Manager) ์€ ์ผ์ข…์˜ ์•ฑ์Šคํ† ์–ด๋กœ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š”, ๋ชจ๋“ˆ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๋ชจ๋“ˆ ์Šคํ† ์–ด. (Linux์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” apt, macOS์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” brew)

๐Ÿ”ธ ๊ทธ๋ฆฌ๊ณ  ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„๋‘” ๊ณณ์ด package.json์ž„. ์ฆ‰, ํ”„๋กœ์ ํŠธ(ํŒจํ‚ค์ง€) ์ „๋ฐ˜์— ๊ด€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์Œ.

  • ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์ด ๋ฌด์—‡์ธ์ง€
  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•
  • ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•

file: package.json

{
  "name": "modern-javascript-koans",        // ํ”„๋กœ์ ํŠธ์— ๊ด€ํ•œ ์ •๋ณด
  "version": "1.0.0",                      // ํ”„๋กœ์ ํŠธ์— ๊ด€ํ•œ ์ •๋ณด
  "description": "",                      // ํ”„๋กœ์ ํŠธ์— ๊ด€ํ•œ ์ •๋ณด
  "main": "index.js",
  "scripts": {                           // CLI์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ช…๋ น
    "test": "mocha modern-js-koans/*.js --sort",
    "report": "mocha modern-js-koans/*.js --sort --reporter @mochajs/json-file-reporter",
    "submit": "codestates-submission"
  },
  "keywords": [],
  "author": "codesatates",
  "dependencies": {                       // ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ dependency๋“ค
    "@codestates-cc/submission-npm": "^1.1.1"
  },
  "devDependencies": {
    "@mochajs/json-file-reporter": "^1.2.1",
    "chai": "^4.2.0",
    "mocha": "^8.2.0",
    "sinon": "^9.0.3"
  }
}

๐Ÿ”ธ ์‹ค์ œ ๋ชจ๋“ˆ์€ ๋”ฐ๋กœ node_modules์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ์Œ.

package.json ์— ์ ํ˜€์žˆ๋Š” ๋‚ด์šฉ

dependency (์˜์กด์„ฑ ๋ชจ๋“ˆ)

๐Ÿ”ธ ๊ฐœ๋ฐœ์ด๋‚˜ ์‹คํ–‰์— ํ•ด๋‹น ๋ชจ๋“ˆ์„ "์˜์กด"ํ•œ๋‹ค๊ณ  ํ•ด์„œ, "์˜์กด์„ฑ(dependency)"์ด๋ผ๊ณ  ๋ถ€๋ฆ„.
๐Ÿ”ธ devDependencies : ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์ด ๋ช…์‹œ๋จ. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ ๊ด€๊ณ„์—†๋Š” ์˜ค๋กœ์ง€ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค. JSON ํ˜•์‹์—์„œ, ํ‚ค์— ์ ํžŒ ๊ฒƒ์ด ๋ชจ๋“ˆ ์ด๋ฆ„, ๊ฐ’์ด ๋ฒ„์ „.
๐Ÿ”ธ dependencies : devDependencies์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์ด ๋ฌด์—‡์ธ์ง€ ๋ช…์‹œ๋จ.

๐Ÿ”ธ npm install : package.json์—์„œ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋‹ค์šด๋กœ๋“œํ•จ. ์ดํ›„ node_modules ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ๊ธด ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

  • --save-dev ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์„ค์น˜ํ•˜๋ฉด, ์ž๋™์œผ๋กœ devDependencies์— ์ถ”๊ฐ€๋จ.
  • --save ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์„ค์น˜ํ•˜๋ฉด, ์ž๋™์œผ๋กœ dependencies์— ์ถ”๊ฐ€๋จ (์ƒ๋žต๊ฐ€๋Šฅ).
// ์˜ˆ๋ฅผ ๋“ค์–ด, mocha๋ผ๋Š” ๋ชจ๋“ˆ์„ devDependencies์— ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์œผ๋ฉด,

npm insatll mocha --save-dev
  • npm install์€ package.json์— ์žˆ๋Š” dependency (์˜์กด์„ฑ ๋ชจ๋“ˆ)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ค์น˜.
  • ๋งŒ์ผ dependency ์ •๋ณด๋ฅผ ์ ์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด, ์ฝ”๋“œ์—์„œ๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์“ฐ๊ณ  ์žˆ์ง€๋งŒ, ๋ฌด์—‡์„ ์„ค์น˜ํ•ด์•ผ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™๋˜๋Š”์ง€, ๋ฌด์—‡์„ ์„ค์น˜ํ•ด์•ผ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ ์ˆ˜ ์—†์Œ.

scripts ํ•ญ๋ชฉ

๐Ÿ”ธ CLI์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ช…๋ น (npm script)
๐Ÿ”ธ ์‹คํ–‰ ๋ฐฉ๋ฒ• : npm run <์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„>


CH4. Git

๐Ÿ”ธ ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐœ๋ฐœ๋œ โ€˜๋ถ„์‚ฐํ˜• ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œโ€™. ์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ก์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.
๐Ÿ”ธ Github : Git Repository๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค.
๐Ÿ”ธ ์˜คํ”ˆ ์†Œ์Šค (์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋œ ์†Œํ”„ํŠธ์›จ์–ด) : ๋ˆ„๊ตฌ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐœ์„  ๊ฐ€๋Šฅ. ์ด ์ž‘์—…์„ ๊ธฐ์—ฌํ•˜๋‹ค(contribute)๋ผ๊ณ  ํ•จ.

Git repository

๐Ÿ”ธ Remote Repository : ์›๊ฒฉ ์˜จ๋ผ์ธ ์„œ๋ฒ„ ์ƒ์˜ ์ €์žฅ์†Œ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ํ•จ๊ป˜ ๊ณต์œ  ๊ฐ€๋Šฅ.
๐Ÿ”ธ Local Repository : ๋‚ด ์ปดํ“จํ„ฐ์˜ ์ €์žฅ์†Œ, ๋‚ด ๊ฐœ์ธ ์ „์šฉ ์ €์žฅ์†Œ.

  • ํ”„๋กœ์ ํŠธ์— contribute์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ,
  1. React ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ์ž‘์—… ํ•„์š” (Fork)
  2. ๋‚˜์˜ Remote Repository์— React ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ฒจ์˜จ ์ƒํƒœ. ์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด ์ปดํ“จํ„ฐ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์ด ๋˜ ํ•„์š” (Clone).
  3. ๋‚ด ์ปดํ“จํ„ฐ์—์„œ React ์†Œ์Šค์ฝ”๋“œ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์™„๋ฃŒ.
  4. ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ commit์„ ํ†ตํ•ด ์ €์žฅํ•ด ์ค€ ๋’ค, Remote Repository์— ๋ฐ˜๋Œ€๋กœ ์˜ฌ๋ ค์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š” (Push)
    +@. Remote Repository์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ Local Repository ๋กœ ๊ฐ€์ ธ์˜ค๋Š” Pull ์ž‘์—…๋„ ๊ฐ€๋Šฅ.

๐Ÿ“Œ Git ์„ค์น˜ (Ubuntu, WSL)

๐Ÿ”ธ sudo apt install git : ํŒจํ‚ค์ง€ git ์„ค์น˜
๐Ÿ”ธ git --version์„ ํ†ตํ•ด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋๋Š”์ง€ ํ™•์ธ.
๐Ÿ”ธ WSL์€ Git์ด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Œ.

๐Ÿ“Œ ํ™˜๊ฒฝ์„ค์ • (Ubuntu, WSL)

๐Ÿ”ธ Git์„ ์„ค์น˜ํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ €, ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•จ.
๐Ÿ”ธ ์„ค์ •์— ๊ธฐ๋ก๋œ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์•ž์œผ๋กœ ์ง„ํ–‰ํ•  Git ์ปค๋ฐ‹ ๋‚ด์—ญ์— ๊ธฐ๋กํ•จ.
๐Ÿ”ธ git config --global user.name "๋‚˜์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„"
๐Ÿ”ธ git config --global user.email "๋‚ด ์ด๋ฉ”์ผ ์ฃผ์†Œ"

  • --global ์˜ต์…˜์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ์‚ฌ์šฉ์ž ํ™ˆ์— ์ €์žฅ๋˜๋ฏ€๋กœ git์„ ์„ค์ •ํ•  ๋•Œ ์ฒ˜์Œ์— ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ž…๋ ฅํ•ด๋„ ๋จ. ๋‚˜์ค‘์— github์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด๋‚˜ ์ด๋ฉ”์ผ์„ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์ด ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•ด์•ผํ•จ.
  • ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์–ด์„œ, ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด --global ์˜ต์…˜์„ ๋นผ๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.


Git์—์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•  ๋•Œ, ํŠนํžˆ merge commit ํ™•์ธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ํ…์ŠคํŠธ ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ฆผ. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํ…์ŠคํŠธ ์—๋””ํ„ฐ vi๊ฐ€ ์—ด๋ฆฌ๋Š”๋ฐ vi์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฉด nano๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.
git config --global core.editor nano

๐Ÿ”ธ Git ์ตœ์ดˆ ์„ค์ •

๐Ÿ“Œ SSH ํ‚ค

๐Ÿ”ธ ssh๋Š” secure shell์˜ ์ค„์ž„๋ง๋กœ, ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ shell ์ ‘์†์„ ๋œปํ•จ.
๐Ÿ”ธ CLI ํ™˜๊ฒฝ(ํ„ฐ๋ฏธ๋„)์—์„œ ๋‹ค๋ฅธ PC์— ์ ‘์†ํ•˜๊ฑฐ๋‚˜ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋น„๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•จ.

๐Ÿ”ธ github์— ssh ๊ณต๊ฐœํ‚ค(๋น„๋Œ€์นญํ‚ค ์ค‘ ํ•˜๋‚˜)๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•
๐Ÿ”ธ ssh๋ฅผ ์ด์šฉํ•ด git cloneํ•˜๋Š” ๋ฐฉ๋ฒ•
๐Ÿ”ธ sshํ‚ค๋Š” ๋น„๋Œ€์นญํ‚ค๋กœ ๊ตฌ์„ฑ๋จ.

๐Ÿ”ธ ssh-keygen : ~/.ssh./ ๊ฒฝ๋กœ์— id_rsa(Private Key; ๊ฐœ์ธํ‚ค)์™€ id_rsa.pub(Public Key; ๊ณต๊ฐœํ‚ค)๋ฅผ ์ƒ์„ฑ.

๐Ÿ”ธ cat ~/.ssh/id_rsa.pub : ๊ณต๊ฐœํ‚ค ๋ณต์‚ฌ
๐Ÿ”ธ Github์—์„œ ํ”„๋กœํ•„ ํด๋ฆญ --> Settings --> SSH and GPG keys --> New SSH hey --> ์‚ฌ์šฉ์ž ์ž„์˜๋กœ title์„ ์ž‘์„ฑํ•˜๊ณ , ๋ณต์‚ฌํ•ด๋‘” ๊ณต๊ฐœํ‚ค๋ฅผ key์— ์ž…๋ ฅ --> add SSH key

profile
์ฝ”๋ฆฐ์ด๐Ÿ‘ฝ

0๊ฐœ์˜ ๋Œ“๊ธ€