-
Notifications
You must be signed in to change notification settings - Fork 2
๐งฉ Coding convention
์ฐธ๊ณ :
eslint-config-airbnb
Airbnb JavaScript Style Guide
Airbnb JavaScript Style Guide - kr
Integrating Prettier + ESLint + Airbnb Style Guide in VSCode
์ฝ๋ฉ ์ปจ๋ฒค์ , ๊ฐ๋ ์ฑ์ด ์ข๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฝ๋ฉ ์คํ์ผ ๊ท์ฝ. ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์ค์ํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ๊ฑฐ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ์ ์ฌ์ ์ํ ์์๋ฅผ ์ค์ผ ์ ์๋ค.
- ๋ค์ํ ๊ธฐ์
์ ์ฝ๋ฉ ์ปจ๋ฒค์
Airbnb Style Guide - ๋ณธ ํ๋ก์ ํธ ์ฌ์ฉ ์ปจ๋ฒค์
JavaScript Standard Style
Idiomatic JavaScript Style Guide
Google Style Guide
- npm๊ณผ npx๋ฅผ ์ค์นํ๋ค.
- VSCode ์ต์คํ ์ ESLint, Prettier๋ฅผ ์ค์นํ๋ค.
- ESLint์ Prettier ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ค์นํ๋ค. ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
> npm install -D eslint prettier- Airbnb config๋ฅผ ์ค์นํ๋ค. npm 5+๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค.
> npx install-peerdeps --dev eslint-config-airbnb- eslint-config-prettier์ eslint-plugin-prettier๋ฅผ ์ค์นํ๋ค.
> npm install -D eslint-config-prettier eslint-plugin-prettier- ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์
.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'๋ก ๋ช
์ํ๋ค.
}
}- ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์
.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 ๋ฐฉ์ ์ฌ์ฉ
}
- VSCode์ User Setting ํ์ผ(setting.json)์
"editor.formatOnSave": true๋ฅผ ์ฝ์ ํ๋ค.
- ๋จ์ด๋ฅผ ์๋ตํ๊ฑฐ๋ ์ฝ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ๋จ, HTML,URL ๋ฑ๊ณผ ๊ฐ์ ๋ฒ์ฉ์ ์ธ ์ฝ์ด๋ ์ฌ์ฉํ ์ ์๋ค. ์ฝ์ด ์ฌ์ฉ์์๋ ๋ชจ๋ ๋๋ฌธ์๋ก ์์ฑํ๋ค.
- ํ๊ธ ๋ฐ์์ ๋ก๋ง์๋ก ๊ทธ๋๋ก ํ๊ธฐํ์ง ์๋๋ค
- ํน์ ๋ฌธ์๋ ๊ฐ๊ธ์ ์ฌ์ฉํ์ง ์๋๋ค. ๋จ, ์์์ ์ด๋ฆ์์ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฉ๋์ Private ์ง์์ ํ์๋ฅผ ์ํ์ฌ ์ธ๋์ค์ฝ์ด(_)๋ฅผ ์ฌ์ฉํ๋ค
- 2๊ธ์ ์ด์ ๋๋ฌธ์๋ฅผ ์ฐ์ํด์ ์ฌ์ฉํ์ง ์๋๋ค. ๋จ, ์์ ์ด๋ฆ์ด๋ ์ฝ์ด๋ ์์ธ๋ก ํ๋ค
- ์์ ์ด๋ฆ์ด๋ ์ฝ์ด ์ด๋ฆ์ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค
- ์ด๋ฆ์ ํตํด ์ญํ ๊ณผ ๋ชฉ์ ์ ํ ์ ์๋๋ก ๊ฐ๊ฒฐํ๊ณ ๋ช ๋ฃํ๊ฒ ์์ฑํ๋ค
3.1 ํจ์: ์นด๋ฉ ํ๊ธฐ๋ฒ (CamelCase)
- ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค
- ์นด๋ฉ ํ๊ธฐ๋ฒ์ ์ค์ํ๋ค. ๋ณตํฉ์ด ์ด๋ฆ์ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ์์ฑํ๊ณ , ๋ ๋ฒ์งธ ์ด์์ ๋จ์ด ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์์ฑํ์ฌ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๋ค.
- Getter, Setter ๋ฉ์๋๋ ๋ฐ๋์ 'get + ๋ฉค๋ฒ๋ณ์ ์ด๋ฆ', 'set + ๋ฉค๋ฒ๋ณ์ ์ด๋ฆ' ํ์์ผ๋ก ์์ฑํ๋ค. ๋จ, Getter ๋ฉ์๋์ ๋ฐํ๊ฐ์ด Boolean ์ธ ๊ฒฝ์ฐ get ๋์ is ์กฐํฉ์ ์ฌ์ฉํ๋ค
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฉ์๋๋ handle + ์ด๋ฒคํธ๋ช ์ผ๋ก ์์ํ๋๋ก ์ ์ํ๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ ์ด๋ฒคํธ๊ฐ ์๋๋ผ ํน์ ๋ชจ๋์ด๋ ํจ์์์ ๋น๋๊ธฐ ์ฝ๋ฐฑ ํจ์(์ด๋ฒคํธ) ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋์ผํ๋ค.
// ๋์ ์
apple();
car();
// ์ข์ ์
isChecked();
getElement();3.2 ๋ณ์: ์นด๋ฉ ํ๊ธฐ๋ฒ (CamelCase)
- ๋ณ์๋ช ์ ๊ธธ์ด๋ ์ข์ผ๋ ํ ๋์ ์์๋ณผ ์ ์๋๋ก ์ต๋ํ ๋ช ์์ ์ผ๋ก ์์ฑํ๋ค
- ๋ณ์ ์ด๋ฆ์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค
- ์นด๋ฉ ํ๊ธฐ๋ฒ์ ์ค์ํ๋ค. ๋ณตํฉ์ด ์ด๋ฆ์ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ์์ฑํ๊ณ , ๋ ๋ฒ์งธ ์ด์์ ๋จ์ด ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์์ฑํ์ฌ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๋ค.
- ๋ณ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ก ์ฐ์๋ ๋ ๊ฐ์ ์ธ๋์ค์ฝ์ด(__) ๊ธฐํธ์ ๋ฌ๋ฌ ๊ธฐํธ($)๋ ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ณ์ ์ด๋ฆ์ ํ ๊ธ์ ์ด์์ผ๋ก ์ฌ์ฉ ์๋๋ฅผ ์ถฉ๋ถํ ์ ์ ์์ ๋งํผ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ๊ฒ ์์ฑํ๋ค. ๋จ, ์์ ๋ณ์๋ ํ ๊ธ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ค.
- JavaScript ํ์ผ์ ํ๋์ ๋๋ ํ ๋ฆฌ ์๋์ ์๋ธ ๋๋ ํ ๋ฆฌ ๋จ์๋ก ๋๋์ด ์์ฑํ๋ค.
- JavaScript ํ์ผ์ ๋ค์์คํ์ด์ค๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ๋จ์๋ก ๊ตฌ์ฑํ๋ค. ํ์ผ ์ด๋ฆ ๊ท์น์ ๊ฐ๊ฐ ๋ค์์คํ์ด์ค + ๋ชจ๋ ์ด๋ฆ ๊ท์น์ ๋ฐ๋ฅธ๋ค

