공통코드는 여러 화면과 테이블에서 사용하는 분류값을 코드와 표시 이름으로 나누어 관리하는 방법입니다. 예를 들어 게시판에는 B01을 저장하고, 화면에는 ‘일반게시판’을 표시합니다. 이 글에서는 게시판 종류와 회원 역할을 구분하는 작은 코드 테이블을 직접 만들어 봅니다.
2018년의 학습 메모를 2026년 10월 16일에 예제 중심으로 보완했습니다. 아래 구조는 설계 예시이며 모든 시스템에 적용해야 하는 표준은 아닙니다.
코드와 이름을 왜 나눌까?
게시글마다 ‘일반게시판’이라는 이름을 저장하면 명칭을 변경할 때 여러 데이터를 수정해야 할 수 있습니다. 코드와 이름을 분리하면 게시글의 분류값을 유지하면서 표시 이름을 관리할 수 있습니다. 다만 과거 화면의 명칭까지 보존해야 하는 서비스라면 별도의 이력 설계가 필요합니다.
그룹도 구분합니다. BOARD_TYPE은 게시판 종류, USER_ROLE은 회원 역할입니다. 코드만으로 찾지 않고 그룹과 코드를 함께 사용하면 서로 다른 분류의 값이 섞이는 실수를 줄일 수 있습니다.
테이블을 만들고 게시판 종류 조회하기
아래 예제는 빈 테스트 데이터베이스에서 실행하세요. Python의 SQLite 메모리 데이터베이스에서 생성·조회 및 중복 키 거부를 확인했습니다. MySQL·Oracle 실서버에서 실행한 결과는 아닙니다.
CREATE TABLE common_code (
code_group VARCHAR(30) NOT NULL,
code VARCHAR(20) NOT NULL,
code_name VARCHAR(100) NOT NULL,
sort_order INTEGER NOT NULL,
active CHAR(1) NOT NULL,
PRIMARY KEY (code_group, code)
);
INSERT INTO common_code VALUES
('BOARD_TYPE', 'B01', '일반게시판', 1, 'Y'),
('BOARD_TYPE', 'B02', '질문게시판', 2, 'Y'),
('BOARD_TYPE', 'B03', '사진게시판', 3, 'Y'),
('USER_ROLE', 'U01', '일반회원', 1, 'Y'),
('USER_ROLE', 'U09', '관리자', 2, 'Y');
SELECT code, code_name
FROM common_code
WHERE code_group = 'BOARD_TYPE' AND active = 'Y'
ORDER BY sort_order, code;
조회 결과:
B01 | 일반게시판
B02 | 질문게시판
B03 | 사진게시판복합 기본 키는 같은 그룹 안의 코드 중복을 막습니다. sort_order는 화면 정렬 순서, active는 신규 선택 가능 여부를 표현하는 예시입니다. 이 테이블을 만든 것만으로 다른 업무 테이블의 코드값까지 검증되지는 않습니다. 참조 관계와 그룹 제약을 별도로 설계해야 합니다.
운영 전에 정할 네 가지 규칙
- 의미가 바뀌면 코드를 재사용하지 않기. 기존 데이터의 해석이 달라지지 않도록 새 코드를 검토합니다.
- 사용 중인 코드는 삭제보다 비활성화 검토. 신규 입력에서 숨겨도 과거 데이터의 이름은 조회할 수 있어야 합니다.
- 수정 권한과 변경 기록 정하기. 누가 이름·순서·활성 상태를 바꿨는지 추적합니다.
- 캐시 갱신 시점 정하기. 관리 화면에서 고친 이름이 서비스에 언제 반영될지 명확히 합니다.
회원 역할 코드를 저장하는 것과 접근 권한을 검사하는 것은 별개입니다. 클라이언트가 보낸 U09 값을 믿고 관리자 권한을 부여하면 안 됩니다.
공통코드 테이블과 enum 중 무엇을 쓸까?
배포 없이 운영자가 표시 이름이나 선택 항목을 관리해야 한다면 코드 테이블을 고려할 수 있습니다. 값이 프로그램의 분기와 강하게 연결되고 코드 변경과 함께 검토되어야 한다면 enum이 더 단순할 수 있습니다. 모든 상태값을 한 테이블에 몰아넣기보다 변경 주체와 참조 규칙을 먼저 정하는 편이 좋습니다.