여러 오픈채팅방을 동시에 운영하는 봇이라면, 관리자 권한을 한 단계로 두기 어렵습니다. 이번 글은 Iris 봇에 3단계 권한 구조를 만들면서 겪은, 계층 검사 로직에서 흔히 빠지기 쉬운 함정 하나를 기록합니다.
왜 3단계가 필요했나
봇을 여러 방에서 동시에 운영하다 보니 권한을 단순히 “관리자냐 아니냐"로만 나눌 수 없었습니다. 그래서 세 단계로 나눴습니다.
- 최상위 관리자: 모든 방, 모든 기능에 접근 가능한 최고 권한
- 방별 메인관리자: 방마다 정확히 한 명, 해당 방의 설정 전반을 관리
- 방별 일반관리자: 방마다 여러 명 가능, 제한된 관리 기능만 사용
상위 등급은 하위 등급의 권한을 당연히 포함해야 합니다. 최상위 관리자는 메인관리자가 할 수 있는 일도, 일반관리자가 할 수 있는 일도 모두 할 수 있어야 합니다.

발견한 버그: 메인관리자가 일반관리자 기능을 못 쓴다
기능을 다 구현하고 테스트하던 중, 메인관리자로 지정된 사람이 정작 일반관리자용 명령어를 실행하면 권한 없음으로 거부되는 버그를 발견했습니다. 직관적으로는 말이 안 되는 상황입니다 — 메인관리자는 일반관리자보다 상위 권한인데, 오히려 일반관리자용 기능을 못 쓰는 것입니다.
원인: 계층 검사에서 중간 단계를 빼먹음
코드를 들여다보니 원인은 단순했습니다. 권한 확인 함수를 짤 때 “상위 등급이면 하위 권한도 자동으로 포함된다"는 로직을 제대로 구현했다고 생각했지만, 실제로는 최상위 관리자인지만 확인하고 메인관리자 단계를 건너뛴 채 곧바로 일반관리자 여부만 확인하는 형태로 짜여 있었습니다. 즉 검사 로직이 “최상위 관리자 → 일반관리자"라는 2단계 검사만 하고, 그 사이에 있어야 할 “메인관리자” 단계 자체가 통째로 빠져 있었던 것입니다. 전형적인 계층 검사 로직에서 한 단계를 빼먹는 실수였습니다.
해결
권한 확인 함수를 최상위 관리자 → 메인관리자 → 일반관리자 순서로 각 단계를 빠짐없이 확인하도록 수정했습니다. 이후 메인관리자 계정으로 모든 하위 등급 기능이 정상적으로 동작하는 것을 확인했습니다.
돌아보며
권한 계층이 세 단계 이상으로 늘어나면, “상위 등급 포함"이라는 개념을 말로는 쉽게 설명해도 코드로 옮길 때 중간 단계를 빠뜨리기 쉽다는 걸 실감했습니다. 이후로는 권한 단계를 추가할 때마다 각 등급별로 명시적인 테스트 케이스를 하나씩 만들어서, “이 등급은 이 기능들을 모두 쓸 수 있어야 한다"를 눈으로 직접 확인하는 습관을 들였습니다.

🤖 이 포스팅은 AI의 도움을 받아 작성되었습니다.


💬 댓글