Skip to content
isdnetworks
Go back

조회인 줄 알고 돌렸는데 변경이었다

작업 폴더에 .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.sqlSELECT 로 확인하고 나서 고치는 것까지 들어 있었다.

만들 당시에는 알았는데 몇 주 지나면 모른다. 이번에는 대상 건수가 적어서 크게 번지지 않았지만 조건이 넓은 파일이었으면 사고가 됐을 것이다.

폴더를 나눴다

폴더를 둘로 나눴다.

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개로 줄었다. 파일이 적어지니 찾는 시간도 줄고 잘못 고르는 일도 줄었다.

정리


Share this post on:

Previous Post
행은 있는데 파일이 없었다
Next Post
누가 붙느냐가 구조를 정했다