네이밍 컨벤션
전체 규칙 요약
| 대상 | 규칙 | 예시 |
| Java 클래스 | PascalCase | UserService, BoardController |
| Java 메서드/변수 | camelCase | getUserById, isActive |
| 상수 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT |
| DB 테이블/컬럼 | UPPER_SNAKE_CASE | T_USER, USER_NM |
| REST URL | kebab-case (소문자) | /api/user-posts/get |
| TS/JS 함수 | camelCase | getUserById, handleClick |
| CSS 클래스 | kebab-case | nav-link, sidebar-item |
| 패키지 | 소문자 | com.{회사명}.{프로젝트명}.user |
| .md 파일 | kebab-case | naming-convention.md |
메서드 네이밍 동사 규칙
| 성격 | Java 메서드명 | MyBatis ID |
| 조회 | get | get |
| 목록조회 | getList | getList |
| 전체 수 | getTotalCount | getTotalCount |
| 데이터 수 | getCount | getCount |
| 등록 | regist | regist |
| 수정 | update | update |
| 삭제 | delete | delete |
| 저장 | save | save |
| 취소 | cancel | - |
| 확인 | confirm | - |
DB 테이블/컬럼 네이밍
테이블명과 컬럼명은 UPPER_SNAKE_CASE를 사용한다.
-- 테이블명: T_ 접두사 + UPPER_SNAKE_CASE
CREATE TABLE T_USER (
USER_SN NUMBER NOT NULL, -- PK
USER_ID VARCHAR2(50) NOT NULL,
USER_NM VARCHAR2(100) NOT NULL,
USER_EMAIL VARCHAR2(200),
DEPT_SN NUMBER, -- FK
USE_YN CHAR(1) DEFAULT 'Y', -- Boolean
REG_DT TIMESTAMP WITH TIME ZONE,
UPD_DT TIMESTAMP WITH TIME ZONE,
PRIMARY KEY (USER_SN)
);
| 패턴 | 규칙 |
| 테이블명 | T_ 접두사 + UPPER_SNAKE_CASE |
| PK | {테이블명}_SN (SEQUENCE 사용) |
| FK | {참조테이블명}_SN → USER_SN, DEPT_SN |
| Boolean | _YN 접미사 → USE_YN, DEL_YN |
| 인덱스명 | IDX_{테이블명}_{컬럼명} |
VO 네이밍
// 단일 VO: [업무명]Vo
public class UserVo extends GeneralVO { ... }
public class BoardVo extends GeneralVO { ... }
public class ReservationVo extends GeneralVO { ... }
상수 관리
public final class UserConstant {
private UserConstant() {}
public static final String STATUS_ACTIVE = "Y";
public static final String STATUS_INACTIVE = "N";
public static final int MAX_LOGIN_RETRY = 5;
}
하드코딩 금지 대상:
- 상태값 (
"Y", "N", "A")
- 메시지 문자열
- 숫자 매직 넘버
- API URL
- 파일 경로
패키지 구조
com.{회사명}.{프로젝트명}
├── {업무명}/
│ ├── controller/
│ ├── service/
│ ├── mapper/
│ └── vo/
└── common/
├── config/
├── exception/
├── util/
└── vo/
CSS 클래스 네이밍 (BEM-like)
.sidebar {} /* 블록 */
.sidebar-item {} /* 요소 */
.sidebar-item--active {} /* 변형 */
.nav-link {}
.nav-link.active {} /* 상태 */
파일 네이밍
| 종류 | 규칙 | 예시 |
| Java 클래스 | PascalCase | UserController.java |
| Thymeleaf 템플릿 | kebab-case | user-list.html |
| CSS/JS | kebab-case | guide.css, guide.js |
| .md 문서 | kebab-case | naming-convention.md |
| MyBatis XML | PascalCase + Mapper | UserMapper.xml |