๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ด ํ๋ ์ผ์ ์ฌ์ค์ ์ฝ๋ ์์ฑ๋ณด๋ค ์ฝ๋๋ฅผ ์ฝ๋ ์ผ์ด๋ค. ์ด๋ ๋ณ์๋ ํจ์์ ์ด๋ฆ์ ์ฝ๋์ ์๋ฏธ๋ฅผ ๋น ๋ฅด๊ฒ ํ์
ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ์ฅ ์ค์ํ ๋จ์์ด๋ค. ๋ํ ์ผ๊ด๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์
์ ํ ์ ์ฒด์ ํ์
ํจ์จ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ฌ์ค๋ค.
๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ค์ด๋ฐ ์คํ์ผ์ ๋ํด ์์๋ณด์.
๋ค์ด๋ฐ ์ปจ๋ฒค์
์๋ ์ฌ๋ฌ ๊ฐ์ง ํ๊ธฐ๋ฒ์ด ์กด์ฌํ๋ค. ๊ฐ ์คํ์ผ์ ์ฐ์์์ ๋ฐ๋ผ ์ ์ ํ ์ ํ๋๋ฉฐ ์๋๋ ๋ํ์ ์ธ ์ด๋ฆ ํ๊ธฐ๋ฒ๋ค๊ณผ ์ค๋ช
์ด๋ค.
PascalCase
- ๊ฐ ๋จ์ด์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ฐ๊ฒฐ
camelCase
- ์ฒซ ๋จ์ด๋ ์๋ฌธ์ ์ดํ ๋จ์ด๋ ๋๋ฌธ์๋ก ์์
UPPER_SNAKE_CASE
- ๋ชจ๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ์ฐ๊ณ ๋จ์ด๋ ๋ฐ์ค(_)๋ก ๊ตฌ๋ถ
lower_snake_case
- ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ์ฐ๊ณ ๋จ์ด๋ ๋ฐ์ค(_)๋ก ๊ตฌ๋ถ
kebab-case
- ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ์ฐ๊ณ ๋จ์ด๋ ํ์ดํ(-)์ผ๋ก ๊ตฌ๋ถ
BEM
- block__element--modifier ํจํด (CSS ํด๋์ค ๋ค์ด๋ฐ)
๊ฐ๊ฐ์ ์ผ์ด์ค๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
์์์ ์๊ฐํ ๋ค์ด๋ฐ ์คํ์ผ์ ์ค์ ์ฝ๋์ ์ ์ฉํด ๋ณด์.
// ๋์ ์
class user_service {}
const defaultTimeout = 5000
function Find_active_members(p, ps)
// ์ข์ ์
class UserService {}
const DEFAULT_TIMEOUT_MS = 5000
function findActiveMembers(page, pageSize)
๋ฌผ๋ก ๋ค์ด๋ฐ์ ์ ๋ต์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์์น์ ๋ฐ๋ฅธ๋ค. ์์๋ ๋ชจ๋ ๋๋ฌธ์(UPPER_SNAKE_CASE)๋ก ์์ฑํ๊ณ ๋ณ์๋ช
๊ณผ ํจ์๋ช
์ ์ถ์ฝ์ ํผํ๊ณ ๊ฐ๋ฅํ ๋ช
ํํ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ง๋ณด์์ ํ์
์ ์ ๋ฆฌํ๋ค.
// ๋์ ์
src/
EmployeeList/
employee_list.tsx
componentsShared/
my-button.tsx
// ์ข์ ์
src/
employee-list/
EmployeeList.tsx
EmployeeRow.tsx
shared-components/
Button.tsx
ํด๋ ๋ฐ ํ์ผ ๋ค์ด๋ฐ์๋ ์ผ๊ด๋ ์ปจ๋ฒค์
์ ์ ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋๋ ํฐ๋ฆฌ/ํ์ผ์ kebab-case๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
// ๋์ ์
GET /api/v1/getMemberList
POST /api/v1/deactivateMember?id=42
// ์ข์ ์
GET /api/v1/members?page=1&pageSize=20
PATCH /api/v1/members/42 { "isActive": false }
HTTP API ๋ค์ด๋ฐ์ ๊ฒฝ์ฐ /api/v1์ฒ๋ผ URL์ ๋ฒ์ ์ ๋ช
์ํ๋ฉด ์ถํ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ ๊ฐ๋ฅํ๋ฉฐ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ ๋ช
์ฌ ํํ์ ๋ณต์ํ(+kebab-case)๋ฅผ ์ฌ์ฉํ๋ค. ๋จ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ๊ฒฝ์ฐ camelCase๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
๋ํ ๊ฐ๊ธ์ ๋์ฌ๋ ์ง์ํ๊ณ HTTP ๋ฉ์๋ ์์ฒด๋ก ๋์์ ํํํ๋ ๊ฒ์ด ์ข๋ค.
-- ์ข์ ์
CREATE TABLE member (
id BIGINT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMP NOT NULL
);
CREATE UNIQUE INDEX uq_member__email ON member(email);
CREATE INDEX ix_member__created_at ON member(created_at);
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํ
์ด๋ธ, ์ปฌ๋ผ๋ช
์ lower_snake_case๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. SQL ํค์๋์ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถ์ด ์ฝ๊ณ ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์๋ RDBMS ์์์ ํธํ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ๊ฐ์ ์คํ์ผ์ ์ฐธ๊ณ ํ์ฌ ํ๋ก์ ํธ์ ๋ง๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์
์ ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ปจ๋ฒค์
์ ์ ํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์ ์ํ๋ฉด ์ข๋ค.
1) ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ์ผ๊ด๋ ๊ท์น์ ์ ์ฉํ๋ค.
2) ๊ฐ์ธ ๊ธฐ์ค์ด ์๋ ํ ์ ์ฒด์ ํฉ์๋ฅผ ํตํด ์ปจ๋ฒค์
์ ์ ์ํ๋ค. (+๋ฌธ์ํ)
3) usr, cnt, temp ๋ฑ ์๋ฏธ๊ฐ ๋ชจํธํ ์ถ์ฝ์ ํผํ๊ณ ์ง๊ด์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ค.
4) ์๋ฏธ ์๋ ๋ค์ด๋ฐ์ ์ฌ์ฉํ๋ค.
5) ์ฌ์ฉ ์ค์ธ ์ธ์ด๋ ํ๋ ์์ํฌ์ ์ปจ๋ฒค์
์ ๊ณ ๋ คํ๋ค.
์ผ๊ด๋ ์ปจ๋ฒค์
์ ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ ๋ํ ๋ฐฐ๋ ค์ด์ ํ์
์ ๊ธฐ๋ณธ์ด๋ค. ํ๊ณผ ํ๋ก์ ํธ์ ๋ง๋ ๋ค์ด๋ฐ ๊ท์น์ ์ ํ๊ณ ์ ์ง์ผ๋๊ฐ์!
