본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
비개발자의 개발 일지_Episode

시즌2 4편 — 승인하는 사람과, 돈을 실제로 만지는 사람을 갈랐다

by 왕진 2026. 6. 22.
반응형

 

 

Dev Story · 시즌2 4편 — 권한 분리(Finance-Gate)

승인하는 사람과,
돈을 실제로 만지는 사람을 갈랐다

한 사람이 끝까지 처리하면, 아무도 못 막는다 — 직무 분리(SoD) 이야기

1편에서 "권한은 결국 책임이 누구에게 있느냐의 문제"라고 했죠. 이번 편은 그걸 한 발 더 들어가요. 돈을 '승인하는 사람'과 '실제로 움직이는 사람'을, 일부러 두 사람으로 갈라놓은 이야기입니다.

※ 이 글은 특정 회사의 비밀이 아니라 '돈을 다루는 시스템의 일반 원칙'을 다뤄요. 실제 인물·금액·계좌 같은 식별 정보는 가립니다.
1 권한의 진짜 문제 — "볼 수 있냐"가 아니라 "움직일 수 있냐"

처음엔 권한을 단순하게 봤어요. "이 사람이 이 화면을 볼 수 있나 없나" 정도로요. 그런데 돈이 오가는 자리에선 질문이 달라집니다.

"누가 이 화면을 보나?"가 아니라, "누가 이 돈을 실제로 움직일 수 있나?"

그리고 돈을 움직이는 일엔, 이런 원칙이 있다고 해요. 한 사람이 처음부터 끝까지 혼자 처리하면 안 된다는 거예요.


2 발견한 결손 — 한 사람이 승인하고, 그 사람이 처리하면

시스템을 들여다보니, 자금 처리가 이렇게 돌고 있었어요. 담당자가 "이 자금 처리 승인" 버튼을 누르면 — 시스템이 그 즉시 "처리 완료"로 장부에 기록했습니다. 문제가 둘이었어요.

  • ① 장부가 실물보다 먼저 움직였어요. 실제 돈은 아직 안 나갔는데 시스템엔 "줬다"고 적히니, 잔액·미수금이 거짓으로 갱신됐어요. 장부가 현실과 어긋나는 거죠.
  • ② 한 사람이 승인부터 처리까지 다 했어요. 승인한 사람이 그대로 "처리 완료"까지 누를 수 있으니, 중간에 걸러줄 사람이 없었습니다.
은행에서 내가 출금을 승인하고, 그 출금을 내가 직접 실행까지 한다면? 잘못 나가도, 마음먹고 빼돌려도 아무도 모르죠. 회사 돈은 더더욱 이러면 안 돼요.

제가 현장을 보며 안 건, 실제로는 '승인하는 사람(관리)'과 '돈을 실제 처리하는 사람(재무)'이 다른 사람이라는 거였어요. 그런데 시스템은 그 둘을 한 단계로 뭉쳐 놓고 있었던 거죠.


3 해결 — 승인과 실행을 가르다

그래서 한 단계였던 걸, 두 사람의 두 단계로 쪼갰어요.

관리: 승인 (의사결정만) 재무: 실제 자금 처리 + 확정 시스템에 기록
  • 승인(관리) = "이 돈, 처리해도 됩니다"라는 의사결정만. 여기선 장부에 아무것도 안 적혀요.
  • 재무 확정(재무) = 실제로 돈을 처리하고 "재무 확정"을 마킹. 이때 비로소 장부에 기록돼요.

효과가 두 개예요. 시스템 기록 시점 = 실제 돈이 움직인 시점이 되어 장부가 현실과 일치하고(①번 해결), 승인한 사람과 처리한 사람이 달라져 서로가 서로를 견제하게 됩니다(②번 해결). 이렇게 직무를 나누는 걸 '직무 분리(SoD)'라고 부르더라고요. 회계·내부통제에서 오래 쓰여온 개념이라고 들었어요.


반응형
4 디테일의 악마 — '같은 사람'이 두 모자를 쓰면?

