[스마트 계측 / 설계]

역할 이름을 버리고 권한으로 판단하기

2026.11.10 수정
스마트 계측 건설 현장 안전 관리 플랫폼 프로젝트에서 나온 글입니다.

권한을 role === 'ADMIN' 처럼 역할 이름으로 판단하던 코드를, 역할에 붙은 권한 목록으로 판단하도록 바꾼 이야기입니다.

문제

  • 역할 이름이 바뀌면 판단하는 코드가 깨졌다
  • 같은 검사가 백엔드와 화면 여러 곳에 흩어져 있었다

역할이 셋일 때는 문제가 잘 보이지 않았다. 현장마다 역할이 하나둘 늘어나면서, 이름을 비교하는 if 문이 컨트롤러와 서비스, 화면 컴포넌트에까지 퍼져 있다는 걸 알게 됐다.

바꾼 방법

판단은 한 곳에서만 하고, 컨트롤러에는 어노테이션만 남겼다.

@RequirePermission(feature = "SENSOR", permissions = {"READ"})
public SensorResponse get(@PathVariable Long siteId) {
    return sensorService.get(siteId);
}

바뀌기 전과 후

전 후
역할 이름 비교 역할에 붙은 권한 조회
화면마다 따로 검사 판단은 한 곳

옛 방식이 한 곳이라도 남아 있으면 규칙이 두 개인 셈이다.

판단하는 곳

권한 검사는 인터셉터 하나가 맡는다. 어노테이션을 읽고, 로그인한 사용자의 역할에 붙은 권한 목록과 비교한다. 화면도 같은 권한 목록을 내려받아 버튼을 감출지 정한다.

옛 방식을 찾은 방법

한 번 검색하고 끝내지 않고, 이름 → 비슷한 모양 → 같은 뜻 순서로 세 번 나눠 찾았다.

  1. 'ADMIN' 같은 역할 이름 문자열
  2. hasRole, isAdmin 처럼 비슷한 모양의 함수
  3. 이름은 다르지만 같은 판단을 하는 코드

남은 일

권한을 바꿀 때 같이 고쳐야 하는 세 곳은 다음 글에서 다룬다. → 권한을 바꾸면 세 곳을 같이 고친다

판단 결과를 캐시하는 이야기는 따로 정리하고 있다. → 준비 중인 글

이 글을 언급한 글