ํ์ ํ๋ก์ ํธ๋ฅผ ํ๊ธฐ ์ํด์๋ Git์ ์ ์จ์ผํ๋ค.
ํ๋์ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ด ์์ ํ๋ฉด์ ์์ ์๊ฒ ์ฃผ์ด์ง ํํธ์ ๋ํ ์์ญ์ pull๊ณผ push ํ ๋ ๋ค๋ฅธ ํ์๊ณผ ๊ผฌ์ด์ง ์๋๋ก branch๋ฅผ ๋๋์ด pull request ํ๋ ๋ฑ๋ฑ..
ํ์ ๊ณผ์ ์ ์ฐ์ตํด๋ณด์
Required | Description |
---|---|
Git | We follow the GitHub Flow |
Node.js | 10.15.0 LTS |
Yarn | 1.12.3 or above |
Git : ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์์ค ์ฝ๋์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ์ค๊ณ๋ ๋๊ตฌ
GitHub : Git์ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณตํจ. ์ด์์ pull request๋ฅผ ์ค์ฌ์ผ๋ก ์๊ตฌ์ฌํญ์ ๊ด๋ฆฌ
Git ์ ์ฅ์ ์์ฑ
$ mkdir awesome-javascript
$ cd awesome-javascript
$ git init
GitHub ๊ณ์ ์ ๊ฐ์ ์ด๋ฆ์ ์ ์ฅ์๋ฅผ ์์ฑํ ํ, git remote
๋ช
๋ น์ด๋ฅผ ํตํด ์๊ฒฉ ์ ์ฅ์ ์ถ๊ฐ
$ git remote add origin 'Github ์ฃผ์'
์ด์๋ ์ ๋ฑ๋กํ๋๊ฑฐ์ฃ ?
์ฝ๋ ์์ฑํ๊ธฐ์ ์์, ์๊ตฌ์ฌํญ์ด๋ ํด๊ฒฐํ ๋ฌธ์ ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๋ ๊ฒ์ด ์ค์
GitHub์ ์ด์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ํ์ ํ๋ ๋๋ฃ์ ์ฝ๊ฒ ๊ณต์ ๊ฐ ๊ฐ๋ฅํจ
GitHub ์ ์ฅ์์ Issues ํญ์์ New issue๋ฅผ ํด๋ฆญ
ํด์ ์ด์๋ฅผ ์์ฑํ ์ ์์
์ด์์ pull request ์์ฒญ์ ์์ฑํ๋ ๊ธ์ ํ์์ ํ ํ๋ฆฟ์ผ๋ก ๊ด๋ฆฌํ ์ ์์
(ํ ํ๋ฆฟ์ ๋งํฌ๋ค์ด ํ์)
์จ๊ธด ํด๋์ธ .github ํด๋์์ ์ด์ ํ ํ๋ฆฟ๊ณผ pull request ํ ํ๋ฆฟ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
devops/github-templates ๋ธ๋์น์ ํ ํ๋ฆฟ ํ์ผ์ ์์ฑํ๊ณ github์ ํธ์ํ์
$ git checkout -b devops/github-templates
$ mkdir .github
$ touch .github/ISSUE_TEMPLATE.md # Create issue template
$ touch .github/PULL_REQUEST_TEMPLATE.md # Create pull request template
$ git add .
$ git commit -m ':memo: Add GitHub Templates'
$ git push -u origin devops/github-templates
์ค๋๋ javascript๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค.
์ด๋ git์ ํ์ฉํ ํ์ ํ๊ฒฝ๋ฟ๋ง ์๋๋ผ ์ฝ๋ ๊ฒ์ฆ, ํ ์คํธ, ๋น๋, ๋ฐฐํฌ ๋ฑ์ ๊ณผ์ ์์ ๋ง๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฐ๋ฐ ํ๊ฒฝ๋ ์ค์ ํด์ผ ํ๋ค.
์ด๋ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ด Node.js์ npm, yarn
Node.js์ npm : JavaScript๊ฐ ๊ฑฐ๋ํ ์คํ์์ค ์ํ๊ณ๋ฅผ ํ๋ณดํ๋ ๋ฐ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํจ
Node.js๋ Google์ด V8 ์์ง์ผ๋ก ๋ง๋ Javascript ๋ฐํ์ ํ๊ฒฝ์ผ๋ก ์ค๋๋ ์๋นํ ๋ง์ด ์ฐ์ด๋ ์ค!
npm์ Node.js๋ฅผ ์ค์นํ ๋ ํฌํจ๋๋๋ฐ, ํจํค์ง๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํ ์ ์๋๋ก ๋ค์ํ ๋ช ๋ น์ ์ ๊ณตํ๋ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
yarn์ ํ์ด์ค๋ถ์ด ๊ฐ๋ฐํ ํจํค์ง ๋งค๋์ ๋ก, ๊ท๋ชจ๊ฐ ์ปค์ง๋ ํ๋ก์ ํธ์์ npm์ ์ฌ์ฉํ๋ค๊ฐ ๋ณด์, ๋น๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ํจ
Node.js ์ค์น ํ, yarn์ npm ๋ช ๋ น์ด๋ฅผ ํตํด ์ ์ญ์ผ๋ก ์ค์นํ์
$ npm install yarn -g
yarn init
๋ช
๋ น์ด ์คํ
ํ๋ก์ ํธ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋ก์ด ํ๋ก์ ํธ๊ฐ ์์ฑ๋จ
pakage.json ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
{
"name": "awesome-javascript",
"version": "1.0.0",
"main": "index.js",
"repository": "https://github.com/kim6394/awesome-javascript.git",
"author": "gyuseok <gyuseok6394@gmail.com>",
"license": "MIT"
}
์ด ํ์ผ์ ํ๋ก์ ํธ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
์ด ํ์ผ์์ ๊ฐ์ฅ ์ค์ํ ์์ฑ์ dependencies
๋ก, ํ๋ก์ ํธ์ ํจํค์ง ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ์์ฑ์ด๋ค.
yarn์ cli ๋ช ๋ น์ด๋ก ํจํค์ง๋ฅผ ์ค์นํ๋ฉด package.json ํ์ผ์ dependencies ์์ฑ์ด ์๋์ผ๋ก ๋ณ๊ฒฝ๋จ
node-fetch ๋ชจ๋์ ์ค์นํด๋ณด์
$ yarn add node-fetch
pakage.json์์ ์๋์ ๊ฐ์ ๋ด์ฉ์ด ์ถ๊ฐ๋๋ค.
"dependencies": {
"node-fetch": "^2.6.0"
}
์ถ๊ฐ๋ก ์์ฑ๋ yarn.lock ํ์ผ์ ๋ญ๊ฐ์?
์ฑ์ ๊ฐ๋ฐํ๋ ๋์ค ํน์ ๋ฐฐํฌํ ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํจํค์ง๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ํ ํ์ ํ๋ ๋๋ฃ๋ค๋ง๋ค ๋ค๋ฅธ ๋ฒ์ ์ ํจํค์ง๊ฐ ์ค์น๋ ์๋ ์๋ค.
yarn์ ๋ชจ๋ ์์คํ
์์ ํจํค์ง ๋ฒ์ ์ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด yarn.lock
ํ์ผ์ ํ๋ก์ ํธ ์ต์์ ํด๋์ ์๋์ผ๋ก ์์ฑํจ.
(์ฌ์ฉ์๋ ์ด ํ์ผ์ ์ง์ ์์ ํ๋ฉด ์๋จ. ์ค๋ก์ง cli ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ๊ด๋ฆฌํด์ผํ๋ค!)
ํ์ฌ ํ๋ก์ ํธ๋ Git์ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ํด์ ํ์ ํ๋ ๋๋ฃ์ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
ํ๋ก์ ํธ์ ์์ฑ๋ pakage.json
๊ณผ yarn.lock
ํ์ผ๋ ์๊ฒฉ ์ ์ฅ์์์ ๊ด๋ฆฌํด์ผ ํ์
ํ๋ ๋๋ฃ๋ค๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ ์ ์ผ๋ก ์ด์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง
์๊ฒฉ ์ ์ฅ์์ ๊ณต์ ์, ๋ชจ๋์ด ์ค์น๋๋ node-_modules
ํด๋๋ ์ ์ธ์์ผ์ผ ํ๋ค. ํด๋์ ์ฉ๋๋ ํฌ๊ณ , ์ด์ฐจํผ yarn.lock ํ์ผ์ ํตํด ๋๊ธฐํ ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก git ์ ์ฅ์์์ ๊ด๋ฆฌํ ํ์๊ฐ ์์
๋ฐ๋ผ์, ํด๋น ํด๋๋ฅผ .gitignore ํ์ผ์ ์ถ๊ฐํด git ๊ด๋ฆฌ ๋์์์ ์ ์ธ์ํค์
$ echo "node_modules/" > .gitignore
์ด๋ฒ์ ์ด์ ํด๊ฒฐ๊ณผ ๊ด๋ จ๋ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ , ํ๋ก์ ํธ๋ฅผ github์ ํธ์ํด๋ณด์
$ git add .
$ git checkout -b issue/1
$ git commit -m 'Create project with Yarn'
$ git push -u origin issue/1
ํธ์๊ฐ ์๋ ค๋๋ฉด, GitHub ์ ์ฅ์์ pull request
๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
pull request๋ ์์ฑํ ์ฝ๋๋ฅผ master ๋ธ๋์น์ ๋ณํฉํ๊ธฐ ์ํด ํ์ ํ๋ ๋๋ฃ๋ค์๊ฒ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์์ฒญํ๋ ์์ ์
Pull requests ํญ์์ New pull request ๋ฒํผ์ ํด๋ฆญํด pull request๋ฅผ ์์ฑํ ์ ์๋ค
๋ฆฌ๋ทฐ๋ฅผ ํ๋ ์ฌ๋์๊ฒ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํจ
์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ผ๋ฉด, ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ฌํ ์๋๋ฆฌ์ค์ ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์.
๊ฐ๋ฐ ํ๊ฒฝ์ด ๋ณ๊ฒฝ๋์๋ค๋ฉด ๋ณ๊ฒฝ ๋ด์ญ๋ ๋ฐ๋์ ํฌํจํ์
์ค์ ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด, ํ์ฉ๋๋ Javascript ๊ตฌํ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๊ณ ์ด๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ ํ๊ฒฝ์ด ํ์ํ๊ฒ ๋๋ค.
Javascript ํ ์คํธ ๋๊ตฌ๋ก๋ jest๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
GitHub์ REST API v3์ ํ์ฉํด ํน์ GitHub ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ณ , ํ ์คํธ ํ๊ฒฝ ์ค์ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์
๊ตฌํ ์ฝ๋ ์์ฑ ์ด์ , ๊ตฌํํ๋ ค๋ ๊ธฐ๋ฅ์ ์๋๋ฅผ ํ ์คํธ ์ฝ๋๋ก ํํํด๋ณด์
ํ
์คํธ ์ฝ๋ ์ ์ฅ ํด๋ : __test__
๊ตฌํ ์ฝ๋ ์ ์ฅ ํด๋ : lib
ํ
์คํธ ์ฝ๋ : github.test.js
$ mkdir __tests__ lib
$ touch __tests__/github.test.js
github.test.js์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์
๋ด GitHub kim6394
๊ณ์ ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์๋์ง ํ์ธํ๋ ์ฝ๋๋ค.
const GitHub = require('../lib/github')
describe('Integration with GitHub API', () => {
let github
beforeAll ( () => {
github = new GitHub({
accessToken: process.env.ACCESS_TOKEN,
baseURL: 'https://api.github.com',
})
})
test('Get a user', async () => {
const res = await github.getUser('kim6394')
expect(res).toEqual (
expect.objectContaining({
login: 'kim6394',
})
)
})
})
yarn์์ ํ
์คํธ ์ฝ๋๋ฅผ ์คํํ ๋๋ yarn test
๋จผ์ ์ค์น๋ฅผ ์งํํ์
$ yarn add jest --dev
--dev
์์ฑ์ ๋ญ๊ฐ์?
์ค์นํ ๋ ์ด์ฒ๋ผ ์์ฑํ๋ฉด,
devDependencies
์์ฑ์ ํจํค์ง๋ฅผ ์ถ๊ฐ์ํจ๋ค. ์ด ์ต์ ์ผ๋ก ์ค์น๋ ํจํค์ง๋, ์ฑ์ด ์คํ๋๋ ๋ฐํ์ ํ๊ฒฝ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
ํ ์คํธ ๋ช ๋ น์ ์ํ script ์์ฑ์ pakage.json์ ์ค์ ํ์
"scripts": {
"test": "jest"
},
"dependencies": {
"axios": "^0.19.0",
"node-fetch": "^2.6.0"
},
"devDependencies": {
"jest": "^24.8.0"
}
์์ง ๊ตฌํ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ์คํ์ด ๋์ง ์์ ๊ฒ์ด๋ค.
lib ํด๋์ ๊ตฌํ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์
lib/github.js
const fetch = require('node-fetch')
class GitHub {
constructor({ accessToken, baseURL }) {
this.accessToken = accessToken
this.baseURL = baseURL
}
async getUser(username) {
if(!this.accessToken) {
throw new Error('accessToken is required.')
}
return fetch(`${this.baseURL}/users/${username}`, {
method: 'GET',
headers: {
Authorization: `token ${this.accessToken}`,
'Content-Type' : 'application/json',
},
}).then(res => res.json())
}
}
module.exports = GitHub
์ด์ GitHub ํํ์ด์ง์์ access token์ ์์ฑํด์ ํ ์คํธํด๋ณด์
ํ ํฐ์ ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅด๋ฏ๋ก ์์ ์ด ์์ฑํ ํ ํฐ ๊ฐ์ผ๋ก ์ ๋ ฅํ๋ค
$ ACCESS_TOKEN=29ed3249e4aebc0d5cfc39e84a2081ad6b24a57c yarn test
์๋์ ๊ฐ์ด ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ์๋๋์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค!
yarn run v1.10.1
$ jest
PASS __tests__/github.test.js
Integration with GitHub API
โ Get a user (947ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.758s
Ran all test suites.
Done in 5.30s.
๋๋ฃ์ ํ์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ณผ์ ์, pull request๋ฅผ ์์ฑํ๊ณ ๊ณต์ ํ ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐ, ํจ๊ป ๊ฐ์ ํ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋งํ ์ ์๋ค.
์ง๊ธ๊น์ง ์งํํ ๊ณผ์ ์ ํ์ธํ ๋ฆฌ๋ทฐ์ด๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ต์ ๋ณด๋ด์๋ค.
README.md๋ฅผ ์ฐธ๊ณ ํด ํ ์คํธ ๋ช ๋ น์ ์คํํ์ง๋ง ์คํจํ์ต๋๋ค..
๋ฌด์จ ๋ฌธ์ ์ผ๊น? ๋ด ๋ก์ปฌ ํ๊ฒฝ์์๋ ๋ถ๋ช ํ ์คํธ ์ผ์ด์ค๋ฅผ ํตํด ํ ์คํธ ์ฑ๊ณต์ ํ์ธํ ์ ์์๋ค. ๋ฆฌ๋ทฐ์ด๊ฐ ๋ณด๋ธ ๋ฌธ์ ๋, ๋ค๋ฅธ ํ๊ฒฝ์์ ํ ์คํธ ์คํจ๋ก ์ธํ ๋ฌธ์ ๋ค.
์ด์ฒ๋ผ ํ ์คํธ์ผ์ด์ค์ ์ ์๋ ํ ์คํธ๋ฅผ ์คํํ๋ ์ผ์ ๊ฐ๋ฐ๊ณผ์ ์์ ๋ฐ๋ณต๋๋ ์์ ์ด๋ค. ๋ฐ๋ผ์ ๋ฆฌ๋ทฐ์ด๊ฐ ํ ์คํธ๋ฅผ ๋งค๋ฒ ์คํํ๊ฒ ํ๋ ๊ฑด ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
CI ๋๊ตฌ๊ฐ ์๋์ผ๋ก ์คํํ๋๋ก ํ๋ก์ ํธ ๋ฆฌ๋ทฐ ๋ฐฉ๋ฒ์ ๊ฐ์ ์์ผ๋ณด์
์ ์ฅ์์ Settings ํญ์์ Branches๋ฅผ ํด๋ฆญํ ํ, Branch protection rules์์ CI ์ฐ๋๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ณด์
(CI ๋๊ตฌ ๋น๋ ํ๋ก์ธ์ค์ ์ ์ํ ์์ ์ด ์ฑ๊ณตํด์ผ๋ง master ๋ธ๋์น์ ์์ค์ฝ๋๊ฐ ๋ณํฉ๋๋๋ก ์ ์ฝ ์กฐ๊ฑด์ ์ฃผ๋ ๊ฒ)
๋ํ์ ์ธ CI ๋๊ตฌ๋ Jenkins์ด์ง๋ง, CI ์๋ฒ ๊ตฌ์ถ ์ด์์ ๋น์ฉ์ด ๋ ๋ค.
Travis CI๋ ์๋์ ๊ฐ์ ์์ ์ ์์ํ๋ค
- ESLint๋ฅผ ํตํ ์ฝ๋ ์ปจ๋ฒค์ ๊ฒ์ฆ
- Jest๋ฅผ ํตํ ํ ์คํธ ์๋ํ
Travis CI์ ์ฐ๋๊ณผ ์ค์ ์ด ์๋ฃ๋๋ฉด, pull request๋ฅผ ์์ฒญํ ์์ค์ฝ๋๊ฐ Travis CI๋ฅผ ๊ฑฐ์น๋๋ก GitHub ์ ์ฅ์์ Branch protection rules ํญ๋ชฉ์ ์ค์ ํ๋ค.
์ด๋ฅผ ์ค์ ํด๋๋ฉด, ์์ฑํด๋ ๊ตฌํ ์ฝ๋์ ํ ์คํธ ์ฝ๋๋ก pull request๋ฅผ ์์ฒญํ์ ๋ Travis CI ์๋ฒ์์ ์๋์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ ์ ์๊ฒ ๋๋ค.
https://travis-ci.org/์์ GitHub Login
https://travis-ci.org/account/repositories์์ ์ฐ๊ฒฐํ repository ํ์ฉ
ํ๋ก์ ํธ์ .travis.yml ์ค์ ํ์ผ ์ถ๊ฐ
.travis.yml
---
language: node_js
node_js:
- 10.15.0
cache:
yarn: true
directories:
- node_modules
env:
global:
- PATH=$HOME/.yarn/bin:$PATH
services:
- mongodb
before_install:
- curl -o- -L https://yarnpkg.com/install.sh | bash
script:
- yarn install
- yarn test
๋ค์ ๋์์์, ๋ฆฌ๋ทฐ์ด๊ฐ ํ ์คํธ๋ฅผ ์คํจํ ์ด์ ๋ access token ๊ฐ์ด ์ ๋ฌ๋์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๊ฒฝ ๋ณ์๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์ Git ์ ์ฅ์์์ ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ , ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ข๋ค.
(๋ณด์ ๋ฌธ์ ๊ฐ ์์ ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ ๊ฐ๊ตฌ)
dotenv๊ณผ joi ๋ชจ๋
์ ์ฌ์ฉํ๋ฉด, .env ํ ์ผ์ ์ํ๋ ๊ฐ์ ๋ฑ๋กํ๊ณ ์ ํจ์ฑ ๊ฒ์ฆ์ ํ ์ ์๋ค.
ํ๋ก์ ํธ์ .env ํ์ผ์ ์์ฑํ๊ณ , access token ๊ฐ์ ๋ฑ๋กํด๋์
์ด์ yarn์ผ๋ก ๋ ๋ชจ๋์ ์ค์นํ๋ค.
$ yarn add dotenv joi
$ git add .
$ git commit -m 'Integration with dotenv and joi to manage config properties'
$ git push
์ด์ Travis CI๋ก ์๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
๊ฐ๋ฐ์๋ค๊ฐ์ Node.js ๋ฒ์ ์ด ๋ฌ๋ผ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ๊ฐ๋ฐ์์ ๋ก์ปฌ ์์คํ , CI ์๋ฒ, ๋น๋ ์๋ฒ์ Node.js ๋ฒ์ ์ ์ผ๊ด์ ์ผ๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค.
package.json
์์ engines ์์ฑ, nvm์ ํ์ฉํด ๋ฒ์ ์ ์ผ๊ด๋๊ฒ ์ ์งํด๋ณด์
"engines": {
"node": ">=10.15.3",
},
.nvmrc ํ์ผ ์ถ๊ฐ ํ, nvm use ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด engines ์์ฑ์ ์ค์ ํ Node.js์ ๋ฒ์ ์ ์ฌ์ฉํ๋ค.
$ echo "10.15.3" > .nvmrc
$ git add .
$ nvm use
Found '/Users/user/github/awesome-javascript/.nvmrc' with version <10.15.3>
Now using node v10.15.3 (npm v6.4.1)
...
$ git commit -m 'Add .nvmrc to maintain the same Node.js LTS version'
์ง๊ธ๊น์ง ์์๋ณธ ์
- Git๊ณผ GitHub์ ํ์ฉํด ํ์ ๊ณต๊ฐ์ ๊ตฌ์ฑ
- Node.js ๊ธฐ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํ ์คํธ ํ๊ฒฝ ์ค์
- ๊ฐ๋ฐ ํ๊ฒฝ์ GitHub์ ๊ณต์ ํ๊ณ ๋ฆฌ๋ทฐํ๋ฉด์ ๋ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ์์ผ๋๊ฐ
์ง์์ ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๊ธฐ ์ํด ์๋ํ๋ฅผ ์ํค์. ์ด์ ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒ๋ค
- ESLint๋ก ์ฝ๋ ์ปจ๋ฒค์ ๊ฒ์ฆ
- Jest๋ก ํ ์คํธ ์๋ํ
- Codecov๋ก ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ์ ๊ฒ
- GitHub์ webhook api๋ก ์ฝ๋ ๋ฆฌ๋ทฐ ์์ฒญ
์๋ํ๋ฅผ ์์ผ๋์ผ๋ฉด, ๊ฐ๋ฐ์๋ค์ ์ฝ๋ ์๋๋ฅผ ์ ์ ์๋ commit message, commit range๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๋ค.
ํ์ ํ๋ฉฐ ๊ฐ๋ฐํ๋ ๊ณผ์ ์๋ ์ฝ๋ ์์ฑ ํ pull request๋ฅผ ์์ฑํ์ฌ ๋ณํฉ๊น์ง ๋ง์ ๊ฒ์ฆ์ด ํ์ํ๋ค.
ํ ์คํธ ์ฝ๋๋ ์ด ๊ณผ์ ์์ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ ์ค์ฌ์ฃผ๋ฉฐ, ๊ตฌํ ์ฝ๋ ์๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํ ์ ์๋ค.
๋ํ ๋ฆฌ๋ทฐ ์, ์ฝ๋ ์ปจ๋ฒค์ ๊ฒ์ฆ๋ฟ๋ง ์๋๋ผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ์ ๋ฌธ์ ๋ ๊ณ ๋ฏผ์ด ๊ฐ๋ฅํ๋ค.
[์ฐธ๊ณ ์ฌํญ]