웹에이전시 전문 프리랜서 개발자 프리터코더입니다.
이번 챕터에서는 웹사이트 개발 과정 중 메뉴 테이블 만들기를 작업합니다.
<메뉴 테이블 만들기> 글은 웹에이전시의 의뢰를 받아서 프리터코더가 웹사이트를 개발하는 과정을 가상으로 보여주는 웹에이전시의 개발자들은 어떻게 일하나 시리즈 중 하나입니다.
먼저 데이터베이스를 만들겠습니다. 엑셀 파일을 하나 만든다고 생각하시면 됩니다.
create database miss420 character set utf8mb4 collate utf8mb4_general_ci;
메뉴 테이블은 카테고리에 비해 상대적으로 복잡합니다. 관리해야 할 항목이 몇 개 있어요.
먼저 필요한 항목들을 기획서를 바탕으로 정리해 봅니다.
| 열 이름 | 열 영어 이름 | 타입 | 제약 | 필수여부 | 비고 |
|---|---|---|---|---|---|
| 이름 | name | 문자 | 최대 20글자 | O | - |
| 설명 | description | 문자 | 최대 200글자 | O | - |
| 대표이미지 | image_url | 문자 | 최대 512 글자 | O | 첨부한 이미지 경로 |
| 카테고리 | category_id | 문자 | 4글자 | O | 무조건 4글자 고정 |
| 베스트 메뉴 | best_menu_yn | 문자 | 1글자 | O | Y 혹은 N, 기본은 N |
기획자 팁
개발자가 기획서 화면을 보고 짐작하게 하는 대신, 위와 같은 표를 그리면 일 잘하는 기획자라는 칭찬을 듣게 됩니다.
기획자 팁
이미지같은 경우 데이터베이스에 바로 넣는 것이 아니라 서버에 저장하고 그 경로만 따로 가지고 있습니다.
정리된 테이블 정보를 가지고 테이블을 생성합니다. 엑셀 탭에 헤더를 설정한다고 생각하시면 됩니다.
CREATE TABLE IF NOT EXISTS `menu_item` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`description` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`image_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`category_id` char(4) DEFAULT NULL,
`best_menu_yn` char(1) DEFAULT 'N',
`insert_dt` datetime NOT NULL DEFAULT current_timestamp(),
`update_dt` datetime DEFAULT NULL ON UPDATE current_timestamp(),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
쿼리를 실행하면 이런 결과가 보여집니다.

스프레드 시트 형식으로 보면 이런 식입니다.

쿼리를 읽을 줄 아시는 분이라면 테이블 이름이 menu 가 아니라 menu_item 임을 눈치채셨을텐데요. 데이터베이스 테이블 이름은 짓기 나름이지만, 대부분의 사람들이 비슷하게 쓰는 테이블 이름들이 있습니다.
예를 들어 상품은 product 혹은 goods , 네비게이션 메뉴는 menu 혹은 gnb 등입니다.
테이블 이름을 menu 로 짓게 되면 네비게이션 메뉴 테이블인지 아니면 상품 메뉴인지 알 수가 없기 때문에 menu_item 으로 이름붙여서 구분짓습니다.
기획자 팁
gnb 도 일반적으로 메뉴라고 부르고, 상품의 경우도 이름이 "메뉴" 입니다. 서로 다른 항목인데 같은 이름으로 불리는겁니다.
이런 경우 gnb 를 "메뉴" 대신 "gnb" 라고 명명한다던가, 혹은 gnb 를 "메뉴" 로 부를 꺼면 상품을 "메뉴" 라고 부르는 식으로 두개의 개념을 분리해야 합니다.
기획자 분의 역할이 중요합니다.