Skip to content
isdnetworks
Go back

볼 때마다 같은 구조를 다시 파악했다

인계받은 시스템에서 문제를 볼 때마다 같은 것을 다시 확인했다. 상품이 어느 테이블에 있고 옵션이 어디 붙고 재고가 어느 단위인지였는데 세 번쯤 같은 조회를 돌린 뒤에 적기로 했다.

Table of contents

Open Table of contents

매번 하는 것을 적었다

문제를 볼 때 항상 하는 조회가 있었다.

DESC product;
DESC product_option;
SHOW CREATE TABLE product_option;
SELECT * FROM product WHERE product_no = ? \G

관계를 파악하는 데 10분쯤 걸리고 며칠 뒤에 또 한다. 그 10분이 문제를 보는 시간에서 빠져나가고 있었다.

한 번 정리해서 문서로 만들었다.

상품 구조

product              상품 (마스터)
  product_option     옵션. product_no 로 연결. 상품당 0~N개
  product_image      이미지. product_no 로 연결. sort_no 순
  stock              재고. option_no 단위 (product_no 아님)

주의
- 재고는 옵션 단위다. 옵션이 없는 상품은 option_no=0 인 행이 있다
- product.price 는 기본가. 실제 판매가는 option.price
- 삭제는 del_yn='Y' 표시만. 물리 삭제 안 함

주의 항목이 특히 도움이 됐다. 이것 때문에 세 번 헷갈렸다.

골격과 세부를 나눴다

전부 적으면 문서가 커지고 낡는다. 자주 쓰는 것만 적었다.

골격에 넣은 것은 주요 테이블과 관계와 어느 단위로 자료가 쌓이는지와 헷갈리기 쉬운 것이다. 안 넣은 것은 컬럼 목록과 잘 안 쓰는 테이블과 화면별 상세 흐름이다.

컬럼은 SHOW CREATE TABLE 이 정본이니 문서에 적으면 두 벌이 된다. 스키마에서 알 수 없는 것만 적는 것이 기준이 됐다.

확인하는 쿼리를 같이 뒀다

문서에 조회 예시를 붙였다.

-- 상품 하나의 전체 구조 보기
SELECT p.product_no, p.name, o.option_no, o.name AS opt, s.qty
FROM product p
LEFT JOIN product_option o ON o.product_no = p.product_no
LEFT JOIN stock s ON s.option_no = o.option_no
WHERE p.product_no = ?;

이 한 줄이면 구조가 보인다. 다음 사람이 DESC 부터 안 해도 되고 JOIN 조건을 처음부터 찾지 않아도 된다. 문서를 읽는 것보다 돌려 보는 것이 빠른 경우가 많았다.

영역별로 한 장씩

상품이 되고 나니 주문과 정산도 같은 것이 필요해서 각각 한 장씩 만들었다.

docs/domain/product.md
docs/domain/order.md
docs/domain/settle.md

만드는 데 각 한 시간쯤 걸렸고 그 뒤로 문제를 볼 때 여기서 시작한다. 처음부터 전체를 그리려고 했으면 시작도 못 했을 텐데 필요한 영역이 생길 때마다 하나씩 만드는 방식이 실제로 진행됐다.

검증 — 낡는 것을 막는 방법

문서는 낡는다. 스키마가 바뀌면 문서와 어긋난다. 두 가지를 했다.

먼저 확인 쿼리를 실제로 돌려 본다. 문서의 예시 쿼리를 주기적으로 실행하면 컬럼이 없어졌을 때 Unknown column 이 나고 표가 없어졌으면 ER_NO_SUCH_TABLE 이 난다.

for f in docs/domain/*.md; do
  # 예시 쿼리를 뽑아서 실행
done

다음으로 스키마 변경 시 문서를 같이 본다. 변경 스크립트를 만들 때 관련 문서가 있는지 확인하는 항목을 넣었다. 완벽하지는 않지만 크게 어긋나는 것은 잡힌다.

처음에는 아는 것을 다 적으려다 문서가 길어져서 기준도 정했다. 이것을 몰라서 시간을 쓴 적이 있는지로 가른다.

재고가 옵션 단위라는 것은 세 번 헷갈렸으니 적고 product 테이블에 컬럼이 몇 개인지는 헷갈린 적 없으니 안 적는다. 이 기준으로 다시 훑으니 문서가 절반이 됐고 읽기 쉬워졌다.

정리


Share this post on:

Previous Post
검색만을 위한 테이블이 따로 있었다
Next Post
로그에 변동량과 총액이 같이 있었다