Pullanner project - Convention & Git Branch Strategy

์ด์†Œ๋ผยท2022๋…„ 11์›” 28์ผ

Pullanner project

๋ชฉ๋ก ๋ณด๊ธฐ
1/11

Code Convention

๐Ÿ”ต JavaScript

JavaScript Version

  • ES6+๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

function

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

import

  • import๋ฌธ์˜ ์ˆœ์„œ๋Š” custom eslint rule์— ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
'import/order': [
      'error',
      {
        groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
        pathGroups: [
          {
            pattern: '@/*',
            group: 'internal',
            position: 'after',
          },
        ],
        'newlines-between': 'always',
        alphabetize: {
          order: 'asc',
          caseInsensitive: true,
        },
      },
    ],

export

  • export default๋Š” ๊ฐ€์žฅ ํ•˜๋‹จ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • export๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ•จ๊ป˜ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ต Naming Convention

constants

  • ์ƒ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž๋กœ ์“ฐ๋ฉฐ _๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

variables

  • ์ฃผ๋กœ camelCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ช…์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๋˜ flag ๋ณ€์ˆ˜์ผ ๊ฒฝ์šฐ is๋‚˜ has๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • button ๋“ฑ์˜ ์˜์–ด ๋‹จ์–ด์˜ ๊ฒฝ์šฐ btn๊ฐ™์ด ์ถ•์•ฝํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

function

  • ๊ธฐ๋ณธ์ ์œผ๋กœ camelCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, PascalCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    ๋™์‚ฌ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” handle[์ปดํฌ๋„ŒํŠธ์ด๋ฆ„][์ด๋ฒคํŠธ์ด๋ฆ„]์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
<DropDown onClick={handleDropDownClick}>

class

  • PascalCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

interface, type

  • PascalCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • prefix(I, T์™€ ๊ฐ™์€)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ”ต Type Definition

  • type alias๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    1. type alias๋Š” computed value๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    2. type alias๋Š” IDE์—์„œ ๋งˆ์šฐ์Šค hover ์‹œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋” ์ž˜ ์ง€์›ํ•˜๋ฏ€๋กœ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    3. type alias๋Š” ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์ค‘๋ณต ์„ ์–ธํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์›์น˜ ์•Š๋Š” ์„ ์–ธ ๋ณ‘ํ•ฉ์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค.
type names = 'firstName' | 'lastName'

// type alias์—์„œ๋Š” computed value ์‚ฌ์šฉ ๊ฐ€๋Šฅ 
type NameTypes = {
  [key in names]: string 
}

// interface์—์„œ๋Š” computed value ์‚ฌ์šฉ ๋ถˆ๊ฐ€
interface NameInterface {
  // error
  [key in names]: string
}

const yc: NameTypes = { firstName: 'hi', lastName: 'yc' }
  • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Component์˜ Props ํƒ€์ž… ์ง€์ • ์‹œ Props suffix๋ฅผ ๋ถ™์—ฌ์„œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.



Branch Strategy

  • ์ €ํฌ ํ”„๋กœ์ ํŠธ์—๋Š” Github Flow๋กœ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทผ๊ฑฐ
      1. git-flow์— ๋น„ํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค.
      2. PR์„ ํ†ตํ•ด ํŒ€์›๊ณผ ์ƒ์˜ ํ›„ mergeํ•ด์„œ main ๋ธŒ๋žœ์น˜์—์„œ ๋ฐฐํฌํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
# main [Infinite Lifetime]
- ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐํฌ๋œ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜
- Tag๋ฅผ ๋ถ™์—ฌ์„œ release ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 

# feature, refactor, fix [Short Lifetime]
- main ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐ๋œ๋‹ค.
- ์ถœ์‹œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด main์— PR์„ ๋ณด๋‚ด๋ฉด merge๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
- Example
	- feature/#15-login
	- refactor/#30-community-page
	- fix/#54-navbar-bug

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