요약
행정 조직개편안이 하나 나오면, 그 조직을 전제로 써둔 우리 문서 대여섯 건이 한꺼번에 낡는다. “담당 팀: ○○○팀”이라고 적어둔 표가 전부 존재하지 않는 팀을 가리키게 된다.
이 글은 그걸 손으로 고치지 않고 처리하는 방법이다. 세 단계다 — ① 새 조직도를 정확히 읽고 ② 구·신 대응표를 사람이 판단해서 만들고 ③ 그 표로 문서 묶음을 일괄 치환한다. 실제로 전남광주통합특별시 통합조직도가 바뀌었을 때(5과 20팀 → 4과 12팀 + 담당관 3팀) 발제문 1건을 새로 짓고 참고문서 4종을 점검해 2종 22건을 30분 안에 갱신했다.
핵심은 ②가 기계 일이 아니라는 것이다. ①과 ③은 자동화되지만, “이 팀의 업무를 누가 받는가”는 사람이 판단한다. 자동화는 그 판단을 문서 전체에 빠짐없이 퍼뜨리는 데만 쓴다.
왜 이 기술인가
조직개편 때 우리 쪽이 흔히 겪는 일이 셋 있다.
첫째, 문서가 조용히 낡는다. 팀 이름 하나가 바뀌었을 뿐인데 계획서를 읽는 공무원 입장에서는 “이 사람들 지금 조직도를 모르는구나”가 된다. 내용이 아무리 좋아도 신뢰를 잃는다.
둘째, 손으로 고치면 꼭 빠뜨린다. 팀 이름은 본문보다 표 안에 훨씬 많이 들어 있고, 표 셀에서는 한글이 글자를 여러 조각으로 쪼개 저장해서 찾기(Ctrl+F)로도 안 잡히는 자리가 생긴다.
셋째, 기계적으로 바꾸면 말이 이상해진다. 두 팀이 하나로 합쳐졌다면 “A팀 주관, B팀 협업”이 “A팀 주관, A팀 협업”이 된다. 이건 자동 치환이 만들어내는 새 오류다.
그리고 무엇보다 — 대응표를 만드는 과정 자체가 개편안 비평이 된다. “이 구 팀에 대응하는 신 팀이 없다”는 칸이 하나 생기면, 그게 그 개편안의 가장 큰 구멍이다. 실제로 이번에도 에너지 물적자산을 담당하던 팀에 대응하는 팀이 본부 안에 없다는 사실이 대응표를 채우다가 드러났고, 그게 새 발제문의 핵심 논점이 됐다.
단계별 따라하기
1단계 — 조직도를 정확히 읽는다
행정 조직도 PDF는 과·팀 이름을 한 글자씩 세로로 쌓아 그린다. 칸이 좁기 때문이다. 그래서 PDF에서 텍스트를 그냥 뽑으면 ‘자 치 분 권 과’가 순서 없이 흩어진 채 나온다.
해법은 간단하다. 같은 x좌표(가로 위치)에 있는 글자를 한 열로 묶고 위에서 아래로 이으면 원래 이름이 복원된다. 파이썬 PyMuPDF로 열 글자의 좌표를 읽어 ±4pt 이내면 같은 열로 본다.
PYTHONIOENCODING=utf-8 python orgchart_columns.py 조직도.pdf 0 540 850 370 700
(파일) (쪽) (읽을 영역 x0 x1 y0 y1)
읽을 영역은 먼저 PDF를 그림으로 띄워 눈으로 잡는다. 화면 픽셀을 PDF 좌표로 바꾸는 식은
좌표 = 픽셀 ÷ 그림가로폭 × 페이지가로폭이다.
결과가 이렇게 나온다 — 과 이름, 정원, 그 아래 팀 이름 순서로 한 줄에 이어진다.
--- x=554.7
시|민|주|권|정|책|과 | 14 | 시민주권기획 | 시민협치숙의 | 시민참여예산평가
여기서 걸린 함정 둘.
- 콘솔이 한국어를 깨뜨린다. 윈도우 기본 인코딩(cp949) 때문에 결과가 전부
��로 보인다. 글자를 못 읽은 게 아니라 화면에 못 그린 것이다.PYTHONIOENCODING=utf-8만 붙이면 된다. - 도형으로 그린 글자는 안 잡힌다. 청사 구분 라벨(‘무 안’, ‘동 부’) 같은 건 텍스트가 아니라 그림이라 추출되지 않았다. 안 잡히면 추측하지 말고 “확인 필요”로 남겨야 한다.
정원 숫자가 과 이름 바로 아래 나오므로, 과별 정원을 더해 본부 전체 규모를 검산한다. 합이 안 맞으면 읽을 영역을 잘못 잡은 것이다.
2단계 — 구·신 대응표를 만든다 (사람이 하는 일)
여기가 이 작업의 본체다. 구 팀 하나하나에 대해 “그 업무를 어느 신 팀이 받는가”를 정한다. 표로 만들어 문서에 그대로 싣는다. 이 표가 곧 3단계의 치환 규칙이 된다.
| 구 팀 | 신 팀 | 이관·통합 내용 |
|---|---|---|
| 시민주권지원팀 | 시민협치숙의팀 | 위원회 사무지원·추첨제 시민회의·시민참여수당 |
| 시민정책플랫폼팀 | 시민협치숙의팀 | 디지털 플랫폼·통합콜센터를 협치숙의로 통합 |
| 에너지기본사회팀 | 대응 팀 없음 | 물적 자산 담당이 본부 밖으로 — 이 개편안의 최대 공백 |
채우면서 반드시 확인할 네 가지가 있다.
- 대응이 비는 칸 — 기능이 다른 부서로 갔는지, 아예 사라졌는지. 이게 쟁점이다.
- 두 팀이 하나로 합쳐지는 칸 — 3단계에서 “A 주관, A 협업” 같은 중복 문장이 생긴다.
- 마커의 의미 변화 — ❶❷❺ 같은 번호를 붙여 썼다면, 소속이 바뀐 팀 앞의 낡은 번호도 지워야 한다.
- 다른 부서와의 중복 — 새 조직도 어딘가에 같은 업무를 가진 과가 생겼을 수 있다.
3단계 — 문서 묶음을 일괄 치환한다
대응표를 옛말<탭>새말 한 줄씩 적은 규칙 파일로 옮기고, 문서마다 돌린다.
PYTHONIOENCODING=utf-8 python hwpx_retag.py rules.txt 원본.hwpx 갱신본_v1.0.hwpx
규칙 순서가 중요하다. 위에서부터 먼저 적용되고, 앞 규칙이 가져간 글자는 뒤 규칙이 건드리지 않는다. 그래서 긴 것과 문구 단위를 위에 적는다.
# 문구 단위 — 두 팀이 합쳐져 중복이 생기는 자리를 먼저 손본다
공동체기업육성팀 주관, 시민자산금융팀 · 시민자산AI팀 협업 사회연대경제육성팀 주관, 사회연대경제지원팀 협업
# 마커까지 지워야 하는 자리를 그냥 팀명보다 위에
❺ 에너지기본사회팀 태양광산업과(햇빛소득마을)
에너지기본사회팀 태양광산업과(햇빛소득마을)
# 긴 팀명을 짧은 것보다 위에 (부분 일치 사고 방지)
마을공동체자산기반조성팀 마을공동체팀
공동체자산기반조성팀 마을공동체팀
바뀐 글자만 빨간색으로 들어간다. 사람이 한글에서 열어 확인하고 수락한 뒤 검정으로 정리한다. 검토를 거치지 않은 자동 수정본을 최종본으로 삼지 않는다 — 이게 이 작업의 안전장치다.
끝나면 스크립트가 잔존 옛말 0건을 확인해 준다. 새 말이 들어갔는지만 보지 말고 옛 말이 정말 0이 됐는지까지 봐야 한다. 양방향으로 확인하는 것이다.
왜 한글의 찾아 바꾸기로는 안 되는가
한글 파일(.hwpx) 안에서 한 낱말이 여러 조각으로 쪼개져 저장되는 일이 흔하다.
표 셀 안에서 ❹ 공동체기업 과 육성팀 이 별도 조각으로 들어가 있는 식이다.
낱말 단위로 찾으면 이런 건 통째로 놓친다. 실제로 이번 문서에서도 두 자리가 그랬다.
그래서 스크립트는 문서의 모든 글자 조각을 하나로 이어붙인 뒤 낱말을 찾고, 조각 경계를 넘는 것도 잘라 붙여 처리한다. 이게 손 작업이나 단순 찾아바꾸기와 갈리는 지점이다.
4단계 — 글자 크기와 쪽수 마무리
옛 문서는 본문이 10pt인 경우가 많다. 사교원 문서 규칙은 본문·표 셀 모두 12pt다. 글자 크기 정보를 담은 부분에서 1200(=12pt) 미만인 항목을 전부 1200으로 올린다. 빨간색 사본도 같은 규칙으로 함께 올려야 한다 — 안 그러면 고친 부분만 작게 남는다.
글자를 키우면 표 줄이 접혀 쪽수가 늘어난다. 반드시 쪽수를 다시 재고 눈으로 본다.
여기서 이번에 지킨 원칙 하나. 한글이 이미 떠 있으면 쪽수 측정을 하지 않는다. 쪽수를 재는 도구는 한글 프로그램을 불러 쓰는데, 작업이 끝나면 한글을 종료시킨다. 사용자가 저장 안 한 문서를 열어두고 있었다면 그게 날아간다. 이번에는 한글이 떠 있어서 측정을 건너뛰고 “쪽수 미확인”이라고 정확히 보고했다. 확인 못 한 것을 확인했다고 적지 않는 것, 이게 자동화보다 중요하다.
교훈
대응표를 만드는 일이 곧 개편안 검토다. 빈칸 하나가 개편안의 구멍을 가리킨다. “자동화해서 빨리 고치자”로 시작한 작업이 “이 개편안에는 이런 문제가 있다”는 문서로 끝났다.
기계적 치환은 새 오류를 만든다. 두 팀이 하나로 합쳐진 자리, 마커가 붙은 자리 두 곳에서 그대로 돌렸으면 말이 안 되는 문장이 나왔을 것이다. 돌리기 전에 대응표를 보며 “이 규칙이 만들 새 문장”을 한 번 상상해 보는 시간이 필요하다.
고친 것은 빨갛게, 확인 못 한 것은 못 했다고. 자동화의 신뢰는 속도가 아니라 “AI가 무엇을 건드렸는지 사람이 한눈에 볼 수 있는가”와 “모르는 걸 아는 척하지 않는가”에서 나온다.
파생 문서를 먼저 세어 본다. 이번에 참고문서 4종 중 2종은 이미 새 팀명을 쓰고 있어 손댈 게 없었다. 무턱대고 4건 다 고치는 대신 먼저 전수 조사를 했기 때문에 알았다.
참고
- 도구: PyMuPDF(PDF 좌표 읽기), 파이썬 표준 라이브러리(zipfile·re)만으로 충분하다. 한글 프로그램은 쪽수 확인에만 쓴다.
- 이 절차는
orgchart-doc-migration스킬로 묶여 있다(사교원 AI 작업 레포skills/). - 한글 문서를 새로 짓거나 단건 교정할 때는
hwpx-powershell-edit쪽이 맞다. - 적용 사례: 전남광주통합특별시 통합조직도 v12(2026-09-06) 반영 — 발제문 재구성 1건, 참고문서 2종 22건 치환.
문서 정리 = 데카(deka2026)