Skip to content
isdnetworks
Go back

관리자 테이블에 컬럼이 둘뿐이었다

관리자 정보 테이블을 봤다.

admin_id     varchar   primary key
admin_pass   varchar

둘뿐이다.

Table of contents

Open Table of contents

유저 테이블과 비교했다

user_info 는 컬럼이 스무 개 가까이 됐다. 신원과 상태와 기록과 연동이 다 들어 있는데 관리자는 admin_idadmin_pass 뿐이라 차이가 크다.

관리자는 게임을 안 하니 상태나 기록이 필요 없다. 여기까지는 이해가 됐다.

없는 것들이 걸렸다

그래도 몇 가지는 있을 법한데 없었다.

reg_date      생성일
last_visit    마지막 접속
admin_level   권한 구분
is_active     사용 여부

관리자가 더 중요한 계정인데 오히려 남는 기록이 더 적은 상태다. 누가 언제 무엇을 봤는지 알 방법이 없다.

권한이 없다

권한 구분이 없는 것이 가장 눈에 띄었다. 관리자가 여럿이면 유저 조회만 하는 사람과 코인을 지급할 수 있는 사람과 슬롯 설정을 바꿀 수 있는 사람이 갈릴 것 같다.

admin_level 같은 컬럼이 없으니 전원이 같은 권한이다. 매출 조회만 하면 되는 사람도 정산 확정 버튼을 누를 수 있다는 뜻이다.

다만 이것이 문제인지는 인원에 따라 다를 것 같다. 한두 명이면 권한을 나눌 이유가 적고 열 명 이상이면 나누는 것이 자연스럽다. 작은 팀이면 전원 같은 권한이 오히려 단순하다.

그래도 걸리는 것이 있다. 권한을 나중에 넣으려면 컬럼만 추가하면 되는 것이 아니다.

컬럼 추가
기존 관리자의 값 채우기
모든 관리 화면에 권한 검사 추가

화면마다 검사를 넣어야 한다. 처음부터 있으면 화면을 만들 때 같이 넣게 된다.

화면에서 버튼을 숨기는 것으로 대신하는 방법도 있는데 그것은 구분이 아니다. 주소를 직접 치면 그대로 실행되고 막을 자리는 CodeIgniter 컨트롤러다.

마지막 접속과 사용 여부

last_visit 도 걸렸다. 유저 테이블에는 있는데 관리자 테이블에는 없다.

관리자 계정은 덜 쓰이는데 권한은 크다. 유저는 매일 들어오니 이상하면 티가 나고 관리자는 가끔 들어오니 남이 써도 모른다. 마지막 접속이 없으면 계정이 언제 쓰였는지 알 수 없다.

이것을 컬럼이 아니라 로그로 남기는 방법도 있다. 컬럼은 마지막 한 번만 담고 로그는 전부 남으니 로그가 있으면 컬럼은 없어도 될 것 같은데 설계서에 관리자 로그 테이블은 없었다.

is_active 도 없다. 퇴사하거나 담당이 바뀌면 어떻게 하는지가 걸린다.

is_active 가 있으면 값을 바꿔 막으면 되고 없으면 DELETE 로 행을 지우게 된다. 행을 지우면 그 관리자가 무엇을 했는지가 이어지지 않고 다른 곳에서 admin_id 를 참조하고 있으면 끊긴다. 막는 것과 지우는 것이 다르다.

admin_pass 컬럼도 봤는데 설계서에는 길이나 형식이 안 적혀 있었다. SHA-256 같은 해시로 저장한다면 고정 길이가 될 것이고 평문이면 길이가 제각각일 텐데 설계서만으로는 어느 쪽인지 모르겠다. 실제 테이블에서 varchar(20) 이면 평문일 가능성이고 varchar(64) 면 해시일 가능성이라 컬럼 길이가 단서가 되는 셈이다.

판단 기준 — 의도인지 누락인지

이 테이블을 보고 든 생각이 있다. 컬럼이 적으면 무엇이 없는지가 잘 보인다.

user_info 는 스무 개라 무엇이 없는지 세기 어렵고 admin 은 둘이라 없는 것이 바로 눈에 띈다.

다만 없는 것이 다 빠뜨린 것은 아닐 것 같다. 이 시점에는 필요 없어서 안 둔 것과 생각을 못 해서 빠진 것이 있는데 설계서만 보면 구분이 안 된다.

앞서 본 다른 설계서에서는 FOREIGN KEY 를 안 건다는 식으로 안 하기로 한 것을 적어 둔 경우가 있었다. 적어 두면 구분이 되고 다음에 보는 사람이 누락으로 보고 또 채우지 않는다. 테이블에 COMMENT 를 다는 것도 그 자리다.

정리


Share this post on:

Previous Post
밀어 준 값과 조회한 값이 달랐다
Next Post
안 되는데 어디부터 볼지 몰랐다