Skip to content

🧩 Coding convention

μœ λ™κ·  edited this page Jul 27, 2023 · 11 revisions

μ°Έκ³ :
eslint-config-airbnb
Airbnb JavaScript Style Guide
Airbnb JavaScript Style Guide - kr
Integrating Prettier + ESLint + Airbnb Style Guide in VSCode

1. μ½”λ”© μ»¨λ²€μ…˜

μ½”λ”© μ»¨λ²€μ…˜, 가독성이 μ’‹κ³  μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ μ½”λ”© μŠ€νƒ€μΌ κ·œμ•½. μ½”λ”© μ»¨λ²€μ…˜μ„ μ€€μˆ˜ν•˜λ©΄ μ„±λŠ₯에 영ν–₯을 μ£Όκ±°λ‚˜ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€λŠ” 잠재적 μœ„ν—˜ μš”μ†Œλ₯Ό 쀄일 수 μžˆλ‹€.

2. Airbnb Style Guide Install

  1. npmκ³Ό npxλ₯Ό μ„€μΉ˜ν•œλ‹€.
  2. VSCode μ΅μŠ€ν…μ…˜ ESLint, Prettierλ₯Ό μ„€μΉ˜ν•œλ‹€.
  3. ESLint와 Prettier 라이브러리λ₯Ό ν”„λ‘œμ νŠΈμ— μ„€μΉ˜ν•œλ‹€. ν”„λ‘œμ νŠΈμ˜ 루트 λ””λ ‰ν† λ¦¬μ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•œλ‹€.
> npm install -D eslint prettier
  1. Airbnb configλ₯Ό μ„€μΉ˜ν•œλ‹€. npm 5+λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό 톡해 λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  수 μžˆλ‹€.
> npx install-peerdeps --dev eslint-config-airbnb
  1. eslint-config-prettier와 eslint-plugin-prettierλ₯Ό μ„€μΉ˜ν•œλ‹€.