여기서 AI 팀이 중요한 구멍들을 짚어줬어요. 단계만 나눈다고 끝이 아니었거든요.

  • self-confirm 차단 — 분리해놨는데 한 사람이 승인도 하고 본인이 재무 확정도 하면 도로아미타불이에요. 그래서 "승인한 사람은 그 건의 재무 확정을 못 하게" 막았어요.
  • 권한 구멍 메우기 — 알고 보니 일부 권한이 승인·재무 양쪽에 다 닿아 있었어요. 그 통로를 따로 막았습니다.
  • 시차 재검증 — 승인하고 재무가 확정하기까지 시간이 떠요. 그 사이 금액이 바뀌었으면? 확정 시점에 다시 한번 검증하게 했어요.
  • 원자성(다 되거나, 다 안 되거나) — 처리가 반쯤 되다 멈추면 장부가 꼬여요. 그래서 관련 기록이 전부 함께 성공하거나 전부 취소되도록 묶었어요.
"승인 따로, 실행 따로"는 시작일 뿐이에요. '같은 사람이 두 역할을 겸하는 틈'까지 막아야 비로소 분리가 완성됩니다.

5 이번 편의 산출물 — 돈을 다루는 권한 설계 체크리스트

돈이 오가는 기능을 만들 때, 권한을 이렇게 점검했어요.

☑ 돈 다루는 권한 — 설계 체크리스트
승인하는 사람실제 실행하는 사람이 나뉘어 있나?
한 사람이 두 역할을 겸할 틈은 없나? (본인 승인 → 본인 확정 차단)
☐ 시스템 기록 시점 = 실제 돈이 움직인 시점인가? (장부가 먼저 거짓말하지 않게)
☐ 승인과 실행 사이의 시차에 값이 바뀌면 다시 검증하나?
☐ 처리가 반쪽만 되는 경우를 막았나? (다 되거나, 다 취소)
☐ 누가 승인·실행했는지 기록(감사 로그)이 남나?

6 AI가 갈린 지점 / 사람이 결정한 지점

🤝 self-confirm — 허용할까, 금지할까

사람이 정한 큰 방향: "관리(승인)와 재무(실행)는 실제로 다른 사람이 한다"는 건, 코드가 아니라 현장을 보고 제가 정한 방향이었어요. AI 팀은 그 방향을 받아 구현하면서, 위에 적은 구멍들(권한·시차·원자성)을 잡아줬고요.
여기서 의견이 갈렸다: "급할 땐 한 사람이 승인하고 본인이 확정하는 걸(self-confirm) 허용하되 기록만 남기자"(유연성) vs "무조건 금지해야 분리의 의미가 산다"(원칙대로). 바깥 검토 의견 둘이 정반대로 갈렸어요.
사람이 내린 결정 — 금지: 이 기능의 존재 이유가 '분리'인데, 예외로 한 사람이 다 할 수 있게 두면 분리 자체가 무너져요. 편의보다 원칙을 택했습니다. (테스트할 땐 계정을 따로 쓰면 되니까요.)
그래서: 방향은 사람이, 구멍 메우기는 AI가. "이 회사 돈은 두 사람의 손을 거쳐야 한다"는 건 — 업무를 아는 사람이 책임지고 정하는 몫이었어요.
※ 이 결정엔 'AI를 여러 역할로 나눠 회의시키고, 바깥의 다른 AI에게 교차 검토까지 받는' 방식이 쓰였어요. 그 방법 자체는 다음 편들에서 따로 풀게요 — 이 시리즈의 핵심 무기거든요.

핵심 한 줄 요약 — 권한 분리 편

진짜 질문"누가 보나"가 아니라 "누가 돈을 움직이나"
결손한 사람이 승인+처리 다 함 + 장부가 실물보다 먼저 기록
해결승인(관리) → 재무 확정(재무) 두 단계로 분리 = 직무 분리(SoD)
효과장부=실물 일치 + 서로 견제 (책임 소재 분명)
디테일self-confirm 차단 · 권한 구멍 · 시차 재검증 · 원자성
AI 갈림self-confirm 허용(유연) vs 금지(원칙)
사람 결정금지 — 분리가 이 기능의 존재 이유라서
다음 편⭐ AI를 여러 역할로 나눠 회의시키는 법 (라운드테이블)

Tags

#권한분리 #직무분리 #SoD #내부통제 #회계무결성 #승인 #ERP #비개발자 #AI협업 #보안 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
권한분리, 직무분리, SoD, 내부통제, 회계무결성, 승인, ERP, 비개발자, AI협업, 보안, 웹개발, 티스토리
반응형

댓글