웹에이전시 전문 프리랜서 개발자 프리터코더입니다.
이번 챕터에서는 웹사이트 개발 과정 중 백오피스 매장 데이터베이스 설계를 작업합니다.
<매장 등록 백오피스 데이터베이스 설계> 글은 웹에이전시의 의뢰를 받아서 프리터코더가 웹사이트를 개발하는 과정을 가상으로 보여주는 웹에이전시의 개발자들은 어떻게 일하나 시리즈 중 하나입니다.
매장 등록은 백오피스 개발이 필요할 것 같습니다. 프렌차이즈니만큼 매장이 새로 생기기도 하고, 주소를 옮기기도 하고, 때론 폐업을 하기도 할 테니까요.
사용자사이트에서 확인할 수 있는 매장 정보는 [이름, 주소, 전화번호, 운영시간, 가까운 역, 매장 서비스] 입니다.

이 외에 매장의 위치 정보도 필요하죠. 우리가 소위 위도와 경도라고 부르는데요. 이 정보가 있어야 지도상에서 매장이 어디에 위치하는지 알 수 있습니다.
따라서 [이름, 주소, 전화번호, 운영시간,가까운 역, 매장 서비스, 위도, 경도, 노출 여부] 항목을 포함하는 데이터베이스 테이블을 생성하겠습니다.
기획자 팁
이번에도 데이터베이스를 설계해야 하므로 각 항목에 해당하는 타입과 길이, 필수 여부를 정해야 합니다.
표로 그려주시면 감사하겠습니다 :-)
그런데 이런, 기획자 분이 휴가라고 하시네요. 아직 각 항목별로 타입과 길이, 필수여부를 정하지 못했는데요.
이럴 때는 임의로 데이터베이스를 설계한 후, 나중에 수정하는 방법으로 진행합니다.
임시로 기본 필드를 제외한 문자열 항목을 255 길이를 가진 문자열로 설정합니다. 단 위도와 경도는 소수점이 있는 숫자여야 하므로 FLOAT 입니다.
CREATE TABLE `store` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL,
`addr` VARCHAR(255) NULL,
`tel` VARCHAR(255) NULL,
`biz_hours` VARCHAR(255) NULL,
`near_station` VARCHAR(255) NULL,
`lat` FLOAT NULL,
`lon` FLOAT NULL,
`visible_yn` CHAR(1) NOT NULL DEFAULT 'Y',
`insert_dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`update_dt` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
;
매장 서비스 항목이 구체적으로 어떤 정보를 담고 있는지 몰라서 백오피스 기획서를 확인해 봅니다.
[주차, 포장, 무선인터넷, 화장실, 국민지원금] 중 해당하는 항목을 체크하고 저장하는 방식으로 되어 있습니다.

이처럼 "매장" 하나에 "여러개의 옵션"이 붙는 경우에는 데이터베이스 설계가 조금 더 필요해집니다.
구현은 여러 방법으로 할 수 있는데, 가장 간단한 방법으로는 문자열로 이어붙이는 것이고 정석적인 방법으로는 자식 테이블을 만들어서 하나씩 데이터를 관리하는 겁니다.
개인적으로 웹에이전시의 구현은 최대한 간단해야 한다고 믿습니다. 따라서 문자열을 이어붙이는 방법으로 구현하기 위해 매장 서비스 컬럼을 추가합니다.
ALTER TABLE `store`
ADD COLUMN `hall_service` VARCHAR(512) NULL DEFAULT NULL AFTER `near_station`;
테이블 스키마는 아래와 같습니다.
