관리자 계정에 대해서

hoifoi·2023년 12월 31일
0
post-thumbnail

들어가면서

모든 개발 단계에서 유저단은 쉬울수도 어려울수도 있다고 생각한다
백엔드든 프론트엔드든 유저 기능이 제일 먼저 만들어져야하고
(사실 이건 아닐수도 있다고 생각은 든다 하지만 첫 페이지니까 대부분은 맞다고 생각)
그렇다 보니 프로젝트를 하다 보면
첫 메인페이지(유저단)는 제일 잘하는 사람이 빨리 만들거나
배움이 조금 느린 사람이 있다면 그 사람은 유저단을 맡기게 된다
대부분 유저페이지나 유저 관련 API를 먼저 배우게 될테니까(개발계의 집합..?)
하지만 이 부분도 쉽게 보면 안될 것 같다는 생각이 매번 드는데
오늘은 관리자 계정에 대해서 한번 알아보려고 한다!

설계는 어떻게 하는게 좋을까?

매번 느끼는 거지만 모든 웹페이지에서는 정말 토이토이토이프로젝트가 아니면
직접적이든 간접적으로든 관리자 계정이 필요하게 된다!
유저가 모르는 절대적인 관리자 계정이 생기거나(자사 직원이 관리자)
같은 유저 중에서도 권한이 차이가 있는관리자 계정이 생기거나(인터넷 카페 매니저 같은)
누가 봐도 관리자격인 공개적인 관리자 계정이 생기는 경우(쇼핑몰에서의 중간 거래상?)

하지만 필요에 따라서 데이터는 다르게 하는 경우가 맞다는 생각에 도달!
이 부분을 한번 나눠보고자 한다!

첫번째 유형 완벽히 분리된 관리자 계정

컨텐츠나 물품 관리를 해당 서비스 직원이 따로 관리 하는 경우!
이 경우에는 마케팅 / CS / 경영 직원이 관리자가 된다고 볼 수 있다
이 경우에는 따로 테이블을 분리하는 것이 낫다!
유저 테이블과 연관 짓기에는 그 목적이 확실하게 구분 되기 때문!

  • 특징
    • 테이블의 독립(관리가 용이)
    • 해당 직원이 회원가입 후 이용 또는 회원가입 및 승인 후 이용
    • 부서 별로 권한을 따로 두는 것도 가능
    • 관리자 페이지가 따로 존재(회원가입 및 관리 페이지)

두번째 유형 경계가 모호한 유사 유저(?) 형태

같은 회원이지만 회원 간에 권한에 차이가 있는 경우이다!
굳이 명칭을 두자면 민간관리자?라고 할 수 있을수도 있고
소규모 서비스의 경우(팀원이 적어 관리자 기능을 따로 두기 힘든 경우 등)에도
이 경우로 보면 될 것 같다!

  • 특징
    • 유저 테이블에 칼럼만 추가한 경우(간편)
    • 일반 유저로 가입 후 일련의 인증절차나 관리자 권한 신청 후 권한 획득
    • 관리자의 권한은 있냐 없냐로만 구별이 가능(세세한 분리 불가)
    • 관리자 페이지가 따로 존재하지 않고 권한만 조금 큰 경우
      (관리자 계정 로그인 시 버튼이 몇개 더 노출 되는 등)

그럼 어떻게 쓰는게 좋을까?

프로젝트 사이즈의 크기

  • 크다 - 첫번째 유형(독립 테이블)
  • 작다 - 두번째 유형(유저 테이블)

유저 중 중간계층의 유무

  • 첫번째 유형(독립테이블)
    오픈마켓과 같은 경우 중간 거래자가 있기 때문에
  • 두번째 유형(유저 테이블)
    커뮤니티 서비스(게시판 관리자의 존재)나 모호한 권한관계(상위 유저와 같은?)

JWT와 같은 토큰은 계속 써야 하는지?

토큰은 계속 해서 해당 유저의 정보를 알아야 하기 때문에 계속 사용하는게 좋다
대신 첫번째 유형두번째 유형은 페이로드 내용이 달라야 할 것이다

  • 첫번째 유형
    이 경우에는 높은 확률로 로그인 페이지부터 구별이 될 것이고
    그에 따른 로그인 API가 따로 있을 것이다
    때문에
    각 API에 맞춰 토큰 생성함수를 따로 만들어주는 방법
    API를 구별하지 않고 같은 토큰 생성 함수를 쓰는 방법
    이 2가지가 있을 것이다 개인적으로는 후자를 써도 상관 없다는 의견
    (관리는 어려울지 몰라도 확실한 구별이 조금 매력이 있다)
  • 두번째 유형
    이 경우에는 토큰 생성함수를 따로 만들 필요가 없다!
    (애초에 특정 유저를 위한 기능인데 유저 테이블이 한가지 밖에 없기때문에!)
    대신에 페이로드에 관리자 유무를 담아두는 것이다!
    (토큰 생성은 쉽지만 권한이 커질 경우 데이터베이스를 수정해야 할 수도 있다)

마무리

결국 배포 후 사이즈가 커지면
두번째 첫번째 유형으로 갈 수밖에 없는 구조이긴 한것 같다
하지만 한번쯤은 고민을 해봐야 할 부분이라고 생각해 포스팅은 했는데
사실 필요 없을 것 같기도 한 느낌이 없지 않아 있다.. :D
아무튼 이렇게 한번쯤은 시도 해보는 게 중요하다고 생각!
앞으로도 이런 아이디어도 조금씩 포스팅 해봐야지!

++
발돋움 중인 예비 개발자 입니다.
태클 및 의견 공유 언제나 환영 :D

profile
컨텐츠 기획자 출신 백엔드 개발자 :D

0개의 댓글