작업 폴더에 .sql 파일이 40개쯤 쌓여 있었다. 조회용과 수정용과 임시로 만든 것이 섞여 있었다. 재고를 확인하려고 stock_check.sql 을 돌렸는데 그 안에 UPDATE 가 들어 있었다.
Table of contents
Open Table of contents
증상 — 이름으로는 구분이 안 됐다
폴더를 봤다.
stock_check.sql
stock_check2.sql
stock_fix.sql
백업.sql
스크래치.sql
temp.sql
temp2.sql
확인용.sql
...
이름만으로 무엇을 하는지 알 수 없다. stock_check.sql 은 SELECT 로 확인하고 나서 고치는 것까지 들어 있었다.
만들 당시에는 알았는데 몇 주 지나면 모른다. 이번에는 대상 건수가 적어서 크게 번지지 않았지만 조건이 넓은 파일이었으면 사고가 됐을 것이다.
폴더를 나눴다
폴더를 둘로 나눴다.
sql/
select/ 조회만 (SELECT, EXPLAIN, SHOW)
change/ 변경 포함 (UPDATE, DELETE, INSERT, ALTER)
select/ 안의 파일은 뭘 돌려도 상태가 안 바뀌어 마음 놓고 돌린다. change/ 안의 파일은 반드시 읽고 돌린다.
이름 규칙도 정했다.
change/20140404_stock_qty_fix.sql
select/stock_by_warehouse.sql
변경 파일에는 날짜를 넣었다. 한 번 쓰고 마는 것이라 언제 것인지가 중요하다. 조회 파일은 계속 쓰는 것이라 날짜 없이 내용으로 이름을 짓는다.
폴더와 이름 둘 다 같은 것을 말하게 했다. 하나만 있으면 옮기다 섞였을 때 구분이 안 된다.
변경 파일에 머리말을 달았다
변경 파일 맨 위에 무엇을 하는지 적게 했다.
-- 목적: 2014-03 입고분 중 수량이 음수인 행 보정
-- 대상: stock 테이블, warehouse_no = 1
-- 예상 건수: 23
-- 백업: stock_bak_20140404
-- 작성: 2014-04-04
-- 1) 대상 확인
SELECT COUNT(*) FROM stock WHERE qty < 0 AND warehouse_no = 1;
-- 2) 백업
CREATE TABLE stock_bak_20140404 AS
SELECT * FROM stock WHERE qty < 0 AND warehouse_no = 1;
-- 3) 보정
UPDATE stock SET qty = 0 WHERE qty < 0 AND warehouse_no = 1;
-- 4) 확인
SELECT COUNT(*) FROM stock WHERE qty < 0 AND warehouse_no = 1; -- 0 이어야 함
번호를 붙여서 순서대로 돌리게 했다. 예상 건수를 적어 두면 실행 뒤 나오는 행 수와 대조할 수 있고 백업 자리가 있으니 안 뜬 것을 알아챈다.
4번에 무엇이 나와야 하는지 적어 두니 확인이 명확해졌다. 그냥 확인하라고 적으면 무엇을 보는지 사람마다 다르다.
파일을 통째로 붙여 넣으면 확인 단계가 무의미하다. 전부 순식간에 돌기 때문이다.
-- 주의: 통째로 실행하지 않는다. 1) → 4) 순서로 하나씩 돌린다.
적어 둔다고 안 하게 되는 것은 아니지만 급할 때 한 번 멈추게 하는 효과는 있었다.
다 쓴 것과 남은 것
변경 파일은 한 번 쓰고 나면 필요 없다. 다만 무엇을 했는지 기록으로는 남긴다.
change/
done/
20140404_stock_qty_fix.sql
돌린 것은 done/ 으로 옮긴다. 남아 있는 파일은 아직 안 돌린 것이라 폴더를 보면 밀린 게 있는지가 바로 보인다.
조회 파일도 정리했다. 비슷한 것이 많아 하나로 합치고 조건은 주석으로 남겼다.
-- 창고별 재고 조회
-- 특정 창고만 보려면 아래 조건 주석 해제
SELECT p.name, s.qty
FROM stock s JOIN product p ON p.product_no = s.product_no
-- WHERE s.warehouse_no = 1
ORDER BY s.qty ASC;
40개가 12개로 줄었다. 파일이 적어지니 찾는 시간도 줄고 잘못 고르는 일도 줄었다.
정리
SELECT와UPDATE가 한 폴더에 있으면 잘못 돌린다- 파일 이름만으로는 몇 주 뒤에 무엇을 하는지 모른다
- 폴더를
select/와change/로 나눈다. 조회용은 마음 놓고 돌릴 수 있다 - 폴더와 이름 둘 다 같은 것을 말하게 한다
- 변경 파일에 목적·대상·예상 건수·백업을 머리말로 적는다
- 단계에 번호를 붙이고 확인 단계에 무엇이 나와야 하는지 적는다
- 통째로 붙여 넣지 않게 주의를 적어 둔다
- 다 쓴 변경 파일은
done/으로 옮긴다. 남아 있으면 안 돌린 것이다 - 조회 파일은 비슷한 것을 합치고 조건을 주석으로 남긴다