• ABOUT
  • PORTFOLIO
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2025.09.05Tips

๐Ÿค ์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ๊ฐ€์ด๋“œ

1. ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์˜ ์ค‘์š”์„ฑ

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‹œ๊ฐ„์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ์••๋„์ ์œผ๋กœ ๊ธธ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ค‘์š”ํ•œ ๋‹จ์„œ๊ฐ€ ๋œ๋‹ค.

์ผ๊ด€๋œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒ€ ๋‚ด ์˜์‚ฌ์†Œํ†ต ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ํ˜‘์—… ํšจ์œจ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ๋„ค์ด๋ฐ ์Šคํƒ€์ผ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. 


2. ์ด๋ฆ„ ํ‘œ๊ธฐ ๋ฐฉ์‹ (Case ์Šคํƒ€์ผ)

๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ‘œ๊ธฐ ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค. ๊ฐ ์Šคํƒ€์ผ์€ ์‚ฌ์šฉ ๋ชฉ์ ๊ณผ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์„ ํƒ๋˜๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ์ด๋ฆ„ ํ‘œ๊ธฐ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


- PascalCase (UpperCamelCase)

๋ชจ๋“  ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ์‹

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๊ตฌ์กฐ์ฒด ๋ช…๋ช…์— ์‚ฌ์šฉ๋œ๋‹ค. Java, C#, TypeScript ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ ํƒ€์ž…์„ ์ •์˜ํ•  ๋•Œ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ˆ์‹œ) UserAccount, PaymentService, OrderRepository


- camelCase (lowerCamelCase)

์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ๋‹จ์–ด๋ถ€ํ„ฐ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ์‹

๋ณ€์ˆ˜, ํ•จ์ˆ˜/๋ฉ”์„œ๋“œ ๋ช…๋ช…์— ์‚ฌ์šฉ๋œ๋‹ค. Java, JavaScript์˜ ํ•ต์‹ฌ ํ‘œ์ค€ ๋ฐฉ์‹์ด๋‹ค.

์˜ˆ์‹œ) userId, calculateTotal(), isAvailable


- UPPER_SNAKE_CASE (SCREAMING_SNAKE_CASE)

๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ ๋‹จ์–ด ์‚ฌ์ด๋ฅผ ์–ธ๋”๋ฐ”(_)๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

์ƒ์ˆ˜(Constant) ์ •์˜์— ์‚ฌ์šฉ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋‚ด์—์„œ ์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ์‹œ) MAX_LIMIT, API_KEY, DEFAULT_TIMEOUT


- lower_snake_case

๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ ๋‹จ์–ด ์‚ฌ์ด๋ฅผ ์–ธ๋”๋ฐ”(_)๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

Python, Ruby, C ์–ธ์–ด์˜ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜๋ช…, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋Ÿผ๋ช…, JSON ํ‚ค๊ฐ’์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๊ณต๋ฐฑ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ๊ฐ€๋…์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€์ด๋‹ค.

์˜ˆ์‹œ) user_id, created_at, get_data()


- kebab-case

๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ ๋‹จ์–ด ์‚ฌ์ด๋ฅผ ํ•˜์ดํ”ˆ(-)์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

HTML ํƒœ๊ทธ์˜ ID/Class, CSS ์†์„ฑ๋ช…, URL ๊ฒฝ๋กœ์— ์‚ฌ์šฉ๋œ๋‹ค. ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ์˜ ๋ฐฉ์‹์ด๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ณ€์ˆ˜๋ช…์œผ๋กœ๋Š” ํ•˜์ดํ”ˆ์ด ๋งˆ์ด๋„ˆ์Šค(-) ์—ฐ์‚ฐ์ž๋กœ ์ธ์‹๋˜์–ด ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์˜ˆ์‹œ) main-container, background-color, /api/user-profile


3. ์‹ค์ œ ์ฝ”๋“œ์—์„œ์˜ ๋„ค์ด๋ฐ ์›์น™

๋‹จ์ˆœํ•œ ํ‘œ๊ธฐ๋ฒ• ์™ธ์—๋„ ์‹ค์ œ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋„ค์ด๋ฐ ์›์น™์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ์ข‹์€ ์ด๋ฆ„์€ ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋ฉฐ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค.

  • ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„ ์‚ฌ์šฉ
    ๋ณ€์ˆ˜๋ช…์€ ์šฉ๋„๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋‹จ์ผ ๋ฌธ์ž๋‚˜ ์˜๋ฏธ ์—†๋Š” ์•ฝ์–ด ์‚ฌ์šฉ์„ ์ง€์–‘ํ•œ๋‹ค.
  • Boolean ๋ณ€์ˆ˜์˜ ์ ‘๋‘์‚ฌ
    ์ฐธ/๊ฑฐ์ง“์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋Š” ์งˆ๋ฌธ ํ˜•ํƒœ์˜ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ธ๋‹ค.
    ์˜ˆ์‹œ) isAvailable, hasToken, canExecute, shouldRedirect
  • ์•ฝ์–ด ์ฒ˜๋ฆฌ ๋ฐฉ์‹
    HTTP, URL, API์™€ ๊ฐ™์€ ์•ฝ์–ด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ํŒ€์˜ ๊ทœ์น™์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.
    ์˜ˆ์‹œ) getHTTPRequest ํ˜น์€ getHttpRequest
  • ๋™์‚ฌ-๋ช…์‚ฌ ๊ตฌ์กฐ
    ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋™์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค.
    ์˜ˆ์‹œ) getUserData(), inputValidator(), sendEmail()


4. ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ์ ์šฉ ์˜ˆ์‹œ

์•ž์„œ ์†Œ๊ฐœํ•œ ๋„ค์ด๋ฐ ์Šคํƒ€์ผ์„ ์‹ค์ œ ์ฝ”๋“œ์— ์ ์šฉํ•ด ๋ณด์ž.

// ๋‚˜์œ ์˜ˆ
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์—์„œ๋Š” ๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ URL ์„ค๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. URL์— /api/v1๊ณผ ๊ฐ™์€ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜๋ฉด ํ–ฅํ›„ API ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋Š” ๋ช…์‚ฌ ํ˜•ํƒœ์˜ ๋ณต์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ kebab-case๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ camelCase๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋˜ํ•œ URL์—์„œ ๋™์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  HTTP ๋ฉ”์„œ๋“œ(GET, POST, PATCH ๋“ฑ) ์ž์ฒด๋กœ ๋™์ž‘์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.


-- ์ข‹์€ ์˜ˆ
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 ํ™˜๊ฒฝ์—์„œ๋„ ํ˜ธํ™˜์„ฑ์ด ๋†’๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

์ด์ „ ๊ธ€
๐ŸŽฎ Controlled์™€ Uncontrolled - ๋ฆฌ์•กํŠธ ํผ ์ปดํฌ๋„ŒํŠธ ์ดํ•ดํ•˜๊ธฐ
๋‹ค์Œ ๊ธ€
๐Ÿงฉ Spring Bean ๋“ฑ๋ก ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ: @Component๋ถ€ํ„ฐ @Repository๊นŒ์ง€
์žฅ์‹์šฉ ๋กœ๊ณ