권한 분기. 표현 자체는 엄청 딱딱하고 어려운 듯보인다. 실상은 우리가 매일 마주하는 친구다. 어디 들어갈 때마다 로그인하라고 경고하는 그것들. 그게 모두 권한 분기다. 권한 분기의 대표가 방금 말했듯 로그인 여부에 따라 페이지 공개여부를 결정하는 거다. 지난 번 HOF와 HOC를 정리하면서 예시로 들었던 게 바로 권한 분기였다.
권한 분기를 찾아보니 생각보다 권한 분기가 많았다. 로그인은 물론, 우리가 네이버카페나 다음카페서 자주 본 등급별 게시판도 권한 분기다. 목적에 따라, 신분에 따라 접근 권한을 제어하는 모든 게 권한 분기다. 쇼핑몰의 판매자용 사이트, 배달의 민족의 사장님 전용 앱 등 같은 서버를 두고 다른 사이트가 존재하는 것도 권한 분기다. 일반인의 입장에서 '관계자외 출입금지'가 개발자에겐 '권한 분기'인 셈이다.
이 권한 분기는 웹이 탄생하고 얼마 지나지 않아 탄생했을 듯하다. 아마 과학연구소들 끼리 이었던 그때부터 있지 않았을까 싶다. 폴더에도 접근 권한을 주듯, sql에서도 테이블별로 접권권한을 따로 설정하듯 말이다. 생각보다 권한 분기에 대한 자료가 많이 없어서 아쉽긴 한데, 그만큼 우리 생활 속에 당연 시 받아들이고 있는 것이라고도 생각한다. 따로 설명할 필요도 없다는 것을 뜻하는 게 아닐까.
권한 분기는 곧 보안
한가지 확실한 것은 권한 분기는 보안과 직결된다. 정부의 표준프레임워크 설명서나 IBM의 Security Verify Access DOCS를 봐도 권한을 설명할 때 보안을 함께 언급한다. 그리고 권한 부여와 권한 인증에 대해서 별도 서술한다. IBM은 '권한 부여는 인증된 클라이언트에 도메인의 특정 자원에 대해 태스크를 수행할 수 있는 필수 권한이 있는 지 판별합니다. 인증은 개인이 해당 개인이 요청하는 사용자인지 확인합니다.'라고 구별해 표현한다.
문서를 읽다가 알게된 흥미로은 점도 있다. 개별로 프로그램을 만들고, 각각 권한을 나눠주고 관리하다보니 힘들게 되었다. 이로인해 통합 시스템처럼, 통합 권한 관리가 있다. 물론 말은 이렇지만, 큰 시스템 하나를 두고 그 안에서 각 프로그램별로 개별 권리를 따로 부여한다는 말이다. 이럴 경우 작은 프로그램을 개발하고 별도 권한 분기를 만들지 않아도 되니까. 통합과 분리를 프론트엔드나 백엔드 같은 웹에서만이 아니라 권한 인증과 부여라는 체계 관점에서 본 게 새로웠다.
한 회사에서 여러 프로그램을 운영할 경우 권한을 통합하기도 어렵고 각 개별로 관리하다보면 소유권 비용도 높아진단다. 결국 유지보수도 각각 해야하는 점도 동일하다. 권한 시스템을 통일했을 때 얻는 이점은 다음과 같다고 한다. 1. 애플리케이션에 대한 액세스 개발 관리 비용 감소, 2. 별도 권한 부여 시스템을 소유하고 관리하기 위한 총 비용 감소, 3. 기존 보안 하부 구조 사용, 4. 새 비즈니스 시 안전한 애플리케이션 오픈 가능, 5. 다양한 애플리케이션 통합 인증 대응, 6. 개발 주기 감소, 7. 안전한 정보 공유까지.
아무래도 한 서비스의 문서라 읽다보니 이유가 어디든 껴맞출 수 있는 부분도 좀 있는 듯하다. 다만 그중에서 개발 관리 비용 감소와 개발 주기 감소는 확실한 듯했다. 이미 권한 부여 시스템이 있으니 해당 부분은 새로 개발하지 않아도 되고, 따로 따로 관리하지 않으니 추가 인력 고용도 필요 없다.
마무리
표준프레임워크와 IBM 문서 외 여러 곳에서 권한 부여에 대한 글을 읽었다. 사실상 대동소이했다. 프론트엔드 개발자에게 필요한 권한 부여 혹은 권한 분기는 무엇인가 생각해봤다. 몇시간을 생각해봐도 특별히 떠오르는게 없다. 그저 해당 조건이 맞으면 통과 아니면 리턴이다. 물론 사용자의 인증과 허가, 토큰 관리 등 보안과 관련한 사항을 빼고다.
프론트엔드 개발자가 신경 써야하는 것은 1. 권한 분기 페이지 빠뜨리지 않기, 2. 토큰 부여, 손실 및 보관에 관하여 자주 보안 관련 소통 정도인 듯하다.
※ 잘못된 내용이 있을 경우 댓글로 알려주세요. 배우고 익히고 수정하겠습니다:)
'FE > Web' 카테고리의 다른 글
token, XSS, CSRF (1) | 2022.10.25 |
---|---|
Browser’s Rendering Process (0) | 2022.10.24 |
Cookie, Session, Local Storage (0) | 2022.10.12 |
NoSQL vs SQL (0) | 2022.10.11 |
Pagination vs Infinite Scroll (0) | 2022.09.28 |