ENGLISH | ไธญๆ็ | ๆฅๆฌ่ช็
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ํ ๋๋ ์ด์์์ ๋ฐ์ด๋ ธ๋ ๊ฒ ๊ฐ์ง๋ง, ์ ์ง๋ณด์๋ ๋ชจ๋์๊ฒ ์ ์ฌ์ ์ธ ์ ๋ชฝ์ ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ฐ๊ฒฌํ๊ณ , ์์ฑํ๊ณ ์์งํ ๊ฐ์ด๋๋ผ์ธ์ ๋ชฉ๋ก์ ๋๋ค. ์ด ๊ฐ์ด๋๋ผ์ธ์ ๋๋ถ๋ถ์ elsewhen์์์ JavaScript ํ๋ก์ ํธ์ ์ ๋ง์ต๋๋ค. ๋ง์ฝ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณต์ ํ๊ณ ์ถ์ผ์๊ฑฐ๋ ์ฌ๊ธฐ์ ์๋ ๊ฐ์ด๋๋ผ์ธ ์ค ์ด๋ค ๊ฒ์ด ์ง์์ ธ์ผ ํ๋ค๊ณ ์๊ฐํ์ ๋ค๋ฉด, ๋ถ๋ด์์ด ์ฐ๋ฆฌ์๊ฒ ๊ณต์ ํด์ฃผ์ธ์.
- Git
- ๋ฌธ์ํ
- ํ๊ฒฝ
- ์์กด์ฑ
- ํ ์คํธ
- ๊ตฌ์กฐ ๋ฐ ๋ค์ด๋ฐ
- ์ฝ๋ ์คํ์ผ
- ๋ก๊น
- API
- ๋ผ์ด์ผ์ค
Git์๋ ๋ช ์ฌํด์ผํ ๊ท์น๋ค์ด ์์ต๋๋ค.
-
feature ๋ธ๋์น(branch)์์ ์์ ํ์ธ์.
์ด์ :
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์์ ์ ๋ฉ์ธ ๋ธ๋์น ๋์ ์ ๊ฒฉ๋ฆฌ๋ ๋ณ๋์ ๋ธ๋์น์์ ํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํผ๋ ์์ด ์ฌ๋ฌ๊ฐ์ ํ ๋ฆฌํ์คํธ(Pull Request)๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค. ๋ํ ์ ์ฌ์ ์ผ๋ก ๋ถ์์ ํ, ์๋ฃ๋์ง ์์ ์ฝ๋๋ก ๋ง์คํฐ ๋ธ๋์น๋ฅผ ์ค์ผ์ํค์ง ์๊ณ , ์์ ์ ๋ฐ๋ณตํ ์ ์์ต๋๋ค. ๋ ์์๋ณด๊ธฐ
-
develop
์์ ๋ธ๋์น๋ฅผ ๋ง๋์ธ์.์ด์ :
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด, ๋ง์คํฐ ๋ธ๋์น์ ์ฝ๋๋ฅผ ํญ์ ๊ฑฐ์ ๋ฌธ์ ์์ด ๋น๋ํ ์ ์๊ณ , ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ํด์ ์ง์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค (์ผ๋ถ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๊ณผํ ์๋ ์์).
-
develop
๊ณผmaster
์ ์ง์ ํธ์ํ์ง ์๊ณ , ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋์ธ์.์ด์ :
ํ ๋ฆฌํ์คํธ๋ ๊ธฐ๋ฅ ๊ตฌํ์ ์๋ฃํ ๊ฒ์ ๋ค๋ฅธ ํ ๋ฉค๋ฒ๋ค์๊ฒ ์๋ฆฝ๋๋ค. ๋ํ ์ฌ์ด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ฉฐ, ์ ์๋ ๊ธฐ๋ฅ์ ๋ํด ํ ๋ก ํ ์ ์๋ ํฌ๋ผ์ ์ ๊ณตํฉ๋๋ค.
-
๊ฐ๋ฐํ ๊ธฐ๋ฅ์ ํธ์ํ๊ณ ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๊ธฐ ์ ์, ๋ก์ปฌ
develop
๋ธ๋์น๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ธํฐ๋ํฐ๋ธํ ๋ฆฌ๋ฒ ์ด์ค(rebase)๋ฅผ ์งํํ์ธ์.์ด์ :
๋ฆฌ๋ฒ ์ด์ค๋ ์์ฒญํ ๋ธ๋์น(
master
ํน์develop
)์ ๋ณํฉ(merge)ํฉ๋๋ค. ๋ํ ๋ณํฉ ์ปค๋ฐ์ ๋ง๋ค์ง ์์ผ๋ฉด์ ๋ก์ปฌ์์ ๋ง๋ ์ปค๋ฐ๋ค์ ์ ์ฉํฉ๋๋ค (์ถฉ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด). ๊ฒฐ๊ตญ ๊นจ๋ํ ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ธฐ๊ฒ ๋ฉ๋๋ค. ๋ ์์๋ณด๊ธฐ -
ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ๋ฆฌ๋ฒ ์ด์คํ๋ ๋์ ์ ์ฌ์ ์ธ ์ถฉ๋์ ์ ๊ฑฐํ์ธ์.
-
๋ณํฉ ํ, ๋ก์ปฌ๊ณผ ์๊ฒฉ์ ์๋ feature ๋ธ๋์น๋ฅผ ์ญ์ ํ์ธ์.
์ด์ :
์ด ๋ฐฉ๋ฒ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ธ๋์น๋ค๋ก๋ถํฐ ๋ธ๋์น ๋ฆฌ์คํธ๋ฅผ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค. ๋ํ, ๋ธ๋์น๊ฐ
master
๋๋develop
์ผ๋ก ๋ณํฉ๋๋ ๊ฒ์ ๋จ ํ ๋ฒ์ผ๋ก ๋ณด์ฅํฉ๋๋ค. feature ๋ธ๋์น๋ ์์ ์ด ์งํ๋๊ณ ์๋ ๋์ค์๋ง ์กด์ฌํด์ผ ํฉ๋๋ค. -
ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ ์, feature ๋ธ๋์น๋ ์ ๋น๋๋๋์ง, ์ฝ๋ ์คํ์ผ ์ฒดํฌ๋ฅผ ํฌํจํ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ง ๊ฒ์ฆํ์ธ์.
์ด์ :
์์ ์ ์ธ ๋ธ๋์น์ ์ฝ๋๋ฅผ ์๋ก ํธ์ํ๋ ค ํ ๋, ๋ง์ฝ feature ๋ธ๋์น์ ํ ์คํธ๊ฐ ์คํจํ๋ค๋ฉด, ๋ชฉํํ ๋ธ๋์น์ ๋น๋๋ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ํ ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ์ฝ๋ ์คํ์ผ ๊ฒ์ฌ๋ฅผ ์ ์ฉํด์ผํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ์ฝ๋์ ์ค์ ๋ณ๊ฒฝ์ฌํญ์ ์์ฑํ ๋ ํฌ๋งท์ ์์ ํ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์์ผ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถฅ๋๋ค.
-
์ด .gitignore file์ ์ฌ์ฉํ์ธ์.
์ด์ :
์ด ํ์ผ์๋ ์ด๋ฏธ ์๊ฒฉ ์ ์ฅ์์ ์ฝ๋์ ํจ๊ป ๋ณด๋ด๋ฉด ์๋๋ ์์คํ ํ์ผ ๋ชฉ๋ก์ด ์์ต๋๋ค. ๋ํ ์ด ํ์ผ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๋ํฐ์ ๋๋ถ๋ถ์ ๊ณตํต ์์กด์ฑ ํด๋์ ๋ํ ํด๋ ๋ฐ ํ์ผ ์ค์ ์ ํฌํจํ๊ณ ์์ต๋๋ค.
-
develop
๊ณผmaster
๋ธ๋์น๋ฅผ ๋ณดํธํ์ธ์.์ด์ :
์ด ๋ฐฉ๋ฒ์ ์์ธกํ์ง ๋ชปํ, ๋์ดํฌ ์ ์๋ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ production-ready ๋ธ๋์น๋ค์ ๋ณดํธํฉ๋๋ค. ๋ ์์๋ณด๊ธฐ: Github, Bitbucket
์๊ธฐํ ์ด์ ๋ค ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ์ธํฐ๋ํฐ๋ธ ๋ฆฌ๋ฒ ์ด์ค, ๊ทธ๋ฆฌ๊ณ Gitflow์ ๋ช๊ฐ์ง ์์(๋ธ๋์น ๋ค์ด๋ฐ๊ณผ develop ๋ธ๋์น์ ๋ณด์ )์ ํจ๊ป Feature ๋ธ๋์น ์ํฌํ๋ก์ฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ฃผ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์๋ก์ด ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ Git ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ด๊ธฐํํ์ธ์. ์ ์ง๋ณด์ ์์ ์ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๋ ๋ฌด์ํ์ธ์.
cd <project directory> git init
-
์๋ก์ด feature/bug-fix ๋ธ๋์น๋ฅผ ์ฒดํฌ์์ํ์ธ์.
git checkout -b <branchname>
-
๋ณ๊ฒฝ์ฌํญ์ ์์ฑํ์ธ์.
git add git commit -a
์ด์ :
git commit -a
๋ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ๋ถ๋ฆฌ์ํจ ์ํ๋ก ์๋ํฐ๋ฅผ ์ฝ๋๋ค. ์น์ 1.3์์ ์์ธํ ์์๋ณด์ธ์. -
๋์น ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๊ธฐ ์ํด ์๊ฒฉ ์ ์ฅ์์ ๋๊ธฐํํ์ธ์.
git checkout develop git pull
์ด์ :
์ด๋ ๊ฒ ํ๋ฉด ์ถฉ๋(conflict)์ ํฌํจํ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋๋ ๋์ ์, ๋น์ ์ ์ปดํจํฐ์์ ๋ฆฌ๋ฒ ์ด์คํจ์ผ๋ก์จ ์ถฉ๋์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
-
์ธํฐ๋ํฐ๋ธํ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ํตํด develop ๋ธ๋์น์ ๋ง์ง๋ง ๋ณ๊ฒฝ์ฌํญ์ feature ๋ธ๋์น๋ก ์ ๋ฐ์ดํธ ํ์ธ์.
git checkout <branchname> git rebase -i --autosquash develop
์ด์ :
--autosquash๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ ์ปค๋ฐ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ๋ฐ์ด ๋ฃ์ ์๋ ์์ต๋๋ค. develop ๋ธ๋์น์์ ํ๋์ ๊ธฐ๋ฅ์ ์ํ ๋ง์ ์ปค๋ฐ๋ค์ ์๋ฌด๋ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด์ฃ . ๋ ์์๋ณด๊ธฐ
-
๋ง์ฝ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์๋ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ด๋ ์ข์ต๋๋ค. ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ฉด, ๊ทธ๊ฒ์ ํด๊ฒฐ(resolve)ํ๊ณ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ๊ณ์ํ์ธ์.
git add <file1> <file2> ... git rebase --continue
-
๋ธ๋์น๋ฅผ ํธ์ํ์ธ์. ๋ฆฌ๋ฒ ์ด์ค๋ ์ด๋ ฅ์ ๋ณ๊ฒฝ์ํต๋๋ค. ๋ฐ๋ผ์ ๋น์ ์
-f
๋ฅผ ์ฌ์ฉํด์ ์๊ฒฉ ๋ธ๋์น๋ก ๊ฐ์ ๋ณ๊ฒฝํด์ผํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๋น์ ์ ๋ธ๋์น์์ ์์ ํ๊ณ ์๋ค๋ฉด, ์กฐ๊ธ ๋ ํ๊ดด์ ์ธ--force-with-lease
๋ฅผ ์ฌ์ฉํ์ธ์.git push -f
์ด์ :
๋ฆฌ๋ฒ ์ด์ค ํ ๋, ๋น์ ์ feature ๋ธ๋์น์ ์ด๋ ฅ์ ๋ณ๊ฒฝํ๊ณ ์๋ ๊ฒ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, Git์ ์ผ๋ฐ์ ์ธ
git push
๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ๋์ , ๋น์ ์ -f ํน์ --force ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๋ ์์๋ณด๊ธฐ -
ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋์ธ์.
-
ํ ๋ฆฌํ์คํธ๋ ๋ฆฌ๋ทฐ์ด์ ์ํด ์์ฉ๋๊ณ , ๋ณํฉ๋๊ณ ์ข ๋ฃ๋ ๊ฒ ์ ๋๋ค.
-
๋ชจ๋ ์์ ์ด ๋๋ฌ๋ค๋ฉด ๋น์ ์ ๋ก์ปฌ feature ๋ธ๋์น๋ ์ง์ฐ์ธ์.
git branch -d <branchname>
์๊ฒฉ ์ ์ฅ์์ ์กด์ฌํ์ง ์๋ ๋ชจ๋ ๋ธ๋์น๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋ฉ๋๋ค.
git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done
์ปค๋ฐ์ ์์ฑํ๋ ์ข์ ๊ฐ์ด๋๋ผ์ธ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด Git์ผ๋ก ์์ ํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํ์ ํ๋ ๊ฒ์ด ์๋นํ ์ฌ์์ง๋๋ค. ๋ค์์ ๊ทธ ๊ท์น๋ค์ ๋๋ค. (์ถ์ฒ)
-
์ค ๋ฐ๊ฟ์ ํตํด์ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํ์ธ์.
์ด์ :
Git์ ๋น์ ์ ์ปค๋ฐ ๋ฉ์์ง์ ์ฒซ๋ฒ์งธ ์ค์ ์์ฝ์ผ๋ก ๋ถ๊ฐํ ๋งํผ ๋๋ํฉ๋๋ค. ์ฌ์ค, git log ๋์ ์ git shortlog๋ฅผ ์ฌ์ฉํ๋ฉด ์ปค๋ฐ ID์ ์์ฝ์ ๋ณด๋ง์ด ํ์๋ ์ปค๋ฐ ๋ฉ์์ง์ ๊ธด ๋ฆฌ์คํธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
-
์ ๋ชฉ์ 50์๋ก, ๋ณธ๋ฌธ์ 72์๋ก ์ ํํ์ธ์.
์ด์ :
์ปค๋ฐ์ ๊ฐ๋ฅํ ๋ณด๊ธฐ ์ข๊ณ ์ง์ค๋์ด์ผํ๋ฉฐ, ์ฅํฉํ๊ฒ ์ค๋ช ํด์๋ ์๋ฉ๋๋ค. ๋ ์์๋ณด๊ธฐ
-
์ ๋ชฉ์ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ์ธ์.
-
์ ๋ชฉ์ ๋ง์นจํ๋ก ๋๋ด์ง๋ง์ธ์.
-
์ ๋ชฉ์ ๋ช ๋ น๋ฒ(imperative mood)์ ์ฌ์ฉํ์ธ์.
์ด์ :
์ปค๋ฏธํฐ๊ฐ ์๋ฃํ ์ผ์ ํํํ๋ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋๋ค. ์ด๋ฐ ๋ฉ์์ง๋ค์ ์ปค๋ฐ์ด ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฉ๋ ๋ค์ ์ด๋ป๊ฒ ๋๋์ง๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์ด ๋ซ์ต๋๋ค. ๋ ์ฝ๊ธฐ
-
๋ณธ๋ฌธ์ ์ด๋ป๊ฒ ๋์ ๋ฌด์์๊ณผ ์๋ฅผ ์ค๋ช ํ๋๋ฐ ์ฌ์ฉํ์ธ์.
README.md
๋ฅผ ์ํด์ ์ด ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์. ํ์ํ ์น์ ์ ์์ ๋กญ๊ฒ ์ถ๊ฐํ์ธ์.- ํ ๊ฐ ์ด์์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์๋ ํ๋ก์ ํธ๋ ๊ฐ๊ฐ์
README.md
ํ์ผ์ ๋งํฌ๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์. - ํ๋ก์ ํธ๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ
README.md
๋ฅผ ์ต์ ์ผ๋ก ์ ์งํ์ธ์. - ์ฝ๋์ ์ฃผ์์ ๋ฌ์์ฃผ์ธ์. ๊ฐ๋ฅํ๋ค๋ฉด, ๊ฐ ์น์ ์์ ๋ฌด์์ ํํํ๋ ค๊ณ ํ๋์ง ๋ช ํํ๊ฒ ๋ง๋์ธ์.
- GitHub ํน์ StackOverflow์ ๋น์ ์ด ์ฌ์ฉํ ์ ๊ทผ๋ฒ์ด๋ ์ฝ๋์ ๋ํ ํ ๋ก ์ด ์๋ค๋ฉด, ์ฃผ์์ ๊ทธ ๋งํฌ๋ฅผ ์ฒจ๋ถํ์ธ์.
- ์ฃผ์์ ๋์ ์ฝ๋์ ๋ํ ๋ณ๋ช ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์. ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ์ธ์.
- ํด๋ฆฐ ์ฝ๋๋ ์ฃผ์์ ์ ํ ๋ฌ์ง ์๋ ๊ฒ์ ๋ํ ๋ณ๋ช ์ด ์๋๋๋ค.
- ์ฝ๋๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ฃผ์๋ ์ ์ ํ๊ฒ ๋ฐ๊ฟ์ฃผ์ธ์.
-
ํ์ํ๋ค๋ฉด
development
,test
์production
ํ๊ฒฝ์ ๋ถ๋ฆฌํ์ธ์.์ด์ :
๋ค๋ฅธ ๋ฐ์ดํฐ, ํ ํฐ, API, ํฌํธ ๋ฑ... ์๋ง๋ ๋ณ๋์ ํ๊ฒฝ์ ํ์๋ก ํ ๊ฒ์ ๋๋ค. ์๋ง๋ ๋น์ ์ ๊ฒฉ๋ฆฌ๋
development
๋ชจ๋์์๋ ๊ฐ์ง API๋ฅผ ํธ์ถํ๊ณ ์์๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํด์ ์๋/์๋ ํ ์คํธ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์ํ ๊ฒ๋๋ค. ํน์ Google Analytics๋ฅผproduction
๋ชจ๋์์๋ง ์ฌ์ฉํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ๋ ์ฝ๊ธฐ -
๋ฐฐํฌ์ ๊ด๋ จ๋ ์ค์ ๋ณ์๋ค์ ํ๊ฒฝ ๋ณ์์์ ๋ถ๋ฌ์ค๋๋ก ํ๊ณ ๊ทธ ๋ณ์๋ค์ ์ฝ๋ ๋ฒ ์ด์ค์ ์์๋ก ํฌํจํ์ง ๋ง์ธ์. ์ด ์ํ์ ์ฐธ๊ณ ํ์ธ์.
์ด์ :
๋น์ ์ ํ ํฐ์ด๋ ๋น๋ฐ๋ฒํธ ํน์ ๊ทธ ์ธ์ ์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ๋๋ค. ์ธ์ ๋ ์ง ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ณต๊ฐํ ์ ์์ ๊ฒ์ฒ๋ผ ์ค์ ๋ณ์๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ถ์ ์ ๋๋ก ๊ตฌ๋ถ๋์ด์ผ ํฉ๋๋ค.
๋ฐฉ๋ฒ:
.env
ํ์ผ์ ๋น์ ์ ๋ณ์๋ค์ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๊ณ , ๊ทธ ํ์ผ์.gitignore
์ ๋ฃ์ด ์ ์ธํ์ธ์. ๋์ ์, ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์๊ฒ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํ๋.env.example
์ด๋ผ๋ ํ์ผ์ ์ปค๋ฐํ์ธ์. ํ๋ก๋์ ํ๊ฒฝ์์๋ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํค์ผ ํฉ๋๋ค. ๋ ์ฝ๊ธฐ -
์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๊ธฐ ์ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฒ์ฆ(validate)ํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ๊ฐ๋ค์ ๊ฒ์ฆํ๊ธฐ ์ํด
joi
๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ด ์ํ์ ์ฐธ๊ณ ํ์ธ์.์ด์ :
๋ค๋ฅธ ์ด๋ค์ ํธ๋ฌ๋ธ์ํ ์์ ๊ตฌํด๋ผ ์ ์์ต๋๋ค.
-
package.json
์engines
์ Node.js ๋ฒ์ ์ ์ค์ ํ์ธ์.์ด์ :
๋ค๋ฅธ ์ด๋ค์๊ฒ ํ๋ก์ ํธ๊ฐ ๋์ํ๋ Node.js ๋ฒ์ ์ ๋ํด ์๋ ค์ค ์ ์์ต๋๋ค. ๋ ์ฝ๊ธฐ
-
์ถ๊ฐ๋ก,
nvm
์ ์ฌ์ฉํ๊ณ.nvmrc
ํ์ผ์ ํ๋ก์ ํธ์ ๋ฃจํธ ๊ฒฝ๋ก์ ๋ง๋์ธ์. ๋ฌธ์์ ๊ทธ๊ฒ์ ๋ช ์ํ๋ ๊ฒ๋ ์์ง๋ง์ธ์.์ด์ :
nvm
์ ์ฌ์ฉํ๋ ์ฌ๋์ด๋ผ๋ฉดnvm use
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋จํ๊ฒ ์ ์ ํ Node.js ๋ฒ์ ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. ๋ ์ฝ๊ธฐ -
preinstall
์ ์ฌ์ฉํด์ Node.js์ npm ๋ฒ์ ์ ์ฒดํฌํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.์ด์ :
์ด๋ค ์์กด(dependency)์ ์๋ก์ด npm ๋ฒ์ ์ผ๋ก ์ค์นํ ๋ ์คํจํ ์๋ ์์ต๋๋ค.
-
๊ฐ๋ฅํ๋ค๋ฉด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ธ์.
์ด์ :
๋์ปค๋ ์ ์ฒด์ ์ธ ์ํฌํ๋ก์ฐ์ ๊ฑธ์ณ ์ผ๊ด์ ์ธ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉํ์ง ์์ผ๋ฉด ์์กด์ฑ ํน์ ์ค์ ์ ๋ง์ ์์ ์ด ํ์ํ ์๋ ์์ต๋๋ค. ๋ ์ฝ๊ธฐ
-
๊ธ๋ก๋ฒ๋ก ๋ชจ๋์ ์ค์นํ์ง ๋ง๊ณ ๋ก์ปฌ ๋ชจ๋์ ์ฌ์ฉํ์ธ์.
์ด์ :
๋น์ ์ ํด์ ๋๋ฃ๋ค์ด ๊ธ๋ก๋ฒ๋ก ์ค์นํ์ง ์๊ณ ๋น์ ์ด ์ฌ์ฉํ๋ ํด์ ๊ณต์ ํ๋๋ก ํด์ค๋๋ค.
-
๋ค๋ฅธ ํ ๋ฉค๋ฒ๋ค์ด ๋น์ ๊ณผ ์ ํํ ๊ฐ์ ์์กด์ฑ์ ๊ฐ๋๋ก ํ์ธ์.
์ด์ :
์๋๋ฉด ๋น์ ์ ์ด๋ค ๊ฐ๋ฐ ๊ธฐ๊ธฐ์์๋ ์ฝ๋๊ฐ ์์ํ๋๋ก ๋์ผํ๊ฒ ๋์ํ๋ ๊ฒ์ ์ํ๋๊น์. ๋ ์ฝ๊ธฐ
๋ฐฉ๋ฒ:
npm@5
์ด์์ ๋ฒ์ ์์package-lock.json
์ ์ฌ์ฉํ์ธ์.์ ๋ npm@5 ๋ฒ์ ๋ฏธ๋ง์ด์์:
๋์์ผ๋ก
Yarn
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.README.md
์ Yarn์ ๋ํด ํ์คํ ๋ช ์ํ์ธ์. ๋น์ ์ ๋ฝ(lock) ํ์ผ๊ณผpackage.json
ํ์ผ์ ๊ฐ ์์กด์ฑ ์ ๋ฐ์ดํธ ํ ๋์ผํ ๋ฒ์ ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๋ ์ฝ๊ธฐ์ ๋
Yarn
์ด๋ผ๋ ์ด๋ฆ์ด ์ซ์๋ฐ์:์ ๊ฐ์ ๋๋ค. ๊ตฌ ๋ฒ์ ์
npm
์์๋ ์๋ก์ด ์์กด์ ์ค์นํ ๋-โsave --save-exact
๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ฆฌ๊ธฐ ์ ์npm-shrinkwrap.json
์ ์์ฑํ์ธ์. ๋ ์ฝ๊ธฐ
-
npm ls --depth=0
๋ฅผ ์ฌ์ฉํด์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ํจํค์ง๋ฅผ ์ถ์ฒํ์ธ์. ๋ ์ฝ๊ธฐ -
depcheck
๋ฅผ ์ฌ์ฉํด์ ํจํค์ง ์ค์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ๊ด๋ จ์ด ์๋ ํจํค์ง๊ฐ ์๋์ง ํ์ธํ์ธ์. ๋ ์ฝ๊ธฐ์ด์ :
๋น์ ์ ์ฐ์ด์ง ์๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น์ ์ ์ฝ๋์ ํฌํจํ ์๋ ์๊ณ ๊ทธ๋ก์ธํด ํ๋ก๋์ ์ ๋ฒ๋ค ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋๋ค. ์ฐ์ด์ง ์๋ ์์กด์ฑ์ ์ฐพ์ ์ ๊ฑฐํ์ธ์.
-
์์กด์ ์ฌ์ฉํ๊ธฐ ์ ์,
npm-stat
์ ์ฌ์ฉํด ์ปค๋ฎค๋ํฐ์์ ์ ์ฌ์ฉ๋๋ ํจํค์ง์ธ์ง ํ์ธํ๊ธฐ ์ํด์ ๋ค์ด๋ก๋ ํต๊ณ๋ฅผ ํ์ธํ์ธ์. ๋ ์ฝ๊ธฐ์ด์ :
๋๊ฐ, ์ฌ์ฉ๋์ด ๋ง์ ์๋ก ๊ธฐ์ฌ์(contributor)๊ฐ ๋ ๋ง์์ง๋ฏ๋ก, ์ ์ง ๋ณด์๊ฐ ์ ๋ฉ๋๋ค. ๋ํ, ์ด๋ก ์ธํด ๋ฒ๊ทธ๊ฐ ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌ๋๊ณ ๊ณ ์ณ์ง๋๋ค.
-
์์กด์ ์ฌ์ฉํ๊ธฐ ์ ์, ๋ง์ ๋ฉ์ธํ ์ด๋์ ํจ๊ป, ์ฑ์ํ ๋ฒ์ ๋ฆด๋ฆฌ์ฆ ์ฃผ๊ธฐ๊ฐ ์๋์ง ํ์ธํ์ธ์. ์:
npm view async
๋ ์ฝ๊ธฐ์ด์ :
์๋ฌด๋ฆฌ ๋ง์ ์ปจํธ๋ฆฌ๋ทฐํฐ๊ฐ ์์ด๋ ๋ฉ์ธํ ์ด๋๋ค์ด ํจ์น๋ฅผ ์ถฉ๋ถํ ๋น ๋ฅด๊ฒ ๋จธ์ง(merge)ํ์ง ์์ผ๋ฉด ์์ฉ์ด ์์ต๋๋ค.
-
๋ ์๋ ค์ง ์์กด์ฑ์ด ํ์ํ ๊ฒฝ์ฐ, ๊ทธ๊ฑธ ์ฌ์ฉํ๊ธฐ ์ ์ ํ ๋ด์์ ์๋ ผํ์ธ์.
-
npm outdated
๋ฅผ ์ฌ์ฉํด์ ๋น์ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๊นจ์ง์ง ์๊ณ ์์กด ํจํค์ง์ ์ต์ ๋ฒ์ ์ผ๋ก ๋์ํ๋๋ก ๋ง๋์ธ์. ๋ ์ฝ๊ธฐ์ด์ :
์์กด์ ๋๋๋ก ๊นจํธ๋ฆฌ๋ ๋ณํ(breaking change)๋ฅผ ๋ด์ ์ฑ๋ก ์ ๋ฐ์ดํธ ๋ฉ๋๋ค. ํญ์ ์ ๋ฐ์ดํธ๊ฐ ์์ ๋๋ง๋ค ๋ฆด๋ฆฌ์ฆ ๋ ธํธ๋ฅผ ํ์ธํ์ธ์. ๋น์ ์ ์์กด์ฑ์ ํ ๋ฒ์ ํ๋์ฉ ์ ๋ฐ์ดํธํ๋ฉด, ๋ญ๊ฐ ์๋ชป๋์์ ๋ ํธ๋ฌ๋ธ์ํ ์ด ์ฌ์์ง๋๋ค. npm-check-updates ๊ฐ์ด ์ข์ ํด์ ํ์ฉํ์ธ์.
-
Snyk ๊ฐ์ ๊ฒ์ ์ฌ์ฉํด์ ํจํค์ง์ ์๋ ค์ง ๋ณด์ ์ทจ์ฝ์ ์ด ์๋์ง ํ์ธํ์ธ์.
-
ํ์ํ๋ค๋ฉด
test
๋ชจ๋๋ฅผ ๋ง๋์ธ์.์ด์ :
๋๋๋ก ํ๋ก๋์ ๋ชจ๋๋ก๋ End-to-End ํ ์คํธ์ ์ถฉ๋ถํ ์๋ ์์ง๋ง, ์์ธ๋ ํญ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋น์ ์ ํ๋ก๋์ ๋ชจ๋๋ฅผ ์ฌ์ฉํด์ ๋ค๋ฅธ ์ฌ๋์ ๋์๋ณด๋๋ฅผ ํ ์คํธ ๋ฐ์ดํฐ๋ก ์ค์ผ์ํค๋ ๊ฒ์ ์ํ์ง ์์ ์๋ ์์ต๋๋ค. ๋ค๋ฅธ ์๋ก, ํ๋ก๋์ ๋ชจ๋์์ ๋น์ ์ด ์ฌ์ฉํ๋ API๋ ํธ์ถ ์ ์ ํ์ ๊ฐ์ ธ์, ์ผ์ ๋์ ์์ฒญ ํ์๋ ํ ์คํธ ํธ์ถ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
-
ํ ์คํธ ํ์ผ์ ํ ์คํธ ๋๋ ๋ชจ๋๊ณผ ๊ฐ์ ๊ฒฝ๋ก์ ์์น์ํค๊ณ
moduleName.spec.js
์ฒ๋ผ*.test.js
๋*.spec.js
๊ฐ์ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ผ๋ก ์ด๋ฆ์ ์ง์ด์ฃผ์ธ์.์ด์ :
์ ๋ ํ ์คํธ๋ฅผ ์ฐพ๊ธฐ ์ํด์ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ค ๋ค์ง๊ธธ ์ํ๋ ์ฌ๋์ ์์ ๊ฒ๋๋ค. ๋ ์ฝ๊ธฐ
-
ํผ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ํ ์คํธ ํ์ผ๋ค์ ๋ณ๋์ ํ ์คํธ ํด๋์ ๋ฃ์ผ์ธ์.
์ด์ :
๋ช๋ช ํ ์คํธ ํ์ผ๋ค์ ์ฌ๋ฌ ๊ฐ์ ๊ตฌํ ํ์ผ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋น์ ์ ๊ทธ ํ์ผ๋ค์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฐพ์ ๊ฐ๋ฅ์ฑ์ด ํฐ
__test__
ํด๋์ ์ง์ด ๋ฃ์ด์ผ ํฉ๋๋ค. ๋ํ, ์ด์ ์ด__test__
๋ผ๋ ์ด๋ฆ์ ํ์ค์ด๋ฉฐ, ๋๋ถ๋ถ์ JavaScript ํ ์คํธ ํ๋ ์์ํฌ์ ์ํด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. -
ํ ์คํธ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ์ธ์. ์ฌ์ด๋ ์ดํํธ๋ฅผ ํผํ์ธ์. ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ถ๋ฆฌํ์ธ์. ์์ ํจ์๋ฅผ ์์ฑํ์ธ์.
์ด์ :
๋น์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฐ์ ์ ๋์ผ๋ก ๋ถ๋ฆฌํด ํ ์คํธ ํ๊ธฐ๋ฅผ ์ํ ๊ฒ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋น์ ์ "๋ฌด์์์ ์ํฅ๊ณผ ์ฝ๋ ์์ ์ฑ์ ๋ํ ๋น๊ฒฐ์ ์ (nondeterministic) ํ๋ก์ธ์ค๋ฅผ ์ต์ํ" ํด์ผ ํฉ๋๋ค. ๋ ์ฝ๊ธฐ
์์ ํจ์๋ ๊ฐ์ ์ ๋ ฅ์ ๋ํด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋๋ ค์ฃผ๋ ํจ์๋ฅผ ๋งํฉ๋๋ค. ๋ฐ๋๋ก, ๋ถ์(impure) ํจ์๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ํฌํจํ๊ณ ์๊ฑฐ๋ ๊ฐ์ ์ป๊ธฐ ์ํด ๋ฐ๊นฅ์ ์ํ์ ์์กดํ๋ ํจ์๋ฅผ ๋งํฉ๋๋ค. ์ด๋ฌํ ํน์ง์ ํจ์๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๋ ์ฝ๊ธฐ
-
์ ์ ํ์ ๋ถ์๊ธฐ๋ฅผ ํ์ฉํ์ธ์.
์ด์ :
์ด๋ฐ๊ธ ๋น์ ์ ์ ์ ํ์ ๋ถ์๊ธฐ๊ฐ ํ์ํ ์๋ ์์ต๋๋ค. ์ ์ ํ์ ๋ถ์๊ธฐ๋ ์ฝ๋์ ์ผ์ ์์ค์ ์ ๋ขฐ๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ ์ฝ๊ธฐ
-
develop
์ ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ๋ก์ปฌ๋ก ๋๋ฆฌ์ธ์.์ด์ :
ํ๋ก๋์ ์ค๋น๋ ๋ธ๋์น์ ๋น๋๋ฅผ ์คํจํ ์ฌ๋์ด ๋๊ณ ์ถ์ง ์์ ๊ฒ๋๋ค. ๋น์ ์ ๊ธฐ๋ฅ ๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ํธ์ํ๊ธฐ ์ ์ ๋จผ์
rebase
ํ ๋ค ํ ์คํธ๋ฅผ ๋๋ฆฌ์ธ์. -
README.md
ํ์ผ์ ์ ์ ํ ์น์ ์ ์ค๋ช ์ ํฌํจํด์ ํ ์คํธ์ ๋ํด ๋ฌธ์ํํ์ธ์.์ด์ :
๋ค๋ฅธ ๊ฐ๋ฐ์ ํน์ DevOps ์ ๋ฌธ๊ฐ๋ QA, ์๋๋ฉด ๋น์ ์ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์ผํ๋ ์ด ์ข์ ๋๊ตฐ๊ฐ์๊ฒ ๋จ๊ฒจ๋๋ ํธ๋ฆฌํ ๋ฉ๋ชจ์ ๋๋ค.
-
ํ๋ก๋ํธ๋ฅผ ๊ตฌ์ฑํ๋ ํ์ผ์ ์ญํ ์ด ์๋ ๊ธฐ๋ฅ, ํ์ด์ง, ์ปดํฌ๋ํธ ๋จ์๋ก ๊ตฌ์ฑํ์ธ์. ๋ํ, ํ ์คํธ ํ์ผ์ ๊ตฌํ ํ์ผ๊ณผ ๊ฐ์ ๊ฒฝ๋ก์ ๋์ธ์.
Bad
. โโโ controllers | โโโ product.js | โโโ user.js โโโ models | โโโ product.js | โโโ user.js
Good
. โโโ product | โโโ index.js | โโโ product.js | โโโ product.test.js โโโ user | โโโ index.js | โโโ user.js | โโโ user.test.js
์ด์ :
๊ธด ํ์ผ ๋ฆฌ์คํธ ๋์ ์, ํ ์คํธ๋ฅผ ํฌํจํด์ ํ๋์ ์ฑ ์์ ์บก์ํํ ์์ ๋ชจ๋์ ๋ง๋ค๊ฒ ๋ ๊ฒ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ํ์ผ ํ์์ด ํจ์ฌ ์ฌ์์ง๊ณ , ํ์ด๋ด๋ ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค.
-
ํผ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ํ ์คํธ ํ์ผ๋ค์ ๋ณ๋์ ํ ์คํธ ํด๋์ ๋ฃ์ผ์ธ์.
์ด์ :
๋ค๋ฅธ ๊ฐ๋ฐ์ ํน์ DevOps ์ ๋ฌธ๊ฐ ๋ค์ ์๊ฐ์ ์๊ปด์ค ์ ์์ต๋๋ค.
-
./config
ํด๋๋ฅผ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํ๊ฒฝ์ ์ํด ๋ค๋ฅธ ์ค์ ํ์ผ์ ๋ง๋ค์ง ๋ง์ธ์.์ด์ :
์๋ก ๋ค๋ฅธ ๋ชฉ์ (๋ฐ์ดํฐ๋ฒ ์ด์ค, API ๋ฑ)์ ์ํด ์ค์ ํ์ผ์ ๋ถ๋ฆฌํ ๋, ๊ทธ ํ์ผ๋ค์ ํ ํด๋์ ๋ฃ๊ณ
config
์ฒ๋ผ ์ ์๋ ค์ง ์ด๋ฆ์ ๊ฐ์ง ํด๋์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฅ ๋ค๋ฅธ ํ๊ฒฝ์ ์ํด ๋ค๋ฅธ ์ค์ ํ์ผ์ ๋ง๋ค์ง ๋ง๋ผ๋ ๊ฒ๋ง ๊ธฐ์ตํ์ธ์. ๊ทธ๋ ๊ฒ ํ๋ฉด ๊น๋ํ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. ์ฑ์ ๋ ๋ง์ ๋ฐฐํฌํ์ด ๋ง๋ค์ด์ง๋ฉด ์๋ก์ด ํ๊ฒฝ์ ์ด๋ฆ์ด ํ์ํฉ๋๋ค. ์ค์ ํ์ผ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ํ๊ฒฝ ๋ณ์์ ์ํด ์ ๊ณต๋์ด์ผ ํฉ๋๋ค. ๋ ์ฝ๊ธฐ -
์คํฌ๋ฆฝํธ ํ์ผ๋ค์
./scripts
ํด๋์ ๋ฃ์ผ์ธ์.bash
์node
์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํด์์.์ด์ :
๋น์ ์ ํ๋ก๋์ ๋น๋, ๊ฐ๋ฐ์ฉ ๋น๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต๊ธ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๊ธฐํ ๋ฑ, ์ต์ 1๊ฐ ์ด์์ ์คํฌ๋ฆฝํธ๋ฅผ ํ์๋ก ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
-
./build
ํด๋์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์น์ํค๋๋ก ํ์ธ์. ๊ทธ๋ฆฌ๊ณ.gitignore
์build/
๋ฅผ ์ถ๊ฐํ์ธ์.์ด์ :
์ทจํฅ๋๋ก ์ด๋ฆ์ ์ง์ผ์ธ์.
dist
๋ ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ํ ๋ด์์ ์ผ๊ด์ฑ์ ์งํค๋๋ก ํ์ธ์. ๊ทธ ์์ ๋ค์ด๊ฐ๋ ๊ฒ์ ๋๋ถ๋ถ ์์ฑ๋๊ฑฐ๋(๋ฒ๋ค๋๊ฑฐ๋, ์ปดํ์ผ๋๊ฑฐ๋, ํธ๋์คํ์ผ๋๊ฑฐ๋) ์ฎ๊ฒจ์ง ํ์ผ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋น์ ์ด ์์ฑํ ์ ์๋ค๋ฉด, ๋น์ ์ ํ์๋ ์์ฑํ ์ ์์ ๊ฒ์ด๋ฏ๋ก ๊ทธ ํ์ผ๋ค์ ์๊ฒฉ ์ ์ฅ์์ ์ฌ๋ฆด ํ์๋ ์์ต๋๋ค. ํน๋ณํ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด์. -
ํ์ผ๋ช ๊ณผ ๋๋ ํ ๋ฆฌ๋ช ์ ์ํด
PascalCase
๋camelCase
๋ฅผ ์ฌ์ฉํ์ธ์.PascalCase
๋ ์ปดํฌ๋ํธ์ฉ์ผ๋ก๋ง ์ฌ์ฉํ์ธ์. -
CheckBox
์ปดํฌ๋ํธ๋ฅผ ์ํด์CheckBox/index.js
๋CheckBox.js
๋ฅผ ์ฌ์ฉํ์ธ์. ํ์ง๋ง ์ฅํฉํCheckBox/Checkbox.js
ํน์checkbox/CheckBox.js
๋ ์ฌ์ฉํ์ง ๋ง์ธ์. -
์ด์์ ์ผ๋ก๋,
index.js
์์ ๋ํดํธ๋ก ๋ด๋ณด๋ด๋ ๋ชจ๋์ ์ด๋ฆ์ด ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.์ด์ :
๊ทธ๋ฌ๋ฉด ๋ถ๋ชจ ํด๋๋ง ๊ทธ๋ฅ ๊ฐ๋จํ ๋ถ๋ฌ์๋ ๋น์ ์ด ๋ฐ๊ฒ ๋ ์ปดํฌ๋ํธ๋ ๋ชจ๋์ด ๋ญ์ง ์์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
-
์๋ก์ด ํ๋ก์ ํธ์๋ stage-2 ์ด์์ ํ๋์ ์ธ JavaScript ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ธ์. ์ค๋๋ ํ๋ก์ ํธ์์๋ ํ๋ก์ ํธ๋ฅผ ํ๋ํ(modernize)ํ ๊ณํ์ด ์๋ค๋ฉด ์ผ๊ด์ฑ์ ์ํด ๊ธฐ์กด ๋ฌธ๋ฒ์ ์ ์งํ์ธ์.
์ด์ :
์ด๊ฒ์ ๋ชจ๋ ๋น์ ์๊ฒ ๋ฌ๋ ธ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ก์ด ๋ฌธ๋ฒ์ ์ฅ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ํธ๋์คํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. stage-2๋ ์ฝ๊ฐ์ ์ฌ์ํ ์์ ์ด ์์ ์๋ ์์ง๋ง, ๊ฒฐ๊ตญ ์คํ์ ์ผ๋ถ๊ฐ ๋ ๊ฒ๋๋ค.
-
๋น๋ ํ๋ก์ธ์ค์ ์ฝ๋ ์คํ์ผ ์ฒดํฌ๋ฅผ ํฌํจํ์ธ์.
์ด์ :
๋น๋๋ฅผ ๊นจํธ๋ฆฌ๋ ๊ฑด ๋น์ ์ ์ฝ๋์ ์คํ์ผ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋น์ ์ด ์ฝ๋ ์คํ์ผ์ ์ ์งํ๋ ๋ฐ์ ๋ ์ง์งํด์ง ๊ฒ๋๋ค. ํด๋ผ์ด์ธํธ, ์๋ฒ ์ ์ชฝ ๋ชจ๋์ ํ์ธ์. ๋ ์ฝ๊ธฐ
-
์ฝ๋ ์คํ์ผ์ ๊ฐ์ ํ๊ธฐ ์ํด ESLint๋ฅผ ์ฌ์ฉํ์ธ์.
์ด์ :
๊ผญ
eslint
๋ฅผ ์ ํํ ํ์๋ ์์ง๋ง ์ฐ๋ฆฌ๋eslint
๋ฅผ ์ ํธํฉ๋๋ค.eslint
๋ ๋ ๋ง์ ๋ฃฐ์ ์ง์ํ๊ณ , ๊ท์น์ ์ค์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. -
์ฐ๋ฆฌ๋ JavaScript์ Airbnb JavaScript Style Guide๋ฅผ ์ฌ์ฉํฉ๋๋ค. (๋ ์ฝ๊ธฐ) ํ๋ก์ ํธ๋ ํ์ด ์๊ตฌํ๋ JavaScript ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ฌ์ฉํ์ธ์.
-
FlowType์ ์ฌ์ฉํ ๋, ์ฐ๋ฆฌ๋ ESLint์ฉ Flow type ์คํ์ผ ์ฒดํฌ ๋ฃฐ์ ์ฌ์ฉํฉ๋๋ค.
์ด์ :
Flow๋ ์ฝ๊ฐ์ ๋ฌธ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ๋ฌธ๋ฒ ์ญ์ ํน์ ํ ์ฝ๋ ์คํ์ผ์ ๋ฐ๋ฅด๊ณ ์ฒดํฌ๋์ด์ผํ ํ์๊ฐ ์์ต๋๋ค.
-
์ฝ๋ ์คํ์ผ ์ฒดํฌ๋ก๋ถํฐ ํ์ผ์ด๋ ํด๋๋ฅผ ์ ์ธํ๊ธฐ ์ํด
.eslintignore
๋ฅผ ์ฌ์ฉํ์ธ์.์ด์ :
์คํ์ผ ์ฒดํฌ๋ก๋ถํฐ ๋ช ๋ช ํ์ผ์ ์ ์ธํ ๋๋ง๋ค
eslint-disable
์ฃผ์์ผ๋ก ์ฝ๋๋ฅผ ๋๋ฝ๊ฒ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. -
ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๊ธฐ ์ ์
eslint
๋นํ์ฑํ ์ฃผ์์ ์ ๊ฑฐํ์ธ์.์ด์ :
์ฝ๋๋ฅผ ์ง๋ ๋์ ๋ก์ง์ ์ง์คํ๊ธฐ ์ํด์ ์คํ์ผ ์ฒดํฌ๋ฅผ ๋นํ์ฑํ ํ๋ ๊ฑด ์ผ์์ ์ธ ์ผ์ ๋๋ค. ๊ทธ๋ฅ
eslint-disable
์ฃผ์์ ๋นํ์ฑํํ๋ ๊ฑธ ์์ง๋ง๊ณ ๊ท์น์ ๋ฐ๋ฅด์ธ์. -
์์ ์ ํฌ๊ธฐ์ ๋ฐ๋ผ์
//TODO
์ฃผ์์ ์ฌ์ฉํ๊ฑฐ๋ ์ด์๋ฅผ ์๋ก ๋ง๋์ธ์.์ด์ :
๊ทธ๋ ๊ฒ ํ๋ฉด ๋น์ ์ค์ค๋ก๋ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์์ ์์ (ํจ์ ๋ฆฌํฉํ ๋ง ํน์ ์ฃผ์ ์ ๋ฐ์ดํธ)์ ์๊ธฐ์ํฌ ์ ์์ต๋๋ค. ์กฐ๊ธ ๋ ํฐ ์์ ์ ๋ํด์๋ ๋ฆฐํธ ๊ท์น์ ์ํด ๊ฐ์ ๋๋
//TODO(#3456)
๊ฐ์ ์ฃผ์์ ์ฌ์ฉํ์ธ์. ๋ฒํธ๋ ์ด์ ๋ฒํธ๋ฅผ ๋ปํฉ๋๋ค. -
ํญ์ ์ฃผ์์ด ์ฝ๋ ๋ณ๊ฒฝ์ ๊ณผ ๊ด๋ จ์ด ์๋๋ก ์ ์งํ์ธ์. ์ฃผ์์ฒ๋ฆฌ๋ ์ฝ๋ ๋ธ๋ก์ ์ ๊ฑฐํ์ธ์.
์ด์ :
๋น์ ์ ์ฝ๋๋ ์ต๋ํ ์ฝ๊ธฐ ์ข๊ฒ ๋ง๋์ธ์. ์ง์ค์ ํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ ๋ฌด์์ด๋ ์ง์์ผํฉ๋๋ค. ๋ง์ฝ ํจ์๋ฅผ ๋ฆฌํฉํ ๋งํ๋ค๋ฉด, ์์ ์ฝ๋๋ฅผ ์ฃผ์์ฒ๋ฆฌํ์ง ๋ง๊ณ ์ ๊ฑฐํ์ธ์.
-
๋ถ์ ์ ํ๊ฑฐ๋ ์๊ธฐ๋ ์ฃผ์, ๋ก๊ทธ, ๋ค์ด๋ฐ์ ํผํ์ธ์.
์ด์ :
๋น๋ ํ๋ก์ธ์ค์์ ๊ทธ๊ฒ๋ค์ ์ ๊ฑฐํ ์๋ ์์ง๋ง, ๋๋๋ก ๋น์ ์ ์์ค ์ฝ๋๊ฐ ๋ค๋ฅธ ํ์ฌ/ํด๋ผ์ด์ธํธ์๊ฒ ๋์ด๊ฐ์ ๊ณค๋ํ ์ํฉ์ด ๋ ์๋ ์์ต๋๋ค.
-
์๋ฏธ์๊ฒ ๊ตฌ๋ณ์ด ๋๋๋ก ๊ฒ์์ด ์๋๋ ์ด๋ฆ์ ์ง๊ณ ์ค์๋ง์ ํผํ์ธ์. ํจ์์ ๊ฒฝ์ฐ, ๊ธธ๊ณ ์ค๋ช ์ ์ธ ์ด๋ฆ์ผ๋ก ์ง์ผ์ธ์. ํจ์์ ์ด๋ฆ์ ๋์ฌ์ด๊ฑฐ๋ ๋์ฌ๊ตฌ์ฌ์ผ ํ๋ฉฐ, ์๋๋ฅผ ์ ๋ฌํด์ผํฉ๋๋ค.
์ด์ :
์์ค์ฝ๋๋ฅผ ๋ ์์ฐ์ค๋ฝ๊ณ ๊ฐ๋ ์ฑ ์ข๊ฒ ๋ง๋ญ๋๋ค.
-
ํจ์๋ฅผ ๋ด๋ฆผ์ฐจ ์์ผ๋ก ์ ๋ ฌํด๋์ธ์. ๊ณ ๋ ๋ฒจ์ ํจ์๋ ์ต์๋จ์ ์์นํด์ผ ํ๋ฉฐ ์ ๋ ๋ฒจ์ ํจ์๋ ์๋์ ์์นํด์ผ ํฉ๋๋ค.
์ด์ :
์์ค์ฝ๋๋ฅผ ๋ ์์ฐ์ค๋ฝ๊ณ ๊ฐ๋ ์ฑ ์ข๊ฒ ๋ง๋ญ๋๋ค.
-
์๋ก ๋ค๋ฅธ ์๋ํฐ๋ค ์ฌ์ด์์๋ ์ผ๊ด์ ์ธ ์ฝ๋ฉ ์คํ์ผ์ ์ ์ํ๊ณ ์ ์งํ๋๋ก ๋๋ .editorconfig ํ์ผ์ ์ฌ์ฉํ์ธ์.
์ด์ :
EditorConfig ํ๋ก์ ํธ๋ ์ฝ๋ฉ ์คํ์ผ์ ์ ์ํ๋ ํ์ผ ํฌ๋งท๊ณผ, ์๋ํฐ๊ฐ ํ์ผ ํฌ๋งท์ ์ฝ์ ์ ์๋๋ก ๋์์ฃผ๊ณ ์ ์ํ ์คํ์ผ์ ๊ณ ์ํ๋ ํ ์คํธ ์๋ํฐ ํ๋ฌ๊ทธ์ธ๋ค์ ๋ชจ์์ผ๋ก ์ ์๋ฉ๋๋ค. EditorConfig ํ์ผ์ ๊ฐ๋ ์ฑ์ด ์ข๊ณ ๋ฒ์ ์ปจํธ๋กค ์์คํ ๊ณผ๋ ์ ๋์ํฉ๋๋ค.
-
์ฝ๋ ์คํ์ผ ์๋ฌ๋ฅผ ํ์ํด์ฃผ๋ ์๋ํฐ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ ESLint ์ค์ ๊ณผ ํจ๊ป eslint-plugin-prettier์eslint-config-prettier๋ฅผ ์ฌ์ฉํ์ธ์. ๋ ์ฝ๊ธฐ
-
Git hook์ ๊ณ ๋ คํด๋ณด์ธ์.
์ด์ :
Git hook์ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ด์ฌ๋ฆฝ๋๋ค. ๋น๋๋ฅผ ๊นจํธ๋ฆด ๊ฑฑ์ ์์ด ์คํ ์ด์ง์ด๋ ํ๋ก๋์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋ค๊ณ ์ปค๋ฐ, ํธ์๋ฅผ ํ ์ ์์ต๋๋ค. ๋ ์ฝ๊ธฐ
-
precommit hook๊ณผ ํจ๊ป Prettier๋ฅผ ์ฌ์ฉํ์ธ์.
์ด์ :
prettier
์์ฒด๋ ๋งค์ฐ ๊ฐ๋ ฅํ์ง๋ง, ๋งค๋ฒ ์ฝ๋๋ฅผ ํฌ๋งทํ ํ ๋๋ง๋ค npm ํ์คํฌ๋ก ์คํํ๋ ๊ฑด ๋ณ๋ก ์์ฐ์ ์ด์ง ์์ต๋๋ค. ์ด ๋ถ๋ถ์์๋lint-staged
๋husky
๊ฐ ํธ๋ฆฌํฉ๋๋ค. ์ค์ ํ๋ ๋ฐฉ๋ฒ์lint-staged
(์ฌ๊ธฐ)๋husky
(์ฌ๊ธฐ)์์ ๋ ์์๋ณด์ธ์.
-
ํ๋ก๋์ ์์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์ ๋ก๊น ์ ํผํ์ธ์.
์ด์ :
์๋ง ๋น๋ ํ๋ก์ธ์ค๊ฐ ๋ก๊น ํจ์๋ฅผ ์ง์๋ฒ๋ฆฌ๊ฒ ์ง๋ง, ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฝ๋ ์คํ์ผ ์ฒดํฌ๋ฅผ ํตํด
console.log
๊ฐ ์์ผ๋ฉด ๊ฒฝ๊ณ ํ๋๋ก ๋ง๋์ธ์. -
ํ๋ก๋์ ์์ ๊ฐ๋ ์ฑ ์ข์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ์ธ์. ํ๋ก๋์ ๋ชจ๋์์ winston ์ด๋ node-bunyan ๊ฐ์ ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ด์์ ์ ๋๋ค.
์ด์ :
์ด๋ ๊ฒํ๋ฉด ๋ก๊ทธ ์์, ํ์์คํฌํ, ๋งค์ผ ๋ฐ๋ณต๋๋ ๋ก๊ทธ ํ์ผ ์ถ๋ ฅ ๋ฑ์ ์์ ๋๋ถ์ ํธ๋ฌ๋ธ ์ํ ์ด ๋ ๊ณ ํต์ค๋ฝ์ต๋๋ค. ๋ ์ฝ๊ธฐ
์ด์ :
์ฐ๋ฆฌ๊ฐ RESTful ์ธํฐํ์ด์ค๋ฅผ ๋ช ํํ๊ฒ ๊ตฌ์ฑํด์ ๊ฐ๋ฐํ๋๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ํ ๋ฉค๋ฒ๋ ๊ณ ๊ฐ๋ค์ด ๊ฐํธํ๊ณ ์ผ๊ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด์ :
์ผ๊ด์ฑ๊ณผ ๋จ์ํจ์ ๋ถ์กฑ์ ํตํฉ ๋ฐ ์ ์ง๋ณด์ ๋น์ฉ์ ํฌ๊ฒ ์์น์ํฌ ์๋ ์์ต๋๋ค. ์ด๊ฒ์ด
API ์ค๊ณ
๊ฐ ์ด ๋ฌธ์์ ํฌํจ๋์ด์๋ ์ด์ ์ ๋๋ค.
-
์ฐ๋ฆฌ๋ ๋๋ถ๋ถ ๋ฆฌ์์ค ์งํฅ(resource-oriented) ์ค๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค. ๋ฆฌ์์ค ์งํฅ ์ค๊ณ๋ ์ธ ๊ฐ์ ํฐ ์์(๋ฆฌ์์ค, ์ฝ๋ ์ , URL)๋ฅผ ๊ฐ์ง๋๋ค.
- ๋ฆฌ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ , ์ค์ฒฉ๋๋ฉฐ, ๋ฆฌ์์ค๋ฅผ ์กฐ์ํ ์ ์๋ ๋ฉ์๋๊ฐ ์กด์ฌํฉ๋๋ค.
- ๋ฆฌ์์ค์ ๊ทธ๋ฃน์ ์ฝ๋ ์ ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- URL์ ๋ฆฌ์์ค ํน์ ์ฝ๋ ์ ์ ์จ๋ผ์ธ ์์น๋ฅผ ์๋ณํฉ๋๋ค.
์ด์ :
์ด๊ฒ์ ๊ฐ๋ฐ์๋ค(๋น์ ์ ์ฃผ API ์ฌ์ฉ์๋ค์ ํฌํจ)์๊ฒ ๋งค์ฐ ์ ์๋ ค์ ธ์๋ ์ค๊ณ์ ๋๋ค. ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ ํธ์์ฑ์ ์ ์ธํ๋๋ผ๋, ๋ฒ์ฉ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปค๋ฅํฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ฌ์ง์ด API๊ฐ ๋ญ์ง ๋ชจ๋ฅด๋๋ผ๋ ๋ง์ด์ฃ .
-
URL์๋ ์ผ๋ฐฅ ์ผ์ด์ค(kebab-case)๋ฅผ ์ฌ์ฉํ์ธ์.
-
์ฟผ๋ฆฌ ์คํธ๋ง์ด๋ ๋ฆฌ์์ค ํ๋์ ํ๋ผ๋ฏธํฐ๋ก๋ ์นด๋ฉ ์ผ์ด์ค(camelCase)๋ฅผ ์ฌ์ฉํ์ธ์.
-
URL ๋ด๋ถ ๋ฆฌ์์ค์ ์ด๋ฆ์ ๋ณต์์ ์ผ๋ฐฅ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ์ธ์.
-
์ฝ๋ ์ ์ ๊ฐ๋ฆฌํค๋ URL์ ๋ค์ด๋ฐ์๋ ํญ์ ๋ณต์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ์ธ์. ์:
/users
์ด์ :
๊ธฐ๋ณธ์ ์ผ๋ก, ๋ ์ฝ๊ธฐ ์ฝ๊ณ URL์ ์ผ๊ด์ฑ์๊ฒ ์ ์ง์ํฌ ์ ์์ต๋๋ค. ๋ ์ฝ๊ธฐ
-
์์ค ์ฝ๋์์๋ ๋ณต์ํ์ ๋ณ์๋ ํ๋กํผํฐ๋ก ๋ณํํ ๋
List
์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ฉํ์ธ์.์ด์ :
๋ณต์ํ์ URL์๋ ์ข์ง๋ง ์์ค ์ฝ๋์์๋ ์๋ณํ๊ธฐ๊ฐ ์ด๋ ค์ ์๋ฌ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
-
ํญ์ ์ฝ๋ ์ ์์ ์์ํด ์๋ณ์์์ ๋๋๋ ๋จ์ผ ์ปจ์ ์ ์ฌ์ฉํ์ธ์.
/students/245743 /airports/kjfk
-
์ด๋ฐ URL์ ํผํ์ธ์.
GET /blogs/:blogId/posts/:postId/summary
์ด์ :
์ด๊ฑด ๋ฆฌ์์ค๊ฐ ์๋๋ผ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ๋๋ค. ํ๋กํผํฐ๋ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ ์๋ต(Response)์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
-
๋ฆฌ์์ค URL์์ ๋์ฌ๋ ์ ๊ฑฐํ์ธ์.
์ด์ :
๊ฐ๊ฐ์ ๋ฆฌ์์ค ์์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฒญ๋ ์์ URL ๋ฆฌ์คํธ๊ฐ ์๊ธฐ๋ ๊ฑด ๊ธ๋ฐฉ์ ๋๋ค. ๋ํ ํจํด์ ์ผ๊ด์ฑ์ด ์์ด ๊ฐ๋ฐ์๋ค์ด ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๊ฒ๋ค๊ฐ ์ฐ๋ฆฌ๋ ๋์ฌ๋ฅผ ์ข ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ ๊ฒ๋๋ค.
-
๋ฆฌ์์ค๊ฐ ์๋ ๊ฒ๋ค์ ์ํด ๋์ฌ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด ๊ฒฝ์ฐ, API๋ ์ด๋ ํ ๋ฆฌ์์ค๋ ๋๋ ค์ฃผ์ง ์์ต๋๋ค. ๋์ , ํน์ ๋์(Operation)์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๊ฒ์ CRUD(create, retrieve, update and delete)๊ฐ ์๋๋๋ค!
/translate?text=Hallo
์ด์ :
CRUD ์ฉ๋๋ก ์ฐ๋ฆฌ๋
๋ฆฌ์์ค
ํน์์ฝ๋ ์
URL์ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋งํ๊ณ ์๋ ๋์ฌ๋ ์ค์ ๋ก๋์ปจํธ๋กค๋ฌ
์ ๋๋ค. ๋ณดํต์ ์ด๋ฐ ๊ฑธ ๊ฐ๋ฐํ ์ผ์ด ๋ณ๋ก ์์ต๋๋ค. ๋ ์ฝ๊ธฐ -
์์ฒญ ๋ณธ๋ฌธ(Request body)๊ณผ ์๋ต ํ์ ์ JSON์ด๋ฉฐ, ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด์
JSON
ํ๋กํผํฐ ์ด๋ฆ์ผ๋กcamelCase
๋ฅผ ์ฌ์ฉํ์ธ์.์ด์ :
์ด๊ฑด JavaScript ํ๋ก์ ํธ ๊ฐ์ด๋๋ผ์ธ์ ๋๋ค. ๋๋ฌธ์, JSON์ ์์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฟ๋ง ์๋๋ผ JSON์ ํ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ JavaScript์ผ๊ฑฐ๋ผ ๊ฐ์ ํฉ๋๋ค.
-
๋ฆฌ์์ค๋ ๊ฐ์ฒด ์ธ์คํด์ค ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ฝ๋์ ๋น์ทํ ๋จ์ผ ๊ฐ๋ ์ด์ง๋ง, ๋ฆฌ์์ค ์ด๋ฆ์ ํ ์ด๋ธ ๋ช ์ ์ฌ์ฉํ๊ฑฐ๋ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ์ปฌ๋ผ ๋ช ์ ์ฌ์ฉํ์ง ๋ง์ธ์.
์ด์ :
API์ ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ๊ณต๊ฐํ๋ ๊ฒ์ด ์๋๋ผ ๋ฆฌ์์ค๋ฅผ ๋ ธ์ถํ๋ ๊ฒ์ ๋๋ค.
-
์ฌ๊ฐ์กฐํฉ๋๋ค. ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ฐํ ๋ URL์๋ ๋ช ์ฌ๋ง ์ฌ์ฉํ๊ณ ๊ธฐ๋ฅ์ ์ธ ์ธก๋ฉด์ ์ค๋ช ํ๋ ค๊ณ ํ์ง๋ง์ธ์.
์ด์ :
๋ฆฌ์์ค URL์๋ ์ค์ง ๋ช ์ฌ๋ง ์ฌ์ฉํ๊ณ ,
/addNewUser
๋/updateUser
๊ฐ์ ๋์ ์ ํผํ์ธ์. ๋ํ ๋ฆฌ์์ค ๋์์ ํ๋ผ๋ฏธํฐ๋ก ๋ณด๋ด์ง๋ง์ธ์. -
HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํด CRUD์ ๊ธฐ๋ฅ์ ์ธก๋ฉด์ ๋ํ๋ด์ธ์.
๋ฐฉ๋ฒ:
GET
: ๋ฆฌ์์ค์ ํํ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.POST
: ์๋ก์ด ๋ฆฌ์์ค๋ ์๋ธ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.PUT
: ์กด์ฌํ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด์ ์ฌ์ฉํฉ๋๋ค.PATCH
: ์กด์ฌํ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. ์ค์ง ์ ๊ณต๋ ํ๋๋ง ์ ๋ฐ์ดํธํ๊ณ ๋ค๋ฅธ ๊ฒ๋ค์ ๊ทธ๋๋ก ๋๋ก๋๋ค.DELETE
: ์กด์ฌํ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉํฉ๋๋ค. -
์ค์ฒฉ๋ ๋ฆฌ์์ค๋ URL์์์ ๊ด๊ณ๋ฅผ ์ด์ฉํ์ธ์, ์๋ฅผ ๋ค์ด, ์ง์๊ณผ ํ์ฌ๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด
id
๋ฅผ ์ฌ์ฉํ์ธ์.์ด์ :
์ด๊ฒ์ ๋ฆฌ์์ค๋ฅผ ํ์ ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ ์์ฐ์ค๋ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฐฉ๋ฒ:
GET /schools/2/students
, 2๋ฒ ํ๊ต์ ๋ชจ๋ ํ์๋ค์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.GET /schools/2/students/31
, 2๋ฒ ํ๊ต์ ์ํ 31๋ฒ ํ์์ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.DELETE /schools/2/students/31
, 2๋ฒ ํ๊ต์ ์ํ 31๋ฒ ํ์์ ์ญ์ ํฉ๋๋ค.PUT /schools/2/students/31
, 31๋ฒ ํ์์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ ํฉ๋๋ค. PUT์ ์ฝ๋ ์ ๋ง๊ณ ๋ฆฌ์์ค URL์๋ง ์ฌ์ฉํ์ธ์.POST /schools
, ์๋ก์ด ํ๊ต๋ฅผ ๋ง๋ค๊ณ ๋ง๋ค์ด์ง ํ๊ต์ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค. ์ฝ๋ ์ URL์ POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ธ์. -
๋ฒ์ ์ ์ํด์
v
์ ๋์ด์ ํจ๊ป ๊ฐ๋จํ ์์(ordinal number)๋ฅผ ์ฌ์ฉํ์ธ์(v1, v2). ๊ฐ์ฅ ๋์ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋๋ก URL์ ๊ฐ์ฅ ์ผ์ชฝ์ ์์น์ํค์ธ์.http://api.domain.com/v1/schools/3/students
์ด์ :
๋ค๋ฅธ ์๋ ํํฐ๋ฅผ ์ํด API๋ฅผ ๊ณต๊ฐํ ๊ฒฝ์ฐ, Breaking change๋ฅผ ํฌํจํ๋ API ์ ๊ทธ๋ ์ด๋๋ ๊ทธ API๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๋ํธ๋ ์๋น์ค ๋ํ ๊นจํธ๋ฆด ์ ์์ต๋๋ค. URL์ ๋ฒ์ ์ ์ฌ์ฉํด์ ๊ทธ๋ฐ ์ฌ๊ฑด์ ์๋ฐฉํ์ธ์. ๋ ์ฝ๊ธฐ
-
์๋ต ๋ฉ์์ง๋ ์ค์ค๋ก ์ค๋ช ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ข์ ์๋ฌ ๋ฉ์์ง ์๋ต์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฒผ์ต๋๋ค.
{ "code": 1234, "message" : "๋ญ๊ฐ ์ ์ข์ ์ผ ๋ฐ์", "description" : "์ธ๋ถ ์ ๋ณด" }
ํน์ Validation ์๋ฌ์ ๊ฒฝ์ฐ,
{ "code" : 2314, "message" : "Validation ์คํจ", "errors" : [ { "code" : 1233, "field" : "email", "message" : "์ ํจํ์ง ์์ ์ด๋ฉ์ผ" }, { "code" : 1234, "field" : "password", "message" : "๋น๋ฐ๋ฒํธ๊ฐ ์ ๊ณต๋์ง ์์" } ] }
์ด์ :
๊ฐ๋ฐ์๋ค์ด ๋น์ ์ API๋ฅผ ์ฌ์ฉํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ค์, ํธ๋ฌ๋ธ ์ํ ์ ํ ๋๋, ์ด์๋ฅผ ํด๊ฒฐํ๋ ์ค์ํ ์ํฉ์์ ๊ทธ๋ค์ ์ ์ค๊ณ๋ ์๋ฌ์ ์์กดํฉ๋๋ค.
์ฃผ์: ๋ณด์์์ ์์ธ ๋ฉ์์ง๋ ๊ฐ๋ฅํ ์ผ๋ฐ์ ์ผ๋ก ๋ง๋์ธ์. ์๋ฅผ ๋ค์ด, 'ํ๋ฆฐ ๋น๋ฐ๋ฒํธ' ๋์ ์ 'ํ๋ฆฐ ์ ์ ๋ช ํน์ ๋น๋ฐ๋ฒํธ'๋ผ๋ ๋ต๋ณ์ผ๋ก ๋์ ํ์ฌ ์ ์ ๋ช ์ ์ค์ ๋ก ๋ง๊ณ ๋น๋ฐ๋ฒํธ๋ง ์๋ชป๋์๋ค๋ ์ฌ์ค์ ์ ์ ์๊ฒ ๋ฌด์์์ ์ผ๋ก ์๋ฆฌ์ง ์์ ์ ์์ต๋๋ค.
-
๋ชจ๋ ๊ฒ์ด ์ ๋์ํ๋ค, ํด๋ผ์ด์ธํธ ์ฑ์ด ๋ญ๊ฐ ์๋ชปํ๋ค, ํน์ API๊ฐ ๋ญ๊ฐ ์๋ชปํ๋ค ์ฌ๋ถ๋ฅผ ํํํ๊ธฐ ์ํด, ์๋ต์ผ๋ก ์๋์ 8๊ฐ์ง ์ํ ์ฝ๋๋ง ์ฌ์ฉํ์ธ์.
๋ชฉ๋ก:
200 OK
๋GET
,PUT
ํน์POST
์์ฒญ์ด ์ฑ๊ณตํ์์ ํํํฉ๋๋ค.201 Created
๋ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋์์ ๋ ๋ณด๋ ๋๋ค.POST
๋ฉ์๋๋ฅผ ์ด์ฉํด ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด201
์ํ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค.304 Not Modified
์๋ต์ ์์ ์๊ฐ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ๋ ์ ๋ณด ๊ตํ์ ์ต์ํํ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค.400 Bad Request
์๋ต์ ์์ฒญ์ด ์ฒ๋ฆฌ๋์ง ์์์ ๋, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ ๊ฒ ๋ฌด์์ธ์ง ์ ์ ์์ ๋ ์ฌ์ฉํฉ๋๋ค.401 Unauthorized
๋ ์์ฒญ์ ์ ํจํ ์๊ฒฉ์ฆ๋ช ์ด ์์ ๋, ํ์ํ ์๊ฒฉ์ฆ๋ช ์ผ๋ก ๋ค์ ์์ฒญํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.403 Forbidden
๋ ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ์ผ๋, ์น์ธ์ ๊ฑฐ์ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.404 Not Found
๋ ์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์์ ๋ํ๋ ๋๋ค.500 Internal Server Error
๋ ์์ฒญ์ด ์ ํจํ๋, ์๋ฒ๊ฐ ์์์น ๋ชปํ ์ํฉ์ผ๋ก ์ธํด ์์ฒญ์ ์คํํ์ง ๋ชปํ์์ ๋ํ๋ ๋๋ค.์ด์ :
๋๋ถ๋ถ์ API ๊ณต๊ธ์๋ค์ HTTP ์ํ ์ฝ๋์ ์์ ๋ถ๋ถ์งํฉ๋ง ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ตฌ๊ธ์ GData API๋ ๋จ 10๊ฐ์ ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ , ๋ทํ๋ฆญ์ค๋ 9๊ฐ, Digg๋ ๊ฒจ์ฐ 8๊ฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฌผ๋ก , ์ด๋ฌํ ์๋ต๋ค์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋ณธ๋ฌธ์ ํฌํจํฉ๋๋ค. HTTP ์ํ ์ฝ๋๋ 70๊ฐ ์ด์ ์กด์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋, ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ 70๊ฐ ๋ชจ๋๋ฅผ ๊ธฐ์ตํ์ง๋ ๋ชปํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ง์ฝ ๋น์ ์ด ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ด์ง ์๋ ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ค์ ๊ฐ๋ฐ์ ํ๋ค๋ง๊ณ ์ํคํผ๋์๋ก ๊ฐ์ ๋น์ ์ด ๋ญ ๋งํ๋ ค๊ณ ํ๋์ง ์์๋ณผ ๊ฒ์ ๋๋ค. ๋ ์ฝ๊ธฐ
-
์๋ต์ ๋ฆฌ์์ค์ ์ซ์๋ฅผ ์ ๊ณตํ์ธ์.
-
limit
๊ณผoffset
ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฉํ์ธ์. -
๋ ธ์ถ๋๋ ๋ฆฌ์์ค ๋ฐ์ดํฐ์ ์๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. API ์ฌ์ฉ์๋ ํญ์ ๋ฆฌ์์ค์ ๋ชจ๋ ํ๋๋ฅผ ํ์๋ก ํ์ง ์์ต๋๋ค. ์ผํ๋ก ๊ตฌ๋ถ๋ ํ๋ ๋ชฉ๋ก์ ํฌํจํ๋ ํ๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ธ์.
GET /student?fields=id,name,age,class
-
ํ์ด์ง๋ค์ด์ , ํํฐ๋ง ๋ฐ ์ ๋ ฌ์ ์ฒ์๋ถํฐ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํด ์ง์๋ ํ์๋ ์์ต๋๋ค. ํํฐ๋ง๊ณผ ์ ๋ ฌ์ ์ง์ํ๋ ๋ฆฌ์์ค์ ๋ํด ๋ฌธ์๋ฅผ ์์ฑํ์ธ์.
๋ค์๊ณผ ๊ฐ์ด, ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ๋ชจ๋ฒ์ฌ๋ก๊ฐ ์กด์ฌํฉ๋๋ค.
-
๋ณด์ ์ฐ๊ฒฐ(HTTPS) ์์ด "Basic" ์ธ์ฆ์ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ธ์ฆ ํ ํฐ์ URL๋ก ์ ๋ฌ(
GET /users/123?token=asdf....
)๋์ด์๋ ์๋ฉ๋๋ค.์ด์ :
ํ ํฐ ํน์ ์ ์ ID ๋ฐ ๋น๋ฐ๋ฒํธ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ช ํํ ํ ์คํธ๋ก ์ ๋ฌ๋ฉ๋๋ค. (Base64 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ง๋ง, Base64๋ ๋์ฝ๋ฉ์ด ๊ฐ๋ฅํ์ฃ .) Basic ์ธ์ฆ ๋ฐฉ์์ ์์ ํ์ง ์์ต๋๋ค. ๋ ์ฝ๊ธฐ
-
ํ ํฐ์ ๋ค์์ฒ๋ผ ๋ชจ๋ ์์ฒญ์ ๋ํด Authorization ํค๋๋ฅผ ์ฌ์ฉํด์ ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค.
Authorization: Bearer xxxxxx, Extra yyyyy
-
์ธ์ฆ ์ฝ๋(Authorization Code)๋ ์ ํจ๊ธฐ๊ฐ์ด ์งง์์ผ ํฉ๋๋ค.
-
์์ ํ์ง ์์ ๋ฐ์ดํฐ ๊ตํ์ ํผํ๊ธฐ ์ํด HTTP ์์ฒญ์ ์๋ตํ์ง ์์์ผ๋ก์จ TLS ์์ฒญ์ด ์๋ ์์ฒญ์ ๊ฑฐ๋ถํ์ธ์. HTTP ์์ฒญ์
403 Forbidden
์ผ๋ก ์๋ตํ์ธ์. -
์์ฒญ ์ ํ์ ๊ณ ๋ คํด๋ณด์ธ์.
์ด์ :
API๋ฅผ ๋ด์ด ์๊ฐ ๋น ๋ช ์ฒ ๊ฑด์ ์์ฒญ์ ๋ณด๋ด๋ ์ํ์์ ๋ณดํธํ์ธ์. ๋น ๋ฅธ ์๋๋ก ์์ฒญ ์ ํ์ ๊ตฌํํ๋ ๊ฑธ ๊ณ ๋ คํด์ผํฉ๋๋ค.
-
HTTP ํค๋๋ฅผ ์ ์ ํ๊ฒ ์ค์ ํ๋ฉด, ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ์ ์งํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ ์ฝ๊ธฐ
-
API๋ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ค ํ์์ผ๋ก ๋ณํํ๊ฑฐ๋ ๊ฑฐ๋ถํด์ผ ํฉ๋๋ค. ์๋ชป๋๊ฑฐ๋ ๋น ์ง ๋ฐ์ดํฐ์ ๋ํ ์ธ๋ถ ์ ๋ณด์ ํจ๊ป 400 Bad Request๋ฅผ ๋๋ ค์ฃผ์ธ์.
-
REST API๋ก ๊ตํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ API์ ์ํด ์ ํจํ์ง ๊ฒ์ฌ๋์ด์ผ ํฉ๋๋ค.
-
JSON์ ์ง๋ ฌํ(Serailize)ํ์ธ์.
์ด์ :
JSON ์ธ์ฝ๋์ ์ค์ํ ๊ด์ฌ์ฌ๋ ๋ธ๋ผ์ฐ์ ํน์ Node.js ์๋ฒ์์ ์์์ JavaScript ์๊ฒฉ ์ฝ๋์ ์คํ์ ๋ง๋ ๊ฒ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๋ฐ์ดํฐ๋ฅผ ์คํํ ์ ์๋๋ก ์ ์ ํ JSON ์ธ์ฝ๋๋ฅผ ์ฌ์ฉํด์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ฒ ์ธ์ฝ๋ฉํ๋ ๊ฒ์ ์ค์ํฉ๋๋ค.
-
Content-Type์ ๊ฒ์ฆํ๊ณ , Content-Type ํค๋๋ก ๊ฑฐ์
application/*.json
์ ์ฌ์ฉํ์ธ์.์ด์ :
์๋ฅผ ๋ค๋จธ,
application/x-www-form-urlencoded
MIME ํ์ ์ ๋ฐ์๋ค์ด๊ฒ ๋๋ฉด ๊ณต๊ฒฉ์๋ค์ด ํผ์ ๋ง๋ค๊ณ ๊ฐ๋จํ POST ์์ฒญ์ ์ผ์ผํค๋ ๊ฒ์ ํ์ฉํ๊ฒ ๋ฉ๋๋ค. ์๋ฒ๋ ์ ๋ Content-Type์ ๊ฐ์ ํด์๋ ์๋ฉ๋๋ค. Content-Type ํค๋์ ๋ถ์ฌ ํน์, ์์์น ๋ชปํ Content-Type ํค๋๋ ์๋ฒ์์4XX
์๋ต์ผ๋ก ๊ฑฐ๋ถํด์ผ ํฉ๋๋ค. -
API ๋ณด์ ์ฒดํฌ๋ฆฌ์คํธ ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณด์ธ์. ๋ ์ฝ๊ธฐ
- README.md ํ
ํ๋ฆฟ์
API ์ฐธ์กฐ
์น์ ์ ์ฑ์ฐ์ธ์. - ์ํ ์ฝ๋๋ฅผ ์ฒจ๋ถํด์ API ์ธ์ฆ ๋ฐฉ๋ฒ์ ๊ธฐ์ ํ์ธ์.
- ์์ฒญ ํ์ (HTTP METHOD)์ ํฌํจํด URL(๊ฒฝ๋ก๋ง ํฌํจ, ๋ฃจํธ URL ์ ์ธ) ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ์ธ์.
๊ฐ๊ฐ์ ๋์ (Endpoint)์ ๋ํด์ ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
-
URL ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด URL ์น์ ์ ์ธ๊ธ๋ ์ด๋ฆ์ ๋ฐ๋ผ URL ํ๋ผ๋ฏธํฐ๋ฅผ ๋ช ์ํฉ๋๋ค.
Required: id=[integer] Optional: photo_id=[alphanumeric]
-
์์ฒญ ํ์ ์ด POST์ธ ๊ฒฝ์ฐ ๋์ํ๋ ์์ ๋ฅผ ์ ๊ณตํ์ธ์. URL ํ๋ผ๋ฏธํฐ ๊ท์น๋ ์ฌ๊ธฐ์ ์ ์ฉ๋ฉ๋๋ค. ํ์์ ์ต์ ์น์ ์ ๊ตฌ๋ถํ์ธ์.
-
์๋ต ์ฑ๊ณต: ์ํ ์ฝ๋๋ ์ด๋ป๊ฒ ๋์ด์ผ ํ๋ฉฐ, ๋๋ ค์ฃผ๋ ๋ฐ์ดํฐ๋ ์ด๋ค ๊ฑด๊ฐ์? ์๋์ฒ๋ผ ํ๋ฉด ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ์์์ผํ ํ์๊ฐ ์์ ๋ ์ ์ฉํฉ๋๋ค.
Code: 200 Content: { id : 12 }
-
์๋ต ์๋ฌ: ๋๋ถ๋ถ์ ๋์ ์ ๋ํ ์์ฒญ์ ๋น์ธ์ฆ ์ ๊ทผ๋ถํฐ ์๋ชป๋ ํ๋ผ๋ฏธํฐ๊น์ง, ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์คํจํ ์ ์์ต๋๋ค. ์ด๋ฐ ์๋ฌ๋ค์ ๋ช ์๋์ด์ผ ํฉ๋๋ค. ๋๋ฌด ๋ฐ๋ณต์ ์ผ ์๋ ์์ง๋ง, ๊ฐ์ ์ ํ์ง ์๊ฒ ํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด,
{ "code": 403, "message" : "์ธ์ฆ ์คํจ", "description" : "์ ํจํ์ง ์์ ์ ์ ๋ช ํน์ ๋น๋ฐ๋ฒํธ" }
-
API ์ค๊ณ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์. ์ข์ ๋ฌธ์ํ์ ๋์์ ์ฃผ๋ ๋ค์ํ ์คํ์์ค๊ฐ ์์ต๋๋ค. API Blueprint๋ Swagger ๊ฐ์ ๊ฒ๋ค ๋ง์ด์ฃ .
์ฌ์ฉ ๊ถํ์ด ์๋ ๋ฆฌ์์ค๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋๋ MIT, Apache ํน์ BSD ๋ผ์ด์ผ์ค๋ฅผ ์ฐพ์์ผํ๋ค๋ ๊ฑธ ๊ธฐ์ตํ์ธ์. ๋ํ ๋น์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํด์ผ ํ๋ค๋ฉด, ๋ผ์ด์ผ์ค ์ธ๋ถ์ ๋ณด๋ฅผ ์ ์ดํด๋ณด์ธ์. ์ ์๊ถ์ด ์๋ ์ด๋ฏธ์ง๋ ๋น๋์ค๋ ๋ฒ์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
Sources: RisingStack Engineering, Mozilla Developer Network, Heroku Dev Center, Airbnb/javascript, Atlassian Git tutorials, Apigee, Wishtack
Icons by icons8