- ์ ํจํ๊ณ ์ฝ์ ์ ์๋ DOM ์์ฑ
- ์ธ๋ผ์ธ ์คํ์ผ๊ณผ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ
- ์น ์ ๊ทผ์ฑ ์ค์ํ๊ธฐ
- ์ด๋ฏธ์ง์ alt ํ๊ทธ ์ฌ์ฉ
- ํ์ด์ง ๋จ ํ๋์ h1
- ์ ๋ชฉ ๋ฐ ๋ฉํ ํ๊ทธ ์ฌ์ฉ(SEO ์ต์ ํ)
- html์ ์ ํจ์ฑ์ ๊ฒ์ฌ
- ์ด๋ฏธ์ง ๋ฐ ์ฑ๋ฅ ์ต์ ํ ๊ฒ์ฌ
-
class ๋ช ๋ช ๊ท์น : ๋ณธ์ธ์ด ๋งก์ ํ์ด์ง ๊ธฐ์ค e.g.
<div class="login-wrapper"></div> -
์ฌ๋ฐฑ px๊ฐ ๋ค๋ฅผ ๋ :
- ์ข์ธก ๊ธฐ์ค ์ฌ๋ฆผ์ผ๋ก ์ง์ ๋ง์ถ๊ธฐ
-
์ข์ฐ px๊ฐ ๋ค๋ฅผ ๋ :
- ํฐ ๊ฐ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฆผ์ผ๋ก ๋ง์ถ๊ธฐ
-
์ด๋ฏธ์ง export :
- ์ด๋ฏธ์ง ํ์ฅ์๋ .png๋ก ํต์ผ
-
๋ฏธ๋์ด ์ฟผ๋ฆฌ ์ฌ์ฉ
-
๋ง์ง์์ flex ์์๋ ๋ง์ง์์๊ฐ ์ผ์ด๋์ง ์์ผ๋ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค. flex๊ฐ ์๋๋ผ๋ฉด ๋ฐ์ ์ฌํญ ์งํค๊ธฐ ์์ ์์๋ margin-top ๋ง ์ฌ์ฉํ๋ค. ๋ถ๋ชจ ์์๋ padding ์ผ๋ก ์กฐ์ , margin ์ฌ์ฉํ์ง ์๋๋ค. ๋น ์์๋ height , min-height , max-height ์ ์ค ํ๋๋ฅผ ์ค๋ค.
-
์ํฉ์ ๋ฐ๋ฅธ ์ ์ ํ ๋จ์ ์ฌ์ฉ
-
rem ๋จ์
- ํฐํธ์ฌ์ด์ฆ, ๋ง์ง, ํจ๋ฉ.
-
px ๋จ์
- ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ ์๊ด์์ด ์ ํํ ๊ณ ์ ๋ ์ฌ์ด์ฆ์ฌ์ผ ํ ๋.
- border-radius, border-line
- ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ ์๊ด์์ด ์ ํํ ๊ณ ์ ๋ ์ฌ์ด์ฆ์ฌ์ผ ํ ๋.
-
๋ฐฑ๋ถ์จ(%) ๋จ์
- ๊ฐ๋ก ๋น์จ์ ๋ฐ๋ฅธ ๋ฐ์ํ์ ์ฌ์ฉํ๋ค.(๋ถ๋ชจ ์์์ ํฌ๊ธฐ์ ์ํฅ์ ๋ฐ์)
- ์ด๋ฏธ์ง์ ์ฌ์ฉ.
- ๋๋น๋ฅผ ์ฃผ๊ณ , ์ธ๋ก๋ auto๋ก ํ์ฌ ์ข ํก๋น๋ฅผ ๋ง์ถฐ ๋์ด๋๊ณ ์ค์ด๋ค๊ฒ ํ๋ค.(global style์ ์ ์ฉ๋์ด์๋ค.)
- vh(viewport height) ๋จ์
- ์ธ๋ก ๋น์จ์ ๋ฐ๋ฅธ ๋ฐ์ํ์ ์ฌ์ฉํ๋ค.(๋ณด์ฌ์ง๋ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ์ํฅ์ ๋ฐ์)
-
float, flex, grid
- ์ฃผ ๋ ์ด์์์ flex๋ก ์ฒ๋ฆฌํ๋ค.
- float์ grid๋ ์ฌ์ฉ์ ์ง์ํ๋ค.