> npm install -D eslint-config-prettier eslint-plugin-prettier
  1. ν”„λ‘œμ νŠΈμ˜ 루트 디렉토리에 .eslintrc.json νŒŒμΌμ„ μƒμ„±ν•˜κ³  λ‹€μŒ λ‚΄μš©μ„ μž‘μ„±ν•œλ‹€.
{
  "extends": ["airbnb", "prettier"], //이 μ„€μ • νŒŒμΌμ€ airbnb μŠ€νƒ€μΌ κ°€μ΄λ“œμ™€ prettier의 μŠ€νƒ€μΌ κ°€μ΄λ“œλ₯Ό ν™•μž₯ν•œλ‹€.
  "plugins": ["prettier"], //prettier ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•œλ‹€.
  "rules": {
    "prettier/prettier": ["error"], //prettierμ—μ„œ λ°œμƒν•œ λͺ¨λ“  μŠ€νƒ€μΌ κ²½κ³ λ₯Ό μ—λŸ¬λ‘œ μ·¨κΈ‰ν•œλ‹€.
    "no-unused-vars": "warn", //μ„ μ–Έν–ˆμœΌλ‚˜ μ‚¬μš©λ˜μ§€ μ•Šμ€ λ³€μˆ˜κ°€ μžˆλ‹€λ©΄ 경고둜 ν‘œμ‹œν•œλ‹€.
    "no-undef": "off" //μ•Œ 수 μ—†λŠ” 값에 λŒ€ν•΄ κ²½κ³ λ₯Ό λˆλ‹€.
  },
  "env": {
    "browser": true, //λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œ μž‘λ™ν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•œλ‹€.
    "node": true, //Node ν™˜κ²½μ—μ„œ μž‘λ™ν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•œλ‹€.
    "es2021": true //ECMAScript 2021 ν‘œμ€€μ„ 지원할지 μ—¬λΆ€λ₯Ό μ„€μ •ν•œλ‹€.
  },
  "overrides": [
    {
      "env": {
        "node": true //Node ν™˜κ²½μ—μ„œ μž‘λ™ν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•œλ‹€.
      },
      "files": [".eslintrc.{js,cjs}"], //이 섀정이 μ μš©λ˜λŠ” νŒŒμΌλ“€μ˜ νŒ¨ν„΄μ„ λͺ…μ‹œν•œλ‹€.
      "parserOptions": {
        "sourceType": "script" //μ„€μ • 파일의 μ†ŒμŠ€ νƒ€μž…μ„ 'script'둜 λͺ…μ‹œν•œλ‹€.
      }
    }
  ],
  "parserOptions": {
    "ecmaVersion": "latest", //λ§ˆμ§€λ§‰ ECMASclima의 버전을 μ‚¬μš©ν•΄ νŒŒμ‹±ν•œλ‹€.
    "sourceType": "module" //전체 ν”„λ‘œμ νŠΈμ˜ μ†ŒμŠ€ νƒ€μž…μ„ 'module'둜 λͺ…μ‹œν•œλ‹€.
  }
}
  1. ν”„λ‘œμ νŠΈμ˜ 루트 디렉토리에 .prettierrc νŒŒμΌμ„ μƒμ„±ν•˜κ³  Prettier config file을 μ°Έκ³ ν•˜μ—¬ μ›ν•˜λŠ” ν¬λ§·νŒ… μ˜΅μ…˜μ„ μ„€μ •ν•œλ‹€.
{
  "arrowParens": "avoid", // ν™”μ‚΄ν‘œ ν•¨μˆ˜ κ΄„ν˜Έ μ‚¬μš© 방식
  "bracketSpacing": false, // 객체 λ¦¬ν„°λŸ΄μ—μ„œ κ΄„ν˜Έμ— 곡백 μ‚½μž… μ—¬λΆ€ 
  "endOfLine": "auto", // EoF 방식, OSλ³„λ‘œ 처리 방식이 닀름 
  "htmlWhitespaceSensitivity": "css", // HTML 곡백 감도 μ„€μ •
  "jsxBracketSameLine": false, // JSX의 λ§ˆμ§€λ§‰ `>`λ₯Ό λ‹€μŒ μ€„λ‘œ 내릴지 μ—¬λΆ€ 
  "jsxSingleQuote": true, // JSX에 singe μΏΌν…Œμ΄μ…˜ μ‚¬μš© μ—¬λΆ€
  "printWidth": 100, //  쀄 λ°”κΏˆ ν•  폭 길이
  "proseWrap": "preserve", // markdown ν…μŠ€νŠΈμ˜ μ€„λ°”κΏˆ 방식 (v1.8.2)
  "quoteProps": "as-needed", // 객체 속성에 μΏΌν…Œμ΄μ…˜ 적용 방식
  "semi": true, // μ„Έλ―Έμ½œλ‘  μ‚¬μš© μ—¬λΆ€
  "singleQuote": true, // single μΏΌν…Œμ΄μ…˜ μ‚¬μš© μ—¬λΆ€
  "tabWidth": 2, // νƒ­ λ„ˆλΉ„ 
  "trailingComma": "all", // μ—¬λŸ¬ 쀄을 μ‚¬μš©ν•  λ•Œ, ν›„ν–‰ 콀마 μ‚¬μš© 방식
  "useTabs": false, // νƒ­ μ‚¬μš© μ—¬λΆ€
  "rangeStart": 0, // ν¬λ§·νŒ…μ„ λΆ€λΆ„ μ μš©ν•  파일의 μ‹œμž‘ 라인 μ§€μ •
  "requirePragma": false, // 파일 상단에 미리 μ •μ˜λœ 주석을 μž‘μ„±ν•˜κ³  Pragma둜 ν¬λ§·νŒ… μ‚¬μš© μ—¬λΆ€ μ§€μ • (v1.8.0)
  "insertPragma": false, // 미리 μ •μ˜λœ @format marker의 μ‚¬μš© μ—¬λΆ€ (v1.8.0)
  "overrides": [ 
    {
      "files": "*.json",
      "options": {
        "printWidth": 200
      }
    }
  ], // νŠΉμ • νŒŒμΌλ³„λ‘œ μ˜΅μ…˜μ„ λ‹€λ₯΄κ²Œ 지정함, ESLint 방식 μ‚¬μš©
}
  1. VSCode의 User Setting 파일(setting.json)에 "editor.formatOnSave": trueλ₯Ό μ‚½μž…ν•œλ‹€.

