CLI, brew, node, nvm, npm, nano, git ์ ๋๊ฐ ๋๊ฒ ๋ค.
ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ฐ๋
์ ๋ฆฌ๋ฅผ ํ๊ฒ ๋ค.
GUI : Graphic User Interface
CLI : Command-Line Interface (Terminal)
CLI๋ ๋๋์ ์ปดํจํฐ๊ฐ ์๋ ํ๊ฒฝ์์ ์ ๋ฆฌํ๋ค.
GUI๋ I/O ์์ค(ํค๋ณด๋, ๋ง์ฐ์ค, ๋ชจ๋ํฐ)๊ฐ ํ์ํ๋ฐ, ์ด๋ฅผ ์๋ง์ ์ปดํจํฐ์ ์ผ์ผ์ด ๋ถ์ฐฉํ๊ธฐ ํ๋ค๋ค.
CLI๋ฅผ ์ด์ฉํด ์๋ฒ ์ปดํจํฐ๋ก ์ ์์ ์์ฒญํ๋ฉด, ์๋ฒ ์ปดํจํฐ๋ ์์ฒญํ ์ปดํจํฐ์ ์ถ๋ ฅ์์ค(๋ชจ๋ํฐ)๋ฅผ ์ด์ฉ
-> ์๋ฒ ์ปดํจํฐ๋ก ์ง์ ์ฐพ์๊ฐ ํ์์์ด, ์์ ์ ๋ชจ๋ํฐ๋ก ์๋ฒ ์ปดํจํฐ์ ์ํต
๋ํ์ ์ผ๋ก ์๋ง์กด ์น ์๋น์ค(AWS, Amazon Web Service) ์ ํด๋ผ์ฐ๋ ์ปดํจํ
์ฒ๋ผ,
๋๋์ ์๋ฒ ์ปดํจํฐ๋ฅผ ์ค์นํด์ผ ํ๋ ์๋น์ค๊ฐ ์์์ด๋ค.
AWS๋ 4์ฒ ํ์ด ๋๋ ๊ท๋ชจ์ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ 29๊ฐ ์ด์ ๊ฐ์ง๊ณ ์๊ณ , ๊ณ์ํด์ ํ์ฅํ๊ณ ์์ต๋๋ค.
ํ๋์ ๋ฐ์ดํฐ ์ผํฐ์๋ ์ต์ 5๋ง ๊ฐ ์ด์์ ์๋ฒ ์ปดํจํฐ๊ฐ ์ค์น๋ฉ๋๋ค.
๋๋ถ๋ถ์ ์๋ฒ ์ปดํจํฐ๋ ๋ฌด๋ฃ๋ก ์ด์ฉํ ์ ์๋ Linux ์ด์์ฒด์ ๋ฅผ ์ฌ์ฉํ๋ค.
prompt
: ํฐ๋ฏธ๋์์ ํธ์งํ๋ ํ ์ค์ ๊ณต๊ฐ
pwd
: print working directory - ํ์ฌ ์์น ํ์ธํ๊ธฐ
mkdir
: make directory - ์๋ก์ด ํด๋ ์์ฑํ๊ธฐ
ls
: list - ํน์ ํด๋์ ํฌํจ๋ ํ์ผ์ด๋ ํด๋ ํ์ธํ๊ธฐ
-l
: ํฌ๋งท๊น์ง ์ถ๋ ฅa
: ์จ๊ฒจ์ ธ ์๋ ํ์ผ/ํด๋๊น์ง ์ถ๋ ฅopen(macOS)
: open current folder with finder
cd
: change directory - ํด๋์ ์ง์
ํ๊ธฐ
touch
: create new file - ํ์ผ ์์ฑํ๊ธฐ
cat
: display contents of a file - ํ์ผ์ ๋ด์ฉ์ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๊ธฐ
rm, rf
: remove, recursive - ํด๋๋ ํ์ผ ์ญ์ ํ๊ธฐ
mv
: move - ํด๋๋ ํ์ผ์ ์ด๋ฆ์ ๋ณ๊ฒฝ, ๋๋ ํด๋๋ ํ์ผ์ ์์น ์ฎ๊ธฐ๊ธฐ
cp
: copy - ํด๋๋ ํ์ผ์ ๋ณต์ฌํ๊ธฐ
sudo
: ๊ด๋ฆฌ์ ๊ถํ ํ๋
whoami
: ํ์ฌ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์ ํ์ธ
clear
: clear CLI window
exit
: exit CLI window
code
: open in VScode
nano
: edit on nano editor - ๊ฐ์ฅ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์๋ํฐ
์ ๋๊ฒฝ๋ก
: /Users/[username]/helloWorld/hello/ - ๋ฃจํธํด๋๋ถํฐ ํ์ฌ ์์น๊น์ง์ ๊ฒฝ๋ก
์๋๊ฒฝ๋ก
: ํ์ฌ ์์น๋ฅผ ๊ณณ์ ๊ธฐ์ค์ผ๋ก ํ ๊ทธ๊ณณ์ ๊ฒฝ๋ก
/
: ๋ฃจํธํด๋ (์ ๋๊ฒฝ๋ก์ ์์)
.
: ํ์ฌ ์์นํ ํด๋ (์๋๊ฒฝ๋ก์ ์์)
..
: ์์ ํด๋
./
: ํ์ฌ ํด๋ ์๋์ (ํด๋)
../
: ํ์ฌ ํด๋ ์์ (ํด๋)
~/
: ๋ฃจํธํด๋๋ก๋ถํฐ ์ฌ์ฉ์ ํด๋(username)๊น์ง์ ๊ฒฝ๋ก
๋ฆฌ๋ ์ค ์ด์์ฒด์ ์ "Package"๋:
์ ๋ด๊ณ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ชจ๋ ํจํค์ง์ ์ ์ฅ์ ์์น๋ฅผ ์ ์ฅํ๊ณ ์๋ค. (๊ฐ ํจํค์ง์ ์ ์ฅ์๋ฅผ ์ผ์ผ์ด ์ฐพ์๊ฐ ํ์๊ฐ ์๋ค)
์ค์น๋ ๋ชจ๋ ํจํค์ง ๊ด๋ฆฌ(์ค์น, ์ญ์ , ๋ณ๊ฒฝ, ์ ๋ฐ์ดํธ ๋ฑ)
brew update
- brew ์์ฒด ์
๋ฐ์ดํธ
berw outdated
- ์
๋ฐ์ดํธ ํ์ํ ํ์ผ ์กฐํ
brew upgrade ํ๋ก๊ทธ๋จ์ด๋ฆ
- ํ๋ก๊ทธ๋จ ์
๊ทธ๋ ์ด๋(์
๋ฐ์ดํธ)
brew search ๊ฒ์์ด
- ํ๋ก๊ทธ๋จ ๊ฒ์
brew info ํ๋ก๊ทธ๋จ์ด๋ฆ
- ํ๋ก๊ทธ๋จ ์ ๋ณด ํ์ธ
brew install ํ๋ก๊ทธ๋จ์ด๋ฆ
- ํ๋ก๊ทธ๋จ ์ค์น
brew uninstall ํ๋ก๊ทธ๋จ์ด๋ฆ
- ํ๋ก๊ทธ๋จ ์ญ์
brew list
- ์ค์น๋ ํ๋ก๊ทธ๋จ ๋ณด๊ธฐ
// ํฐ๋ฏธ๋์์
1. xcode-select --install // ์ค์น ์ Xcode Command Line Tools ๋จผ์ ์ค์น
2. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" // brew ์ค์น
2-1. PATH ์ง์ (Next Steps๋ก ํ๊ธฐ๋จ)
>> echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/"์ฌ์ฉ์ ์ด๋ฆ"/.zprofile
>> eval "$(/opt/homebrew/bin/brew shellenv)"
3. brew install wget // wget ์ค์น
4. wget -O goodjob.txt https://bit.ly/37sJqCo //goodjob.txt ๋ผ๋ ๋ค์ด๋ก๋๋ ํ์ผ ํ์ธ
5. brew install neofetch
neofetch // neofetch ์คํํด๋ณด๊ธฐ
Runtime: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ตฌ๋๋๋ ํ๊ฒฝ
JavaScript Runtime - ๋ธ๋ผ์ฐ์ , node.js ๋ฑ
Node.js๋ผ๋ ์๋ก์ด JavaScript ๋ฐํ์์ด ๋ฑ์ฅํ๊ฒ ๋๋ฉด์,
์น ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํฐ๋ฏธ๋์์๋ ์คํ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
JavaScript๋ฅผ ํตํด ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋์ด ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๋ฑ ํ์ฉํญ์ด ํฌ๊ฒ ํ์ฅ๋์์ต๋๋ค.
node helloWorld.js // jsํ์ผ์ nodeํ๊ฒฝ์์ ์คํํ๋ค.
nvm(Node Version Manager)์ node.js์ ๋ค์ํ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
nvm์ ์ฌ์ฉํ๋ ์ด์ :
๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ค์ํ ๋ฒ์ ์ ๋์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ
์คํธ๋ฅผ ์ํด ๊ธฐ์กด ๋ฒ์ ์ ์ญ์ ํ๊ณ ๋ค๋ฅธ ๋ฒ์ ์ ์ค์นํ๋ ๊ณผ์ ํ์ ์์ด, nvm์ ์ฌ์ฉํด ๊ฐ๋จํ ๋ช
๋ น์ด๋ก node version ์ ์์ฝ๊ฒ ์ฎ๊ฒจ๋ค๋ ์ ์๋ค.
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash // nvm ์ค์น
nvm --version // nvm ๋ฒ์ ํ์ธ์ผ๋ก nvm ์ค์น ์ฌ๋ถ ํ์ธ
nvm install --lts //Node.js ์ค์น
node -v //Node ๋ฒ์ ํ์ธ์ผ๋ก nvm ์ค์น ์ฌ๋ถ ํ์ธ
nvm ls // nvm์ ํตํด ์ค์นํ Node.js version ํ์ธ
nvm install 12.18.3 // ์ํ๋ ๋ฒ์ ์ ์ค์น
nvm use ๋ฒ์ ๋๋ฒ // ์ํ๋ ๋ฒ์ ์ผ๋ก ์ ํ
npm์ด๋?
npm ์ node.js ์ ์ฑ์คํ ์ด์ด๋ค.
npm (node package manager) ๋ฅผ ์ด์ฉํ์ฌ ๋จ์ด ๋ง๋ค์ด๋์ ๋ชจ๋(node ์์๋ "npm ๋ชจ๋") ์ ์ด์ฉํ๋ค.
๋ชจ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ํ์ผ
package.json ์ ์ด์ฉํด ๋ชจ๋ ๋ชจ๋์ ์ง์ ์ ๋ฌํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ๋ชจ๋์ ์ ์ด์ฃผ๊ณ npm์ ํตํด ๋ค์ด๋ก๋ ๋ฐ๊ฒ ํจ์ผ๋ก์จ ๋ชจ๋์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ค.
scripts
- CLI ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ช
๋ น์ด
dependencies
- ํ๋ก๊ทธ๋จ ๊ตฌ๋์ ํ์ํ ๋ชจ๋
devDependencies
- ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ํ์ํ ๋ชจ๋
npm init //package.js ์์ฑํ๊ธฐ
ls
cat package.json // ๋ด์ฉ ํ์ธ ๊ฐ๋ฅ
Git์ ์ฌ์ฉ ์ด์ - ๋ฒ์ ๊ด๋ฆฌ
1. ํ์ผ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ ์ฅํ ์ ์๋ค.
2. ์ด์ ๋ฒ์ ์ผ๋ก ๋์๊ฐ ์ ์๋ค.
3. ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋์ง ์์๋ณด๊ธฐ ์ฝ๋ค.
4. ํ์
ํ๊ธฐ์ ์ข๋ค.
5. ๋ฐฑ์
์ฉ
Git์ผ๋ก ๊ด๋ฆฌ๋๋ ํด๋๋ฅผ Git repository ๋ผ๊ณ ํ๋ค.
Git repository: Remote Repository & Local Repository
๊ฐ์ธ ์์
: Local Repository
์์
ํ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ์
๋ก๋: Remote Repository
๋ค๋ฅธ ์ฌ๋์ด Remote Repository์ ์ฌ๋ ค๋์ ์์ค ์ฝ๋๋ฅผ ๋ด Local Repository๋ก ๊ฐ์ง๊ณ ์ฌ ์๋ ์๋ค.
์คํ ์์ค์ธ React ํ๋ก์ ํธ์ contribute์ ํ๊ธฐ ์ํด์๋
๋จผ์ React ์๊ฒฉ ์ ์ฅ์๋ฅผ๋ด ์๊ฒฉ ์ ์ฅ์๋ก ๊ฐ์ง๊ณ ์ค๋ ์์
์ด ํ์ํ๋ค.
๊ทธ ๊ณผ์ ์ Fork ๋ผ๊ณ ํ๋ค.
Fork ๋ฅผ ํ๊ณ ๋๋ฉด ๋์ Remote Repository์ React ์ฝ๋๋ฅผ ์ฎ๊ฒจ์จ ์ํ์ด๋ค.
์ด ์ฝ๋๋ฅผ ์์ ํ๊ธฐ ์ํด์๋ ๋ด ์ปดํจํฐ๋ก ๊ฐ์ ธ์ค๋ ์์
์ด ๋ ํ์ํ๋ค.
๊ทธ ๊ณผ์ ์ Clone ์ด๋ผ๊ณ ํ๋ค.
Remote Repository์ ์๋ ์ฝ๋๋ฅผ Clone ํด์ ๋ด ์ปดํจํฐ๋ก ๊ฐ์ง๊ณ ์ฌ ์ ์๋ค.
๋ด ์ปดํจํฐ์์ React ์์ค์ฝ๋ ๋ณ๊ฒฝ ์์
์ ํ๋ค๋ฉด,
๋ณ๊ฒฝ๋ ๋ด์ฉ์ commit์ ํตํด ์ ์ฅํด ์ค ๋ค, Remote Repository์ ๋ฐ๋๋ก ์ฌ๋ ค์ฃผ๋ ์์
์ด ํ์ํ๋ค.
์ด ๊ณผ์ ์ Push ๋ผ๊ณ ํ๋ค.
Local Repository์ ๊ธฐ๋กํด ๋์ commit์ Remote Repository๋ก ์ ๋ก๋ํ ์ ์๋ค.
์ด๋ ๊ฒ Push๋ฅผ ์๋ฃํ๊ณ ๋๋ฉด GitHub์๋ Pull request๋ผ๋ ๊ธฐ๋ฅ์ด ์์ด์,
๋ด๊ฐ ์ ์ํ ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ๋ฐ์ ์ฌ๋ถ๋ฅผ ์์ฒญํ ์ ์๋ค.
git // ํฐ๋ฏธ๋์์ git ์ค์น
git config --global user.name "๋์ ์ฌ์ฉ์ ์ด๋ฆ"
git config --global user.email "๋ด ์ด๋ฉ์ผ ์ฃผ์" // ์ค์ ๊ฐ
CLI ํ๊ฒฝ(ํฐ๋ฏธ๋)์์ ๋ค๋ฅธ PC์ ์ ์ํ๊ฑฐ๋ ์์ฒญํ ๋ ์ฌ์ฉํ๋ฉฐ, ๋น๋์นญํค๋ฅผ ์ด์ฉํด ์ฌ์ฉ์๋ฅผ ์ธ์ฆํฉ๋๋ค.
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ Git์ ๋จ๋
์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด SSH๊ฐ ์์ด๋ ๋ฌด๋ฐฉํ์ง๋ง,
์์ ํ๊ฒ ์ธ๋ถ Git ์๋ฒ์์ ์ฝ๋๋ฅผ Cloneํ๊ฑฐ๋ Pushํ๋ ค๋ฉด SSH ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ github์ ssh ๊ณต๊ฐํค(๋น๋์นญํค ์ค ํ๋)๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ๊ณผ ssh๋ฅผ ์ด์ฉํด git cloneํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ค๋ณด๊ฒ ๋ค.
ssh-keygen // SSH ํค ์์ฑ
ssh-keygen ๋ช ๋ น์ด๋ ๊ฒฝ๋ก ~/.ssh./ ์ ๋ ํ์ผ id_rsa์ id_rsa.pub๋ฅผ ์์ฑํ๋ค.
์ด ๋ ํ์ผ์ ssh ํค ํ์ด๋ผ๊ณ ํ๋ฉฐ,
id_rsa.pub๋ ๋๊ตฌ์๊ฒ๋ ๊ณต๊ฐํด๋ ๋๋ ๊ณต๊ฐํค(Public Key)๋ผ๊ณ ํ๋ค.
id_rsa๋ ๊ณต๊ฐ๋๋ฉด ์ ๋๊ณ ๋๋ง ๋ณด๊ดํด์ผ ํ๋ ํค๋ผ๊ณ ํ์ฌ, ๊ฐ์ธํค(Private Key) ๋๋ ๋น๋ฐํค(Secret Key)๋ผ๊ณ ํ๋ค.
์ํฐ๋ฅผ ๋ช ๋ฒ ๋๋ฅด๋ฉด, ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ค๊ฒ ๋๋ค.
SSH ํค ํ์ด๋ฅผ ์์ฑํ์์ผ๋ฏ๋ก, ์์ฑ๋ ํค ํ์ด ์ค ๊ณต๊ฐํค๋ฅผ ๋ณต์ฌํ์ฌ gitub์ ๋ฑ๋กํ๋ค.
cat ~/.ssh/id_rsa.pub // ๊ณต๊ฐํค ๋ณต์ฌ
์ด์ ๋ค์๊ณผ ๊ฐ์ ์์ผ๋ก ์งํํด์ค๋ค.
Github ๋ก๊ทธ์ธ > settings > SSH and GPG keys > New SSH Key > key ์์ ๋ณต์ฌํ ํค ๊ฐ ์ ๋ ฅ
์ฑ๊ณตํ๋ค๋ฉด, repositories > codes > SSH ๋ฌธ์์ด ๋ณต์ฌ > ํฐ๋ฏธ๋์์ git clone ๋ณต์ฌํ ๋ฌธ์์ด
๊ณผ์ ์ ๋๋ง์น๊ณ ls๋ก ํ์ธํ๋ฉด ์ ์์ ์ผ๋ก ํด๋๊ฐ clone ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!!
์ด๋ฒ ๊ณผ์ ๋ (๋ธ๋ผ์ฐ์ ๊ฐ ์๋) node.js ํ๊ฒฝ์์ JavaScript ํ๋ก๊ทธ๋จ์ ์คํํ๋ค.
์ฝ๋์คํ
์ด์ธ ๊ณผ์ ์ ์ถ ์์คํ
์ CLI ํ๋ก๊ทธ๋จ์ด๋ฉด์, ๋์์ npm ํจํค์ง์
๋๋ค.
๋จผ์ node index.js ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋์จ๋ค.
# '$' ํ์๋ ํ๋กฌํํธ๋ฅผ ๋ํ๋
๋๋ค.
node:internal/modules/cjs/loader:936
throw err;
^
Error: Cannot find module 'range'
Require stack:
- /Users/hongshik/Desktop/fe-sprint-cli-practice-main/getListMultiplesOfTwo.js
- /Users/hongshik/Desktop/fe-sprint-cli-practice-main/index.js
at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
at Function.Module._load (node:internal/modules/cjs/loader:778:27)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/Users/hongshik/Desktop/fe-sprint-cli-practice-main/getListMultiplesOfTwo.js:1:19)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/hongshik/Desktop/fe-sprint-cli-practice-main/getListMultiplesOfTwo.js',
'/Users/hongshik/Desktop/fe-sprint-cli-practice-main/index.js'
]
}
์์ธํ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ดํด๋ณด๋ฉด Error: Cannot find module 'range'
๋ผ๊ณ ๋์ด์๋๋ฐ
๋ฑ ๋ด๋ range ๋ชจ๋์ด ๊น๋ฆฌ์ง ์์๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
๋ฐ๋ผ์ npm install range
๋ฅผ ์ด์ฉํ์ฌ range ๋ชจ๋์ ๊น์์ค๋ค.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ค์น๊ฐ ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์๊ณ ,
๋ค์ node index.js ์, ์ค๋์ ๊ณผ์ ์ธ ๋ฏธ์ ์ ๋ณผ ์ ์์๋ค.
์ด์ nano getListMultiplesOfTwo.js ๋ก ํ์ผ ํธ์ง์ ์์ํ์.
๊ทธ๋ฆฌ๊ณ nano index.js ๋ก getListMultiplesOfTwo ๋ฅผ ๋ถ๋ฌ์จ๋ค ํ์ธํ ์ ์์๋ค.
element๊ฐ upTo ์ธ ๊ฒ์ด ํฌ์ธํธ์ด๋ค.
๋คํ์ด๊ฒ๋ https://npm.runkit.com/range?t=1652067135454 ๋ฅผ ์ฐธ๊ณ ํ ์ ์์๋ค.
var range = require("range")
range.range(0, 100, 2);
์๋๋๋ก๋ฉด ์ด๊ฒ ๋ง๊ฒ ์ง๋ง, index.js ๋ upto๋ฅผ ์ธ์๋ก ํ๋ฏ๋ก ์ด ์ฝ๋๊ฐ ๋ง๊ฒ ๋ค.
var range = require("range")
range.range(2, upTo+2, 2);
ctrl + x ์ ๋๋ฅด๊ณ y๋ก ์ ์ฅ์ ํ ํ, ์ฐฝ์ ๋์์ node index.js๋ก ๋ค์ ๋ค์ด๊ฐ๋ณด์.
๊ทธ๋ผ ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ๋ function์ด ์ ๋๋ก ์ ๋ฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
npm run test
๋ ํต๊ณผํ์ผ๋, npm run submit
์ผ๋ก ์ ์ถํ๋ฉด ๊ณผ์ Done.
์ถ๊ฐ๋ก npm run submit ls
๋ก ์ด๋๊น์ง ์ ์ถํ ๊ณผ์ ๋ฆฌ์คํธ๋ฅผ ๋ณผ ์ ์๋ค.