# ์ฐ๋ฆฌ_ํ๋ธํ์!
22.01.02 ~ 22.01.22 - SOPT 29th APPJAM
๋ฐ๊ฑด์ | ์ ์ธ์ฐ | ๊น์ฐ์ด |
---|---|---|
Tekiter | n0eyes | YounYi |
์ด๋ฆ | ์ญํ |
---|---|
๋ฐ๊ฑด์ | ์ด๊ธฐ ํ๊ฒฝ ์ธํ , API ์ถ์ํ, ์์ ์ํฉ ๋์ |
์ ์ธ์ฐ | ์ปดํฌ๋ํธ ๊ตฌํ, ๋ ์ด์์ ๋ฐ API ์ฐ๊ฒฐ, ์์ ์ฌํญ ๋์ |
๊น์ฐ์ด | ์ปดํฌ๋ํธ ๊ตฌํ, ๋ ์ด์์ ๋ฐ API ์ฐ๊ฒฐ, ์์ ์ฌํญ ๋์ |
- next.js
- typescript
- recoil
- styled-components
- husky
- storybook
- ๋๋ฉํ์ด์ง๋ฅผ ํตํด, ํ์ ์ฑํฅ ํ ์คํธ ๋ฒํผ์ ํตํด ํ๋ธ์์ ์ ๊ณตํ๋ ์ฒซ๋ฒ์งธ ํต์ฌ ๊ธฐ๋ฅ์ธ ํ์ ์ฑํฅ ํ ์คํธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ํ๋ธ์์ ์ ๊ณตํ๋ ํ์ ์ฑํฅ ํ ์คํธ๋ DISC ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋์์ผ๋ฉฐ, 3๋จ๊ณ ํด๋นํ๋ ํ ์คํธ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ฉด 8๊ฐ์ง ์ข ๋ฅ์ ๊ฒฐ๊ณผ๊ฐ ์ค, ์ ์ ์๊ฒ ํด๋นํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ๊ธฐ์กด์ ์ค๊ธ๋ก๋ง ์์ฑ๋์ด ํํฐ ๊ฒ์์ด๋, ์ ํํ ์ ๋ณด๋ฅผ ํ์ธํ๊ธฐ ์ด๋ ค์ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์, ํ๋ก์ ํธ ์์ ๊ธฐ๊ฐ, ๋ชจ์ง ํฌ์ง์ ๋ณ ์ธ์, ๋ชฉํ, ํ์ ์ ํธ ์ฑํฅ๊ณผ ๋๋ถ์ด ํ๋ก์ ํธ ๋ถ์ผ๋ฅผ ์ ํํ๊ฒ ํฉ๋๋ค.
- ์์ ๊ธฐ๊ฐ, ๋ชจ์ง ํฌ์ง์ ๋ณ ์ธ์, ๋ชฉํ, ํ์ ์ ํธ ์ฑํฅ๊ณผ ๋๋ถ์ด ํ๋ก์ ํธ ๋ถ์ผ๋ฅผ ์ ํํ๊ฒ ํฉ๋๋ค. ๋ํ, ํ๋ก์ ํธ ํ์ ์ด๋ฏธ ๊ตฌ์ฑ์์ด ์๋ค๋ฉด, ํ๋จ์ ์ด๋ฉ์ผ ์ ๋ ฅ์ ํตํด, ํ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ ์ ์์ต๋๋ค.
- ์ฝ ์ฐ๋ฅด๊ธฐ ๊ธฐ๋ฅ์, Z์ธ๋๋ค์ด ํ๋ธ์ ํตํด ๋ถ๋ด์์ด ์ฐ๋ฝํ๊ณ , ํ๋ก์ ํธ์ ์ง์ํ ์ ์๋๋ก ๋์ต๋๋ค. ์ฝ ์ฐ๋ฅด๊ธฐ๋ฅผ ๋๋ฅด๋ฉด, ๋ด ๋ง์ด ํ๋กํ ์ ๋ณด๊ฐ ์ฐ๋ฅธ ์๋์๊ฒ ๋ณด๋ด์ง๋ฉฐ โ์ง์โ์ด๋ผ๋ ๋ฌด๊ฑฐ์ด ๊ณผ์ ์ด ์๋, ๋ถ๋ด์์ด ์ฐ๋ฝํ๋ ํ์คํ ๋ณธ์ธ์ ๊ด์ฌ ์์ฌ๋ฅผ ์ ๋ฌํ ์ ์๊ฒ ํฉ๋๋ค.
Click!
main์ ๋ชจ๋ ์์ ์ด ๋๋ ํ develop์์ Merge ์ํจ๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโ
-
main
- ์ด๊ธฐ ์ธํ ์กด์ฌ -
develop
- local ์์ ์๋ฃ ํ Merge ๋ธ๋์น -
feat/issue
- ๊ฐ์์ ๊ธฐ๋ฅ ์ถ๊ฐ ๋ธ๋์นex)
feat/atom
โโโโโโโโโโโโโโโโโโโโโโโโโ
- ๊ฐ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋๋ง๋ค Issue ๋ฐ Branch ์์ฑ
local - feat/atom
์์ ๊ฐ์ ๊ธฐ๋ฅ ์์- ์์
์๋ฃ ํ
remote - develop
์ Pull Request - ์ฝ๋ ๋ฆฌ๋ทฐ ํ Confirm ๋ฐ๊ณ Merge
remote - develop
์ Merge ๋ ๋ ๋ง๋ค ๋ชจ๋ ํ์remote - develop pull
๋ฐ์ ์ต์ ์ํ ์ ์ง
Click!
ํ๊ทธ | ์ค๋ช |
---|---|
[INIT] | ์์ ์ธํ ์ปค๋ฐ |
[CHORE] | ์ฝ๋ ์์ , ๋ด๋ถ ํ์ผ ์์ |
[FEAT] | ์๋ก์ด ๊ธฐ๋ฅ ๊ตฌํ |
[STYLE] | ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์๋ ์ปค๋ฐ, ์ฝ๋ ์์ ๋ฑ์ ํฌ๋งท์ ๊ดํ ์ปค๋ฐ |
[HOTFIX] | issue๋, QA์์ ๊ธํ ๋ฒ๊ทธ ์์ ์ ์ฌ์ฉ |
[FIX] | ๋ฒ๊ทธ, ์ค๋ฅ ํด๊ฒฐ |
[DOCS] | README๋ WIKI ๋ฑ์ ๋ฌธ์ ๊ฐ์ |
[RENAME] | ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ์ด ์์ ๋ ์ฌ์ฉ |
[REFACTOR] | ์ ๋ฉด ์์ ์ด ์์ ๋ ์ฌ์ฉ |
[MERGE] | ๋ค๋ฅธ ๋ธ๋์น๋ฅผ Merge ํ ๋ ์ฌ์ฉ |
[BUILD] | ๋น๋ ๊ด๋ จ ํ์ผ ์์ |
Click!
- ์ด๋ฆ์ผ๋ก๋ถํฐ ์๋๊ฐ ์ฝํ์ง ์ ์๊ฒ ์ด๋ค.
-
ex)
// bad function q() { // ...stuff... } // good function query() { // ..stuff.. }
- ์ค๋ธ์ ํธ, ํจ์, ๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค์๋
camelCase
๋ฅผ ์ฌ์ฉํ๋ค.
-
ex)
// bad const OBJEcttsssss = {}; const this_is_my_object = {}; function c() {} // good const thisIsMyObject = {}; function thisIsMyFunction() {}
- styled-components ์ฌ์ฉ์ ์ฒซ ๋ฒ์งธ wrapper์ ์ด๋ฆ์ ์ปดํฌ๋ํธ ์ด๋ฆ๊ณผ ๋์ผํ๊ฒ ์์ฑํ๋ค.
-
ex)
// bad function CopyModal(options) { return <StyledModal /> } const StyledModal = styled.div`` // good function CopyModal(options) { return <StyledCopyModal /> } const StyledCopyModal = styled.div``
-
ํจ์ ์ด๋ฆ์ ๋์ฌ - ๋ช ์ฌ ํํ๋ก ์์ฑํ๋ค.
ex)
postUserInformation( )
- ์ฝ์ด ์ฌ์ฉ์ ์ต๋ํ ์ง์ํ๋ค.
-
๋ชจ๋ ์ฐธ์กฐ๋
const
๋ฅผ ์ฌ์ฉํ๊ณ ,var
๋ ์ฌ์ฉํ์ง ์๋๋ค. -
์ฐธ์กฐ๋ฅผ ์ฌํ ๋น ํด์ผํ๋ค๋ฉด
var
๋์let
์ ์ฌ์ฉํ๋ค.์ด๋,
const
์let
์ ๋ธ๋ก์ค์ฝํ์์ ์ ์
- ๋ณต์ํ์ ๋ธ๋ก์๋ ์ค๊ดํธ({})๋ฅผ ์ฌ์ฉํ๋ค.
-
ex)
// bad if (test) return false; // good if (test) return false; // good if (test) { return false; } // bad function() { return false; } // good function() { return false; }
- ๋ณต์ํ ๋ธ๋ก์
if
์else
๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐelse
๋if
๋ธ๋ก ๋์ ์ค๊ดํธ(})์ ๊ฐ์ ํ์ ์์น์ํจ๋ค.
-
ex)
// bad if (test) { thing1(); thing2(); } else { thing3(); } // good if (test) { thing1(); thing2(); } else { thing3(); }
- ๋ณต์ํ์ ์ฝ๋ฉํธ๋
/** ... */
๋ฅผ ์ฌ์ฉํ๋ค.
-
ex)
// good /** * @param {String} tag * @return {Element} element */ function make(tag) { // ...stuff... return element; }
- ๋จ์ผํ์ ์ฝ๋ฉํธ์๋
//
์ ์ฌ์ฉํ๊ณ ์ฝ๋ฉํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ์ฝ๋์ ์๋ถ์ ๋ฐฐ์นํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ฉํธ์ ์์ ๋นํ์ ๋ฃ๋๋ค.
-
ex)
// bad const active = true; // is current tab // good // is current tab const active = true; // good function getType() { console.log('fetching type...'); // set the default type to 'no type' const type = this._type || 'no type'; return type; }
- ์ฃผ์ ์ค๊ดํธ({}) ์์๋ ์คํ์ด์ค 1๊ฐ๋ฅผ ๋ฃ๋๋ค.
-
ex)
// bad function test(){ console.log('test'); } // good function test() { console.log('test'); }
- ์ ์ด๊ตฌ๋ฌธ (
if
๋ฌธ์ด๋while
๋ฌธ ๋ฑ) ์ ์๊ดํธ (()) ์์๋ ์คํ์ด์ค๋ฅผ 1๊ฐ ๋ฃ๊ณ ํจ์ ์ ์ธ์ด๋ ํจ์ ํธ์ถ์ ์ธ์ ๋ฆฌ์คํธ์ ์์๋ ์คํ์ด์ค๋ฅผ ๋ฃ์ง ์๋๋ค.
-
ex)
// bad if(isJedi) { fight (); } // good if (isJedi) { fight(); } // bad function fight () { console.log ('Swooosh!'); } // good function fight() { console.log('Swooosh!'); }
- ์ฐ์ฐ์ ์ฌ์ด์๋ ์คํ์ด์ค๋ฅผ ๋ฃ๋๋ค.
-
ex)
// bad const x=y+5; // good const x = y + 5;
- ์ ๋์ ์ฝค๋ง BAD
-
ex)
// bad const story = [ once , upon , aTime ]; // good const story = [ once, upon, aTime, ];
- ๋์ ์ฝค๋ง GOOD
-
ex)
// bad const hero = { firstName: 'Dana', lastName: 'Scully' }; // good const hero = { firstName: 'Dana', lastName: 'Scully', };
- ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉํ๋ค.
-
ex)
// bad (function() { const name = 'Skywalker' return name })() // good (() => { const name = 'Skywalker'; return name; })();
- ๋ฌธ์์ด์๋ ์ฑํฌ์ฟผํธ
''
๋ฅผ ์ฌ์ฉํ๋ค.
-
ex)
// bad const name = "Capt. Janeway"; // good const name = 'Capt. Janeway';
- ํ๋ก๊ทธ๋จ์์ ๋ฌธ์์ด์ ์์ฑํ๋ ๊ฒฝ์ฐ๋ ๋ฌธ์์ด ์ฐ๊ฒฐ์ด ์๋
template strings
๋ฅผ ์ด์ฉํ๋ค.
-
ex)
// bad function sayHi(name) { return 'How are you, ' + name + '?'; } // bad function sayHi(name) { return ['How are you, ', name, '?'].join(); } // good function sayHi(name) { return `How are you, ${name}?`; }
- ์ฝ๋ฐฑ ํจ์๋ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
-
ex)
var arr1 = [1, 2, 3]; var pow1 = arr.map(function (x) { // ES5 Not Good return x * x; }); const arr2 = [1, 2, 3]; const pow2 = arr.map(x => x * x); // ES6 Good
- ๊ทธ ์ธ์๋ ํจ์ ์ ์ธ์ ์ด์ฉํ๋ค.
-
ex)
// bad const foo = function () { }; // good function foo() { }
==
์ด๋!=
๋ณด๋ค===
์!==
์ ์ฌ์ฉํ๋ค.
- ๋จ์ถํ์ ์ฌ์ฉํ๋ค.
-
ex)
// bad if (name !== '') { // ...stuff... } // good if (name) { // ...stuff... } // bad if (collection.length > 0) { // ...stuff... } // good if (collection.length) { // ...stuff... }
- ๋น๋๊ธฐ ํจ์๋ฅผ ์ฌ์ฉํ ๋
Promise
ํจ์์ ์ฌ์ฉ์ ์ง์ํ๊ณasync
,await
๋ฅผ ์ฐ๋๋ก ํ๋ค.
|-๐ .gitignore
|-๐ .storybook
|-๐ styles_
|-๐ utils_
|-๐ pages_
|-๐ components_
|- ๐ atom_
| |- ๐ button_
| |- ๐ Button.tsx
| |- ๐ Button.stories.tsx
|
|- ๐ molecule_
| |- ๐ entryField_
| |- ๐ EntryField.tsx
| |- ๐ EntryField.stories.t
|- ๐ organism_
| |- ๐ recruitPostion_
| |- ๐ RecruitPostion.tsx
| |- ๐ RecruitPostion.stories.tsx