3. λͺ…λͺ… κ·œμΉ™

  • 단어λ₯Ό μƒλž΅ν•˜κ±°λ‚˜ μ•½μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 단, HTML,URL λ“±κ³Ό 같은 λ²”μš©μ μΈ μ•½μ–΄λŠ” μ‚¬μš©ν•  수 μžˆλ‹€. μ•½μ–΄ μ‚¬μš©μ‹œμ—λŠ” λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•œλ‹€.
  • ν•œκΈ€ λ°œμŒμ„ 둜마자둜 κ·ΈλŒ€λ‘œ ν‘œκΈ°ν•˜μ§€ μ•ŠλŠ”λ‹€
  • 특수 λ¬ΈμžλŠ” 가급적 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 단, μƒμˆ˜μ˜ μ΄λ¦„μ—μ„œ 단어λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ μš©λ„μ™€ Private μ§€μ‹œμž ν‘œμ‹œλ₯Ό μœ„ν•˜μ—¬ μ–Έλ”μŠ€μ½”μ–΄(_)λ₯Ό μ‚¬μš©ν•œλ‹€
  • 2κΈ€μž 이상 λŒ€λ¬Έμžλ₯Ό μ—°μ†ν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 단, μƒμˆ˜ μ΄λ¦„μ΄λ‚˜ μ•½μ–΄λŠ” μ˜ˆμ™Έλ‘œ ν•œλ‹€
  • μƒμˆ˜ μ΄λ¦„μ΄λ‚˜ μ•½μ–΄ 이름을 λŒ€λ¬Έμžλ₯Ό μ‚¬μš©ν•œλ‹€
  • 이름을 톡해 μ—­ν• κ³Ό λͺ©μ μ„ ν•  수 μžˆλ„λ‘ κ°„κ²°ν•˜κ³  λͺ…λ£Œν•˜κ²Œ μž‘μ„±ν•œλ‹€

3.1 ν•¨μˆ˜: 카멜 ν‘œκΈ°λ²• (CamelCase)

  • 동사λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•œλ‹€
  • 카멜 ν‘œκΈ°λ²•μ„ μ€€μˆ˜ν•œλ‹€. 볡합어 이름은 첫 번째 단어λ₯Ό μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜κ³ , 두 번째 μ΄μƒμ˜ 단어 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜μ—¬ 단어λ₯Ό κ΅¬λΆ„ν•œλ‹€.
  • Getter, Setter λ©”μ†Œλ“œλŠ” λ°˜λ“œμ‹œ 'get + λ©€λ²„λ³€μˆ˜ 이름', 'set + λ©€λ²„λ³€μˆ˜ 이름' ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•œλ‹€. 단, Getter λ©”μ†Œλ“œμ˜ λ°˜ν™˜κ°’μ΄ Boolean 인 경우 get λŒ€μ‹  is 쑰합을 μ‚¬μš©ν•œλ‹€
  • 이벀트 ν•Έλ“€λŸ¬ λ©”μ†Œλ“œλŠ” handle + 이벀트λͺ… 으둜 μ‹œμž‘ν•˜λ„λ‘ μ •μ˜ν•œλ‹€. λΈŒλΌμš°μ €μ—μ„œ μ œκ³΅ν•˜λŠ” μ΄λ²€νŠΈκ°€ μ•„λ‹ˆλΌ νŠΉμ • λͺ¨λ“ˆμ΄λ‚˜ ν•¨μˆ˜μ—μ„œ 비동기 콜백 ν•¨μˆ˜(이벀트) λͺ¨λΈμ„ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ„ λ™μΌν•˜λ‹€.
// λ‚˜μœ 예
apple();
car();

// 쒋은 예
isChecked();
getElement();

3.2 λ³€μˆ˜: 카멜 ν‘œκΈ°λ²• (CamelCase)

  • λ³€μˆ˜λͺ…은 길어도 μ’‹μœΌλ‹ˆ ν•œ λˆˆμ— μ•Œμ•„λ³Ό 수 μžˆλ„λ‘ μ΅œλŒ€ν•œ λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•œλ‹€
  • λ³€μˆ˜ 이름은 λͺ…사λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•œλ‹€
  • 카멜 ν‘œκΈ°λ²•μ„ μ€€μˆ˜ν•œλ‹€. 볡합어 이름은 첫 번째 단어λ₯Ό μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜κ³ , 두 번째 μ΄μƒμ˜ 단어 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜μ—¬ 단어λ₯Ό κ΅¬λΆ„ν•œλ‹€.
  • λ³€μˆ˜ μ΄λ¦„μ˜ 첫 κΈ€μžλ‘œ μ—°μ†λœ 두 개의 μ–Έλ”μŠ€μ½”μ–΄(__) κΈ°ν˜Έμ™€ λ‹¬λŸ¬ 기호($)λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • λ³€μˆ˜ 이름은 ν•œ κΈ€μž μ΄μƒμœΌλ‘œ μ‚¬μš© μ˜λ„λ₯Ό μΆ©λΆ„νžˆ μ•Œ 수 μžˆμ„ 만큼 κ°„κ²°ν•˜κ³  λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•œλ‹€. 단, μž„μ‹œ λ³€μˆ˜λŠ” ν•œ κΈ€μž 이름을 μ‚¬μš©ν•  수 μžˆλ‹€.

3.3 파일λͺ…

  • JavaScript νŒŒμΌμ€ ν•˜λ‚˜μ˜ 디렉토리 μ•„λž˜μ— μ„œλΈŒ 디렉토리 λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μž‘μ„±ν•œλ‹€.
  • JavaScript νŒŒμΌμ€ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό ν¬ν•¨ν•˜μ—¬ λͺ¨λ“ˆ λ‹¨μœ„λ‘œ κ΅¬μ„±ν•œλ‹€. 파일 이름 κ·œμΉ™μ€ 각각 λ„€μž„μŠ€νŽ˜μ΄μŠ€ + λͺ¨λ“ˆ 이름 κ·œμΉ™μ„ λ”°λ₯Έλ‹€

스크란샷 2023-07-28 03 53 13

4. HTML/CSS

NHN μ½”λ”© μ»¨λ²€μ…˜

4.1 HTML

  1. μœ νš¨ν•˜κ³  읽을 수 μžˆλŠ” DOM μž‘μ„±
  2. 인라인 μŠ€νƒ€μΌκ³Ό 슀크립트λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠκΈ°
  3. μ›Ή μ ‘κ·Όμ„± μ€€μˆ˜ν•˜κΈ°
  4. 이미지에 alt νƒœκ·Έ μ‚¬μš©
  5. νŽ˜μ΄μ§€ 단 ν•˜λ‚˜μ˜ h1
  6. 제λͺ© 및 메타 νƒœκ·Έ μ‚¬μš©(SEO μ΅œμ ν™”)
  7. html의 μœ νš¨μ„±μ„ 검사
  8. 이미지 및 μ„±λŠ₯ μ΅œμ ν™” 검사

4.2 CSS

  1. λ―Έλ””μ–΄ 쿼리 μ‚¬μš©

  2. λ§ˆμ§„μƒμ‡„ flex μ—μ„œλŠ” λ§ˆμ§„μƒμ‡„κ°€ μΌμ–΄λ‚˜μ§€ μ•ŠμœΌλ‹ˆ κ³ λ €ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. flexκ°€ μ•„λ‹ˆλΌλ©΄ λ°‘μ˜ 사항 μ§€ν‚€κΈ° μžμ‹ μš”μ†ŒλŠ” margin-top 만 μ‚¬μš©ν•œλ‹€. λΆ€λͺ¨ μš”μ†ŒλŠ” padding 으둜 쑰절, margin μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 빈 μš”μ†ŒλŠ” height , min-height , max-height μ…‹ 쀑 ν•˜λ‚˜λ₯Ό μ€€λ‹€.

  3. 상황에 λ”°λ₯Έ μ μ ˆν•œ λ‹¨μœ„ μ‚¬μš©

  4. rem λ‹¨μœ„

    • ν°νŠΈμ‚¬μ΄μ¦ˆ, λ§ˆμ§„, νŒ¨λ”©.
  5. px λ‹¨μœ„

    • λΈŒλΌμš°μ € 크기 상관없이 μ •ν™•νžˆ κ³ μ •λœ μ‚¬μ΄μ¦ˆμ—¬μ•Ό ν•  λ•Œ.
      • border-radius, border-line
  6. λ°±λΆ„μœ¨(%) λ‹¨μœ„

    • κ°€λ‘œ λΉ„μœ¨μ— λ”°λ₯Έ λ°˜μ‘ν˜•μ— μ‚¬μš©ν•œλ‹€.(λΆ€λͺ¨ μš”μ†Œμ˜ 크기에 영ν–₯을 λ°›μŒ)
    • 이미지에 μ‚¬μš©.
      • λ„ˆλΉ„λ₯Ό μ£Όκ³ , μ„Έλ‘œλŠ” auto둜 ν•˜μ—¬ μ’…νš‘λΉ„λ₯Ό 맞좰 λŠ˜μ–΄λ‚˜κ³  μ€„μ–΄λ“€κ²Œ ν•œλ‹€.(global style에 μ μš©λ˜μ–΄μžˆλ‹€.)
    • vh(viewport height) λ‹¨μœ„
      • μ„Έλ‘œ λΉ„μœ¨μ— λ”°λ₯Έ λ°˜μ‘ν˜•μ— μ‚¬μš©ν•œλ‹€.(λ³΄μ—¬μ§€λŠ” λΈŒλΌμš°μ € 화면에 영ν–₯을 λ°›μŒ)
  7. float, flex, grid

    • μ£Ό λ ˆμ΄μ•„μ›ƒμ€ flex둜 μ²˜λ¦¬ν•œλ‹€.
    • float와 gridλŠ” μ‚¬μš©μ„ μ§€μ–‘ν•œλ‹€.

Clone this wiki locally