바이브 코딩 한다면 무조건 알아야하는 권한 시스템 RBAC

📺 원본 영상: 바이브 코딩 한다면 무조건 알아야하는 권한 시스템 RBAC
🎙️ 채널: 코드팩토리
📅 정리 일자: 2026-04-08
⚠️ Note: 본 리포트는 영상의 음성을 텍스트로 변환(STT)하여 정리한 것입니다. 화면에 표시된 자료(차트, 코드, 슬라이드 등)는 포함되지 않을 수 있습니다.


개요

이 강의는 바이브 코딩(Vibe Coding) 환경에서 비개발자를 포함한 모든 개발자가 반드시 알아야 할 권한 제어 시스템인 RBAC(Role-Based Access Control, 역할 기반 접근 제어)를 다룬다. 강사는 RBAC의 개념과 데이터베이스 설계 원리를 설명하고, 실제 CMS(Content Management System) 프로젝트를 통해 Next.js, Drizzle ORM, SQLite 환경에서 RBAC를 구현하는 과정을 시연한다. 단순한 이론 설명에 그치지 않고 AI 기반 개발 도구를 활용한 플래닝부터 빌드, 동작 확인까지의 전체 워크플로우를 함께 보여주는 것이 이 강의의 핵심 가치다.


권한 제어 시스템의 삼총사: RBAC, ABAC, ReBAC

현대 소프트웨어 개발에서 권한 관리는 단순히 “로그인 여부” 확인을 넘어 “이 사용자가 이 리소스에 이 행동을 할 수 있는가”라는 정교한 질문에 답해야 한다. 프로젝트 규모가 커질수록 이 요구사항은 더욱 복잡해지고, 그 복잡성을 체계적으로 다루기 위해 개발 커뮤니티는 몇 가지 검증된 방법론을 만들어 왔다.

강사가 소개하는 세 가지 주요 시스템은 각각 다른 철학을 기반으로 한다. 첫 번째이자 가장 널리 사용되는 것이 **RBAC(Role-Based Access Control)**로, 이름 그대로 “역할(Role)“을 기준으로 권한을 부여하는 방식이다. “이 사람이 관리자인가, 아니면 일반 사용자인가”를 먼저 정의하고, 그 역할에 맞는 권한을 할당하는 구조이기 때문에 직관적이고 관리하기 쉽다는 장점이 있다. 두 번째는 **ABAC(Attribute-Based Access Control)**로, 역할이 아닌 속성(Attribute)을 기반으로 권한을 결정하는 방식이다. RBAC보다 더 세밀한 제어(Fine-grained Control)가 가능하지만, 그만큼 설계와 구현의 복잡성도 높아진다. 마지막으로 **ReBAC(Relationship-Based Access Control)**은 관계(Relationship)를 기반으로 권한을 다루며, 요즘 특히 많이 사용되는 추세라고 강사는 설명한다. “이 문서의 소유자이거나, 이 팀의 구성원인 경우에만 접근 가능”처럼 객체 간의 관계에 따라 권한이 결정되는 방식이다.

강사는 이 세 가지 중에서 압도적으로 RBAC가 가장 많이 사용된다고 강조하며, 이번 강의의 핵심이 RBAC임을 분명히 한다. CRUD(Create, Read, Update, Delete) 수준의 권한 관리가 필요한 대부분의 프로젝트에는 RBAC가 적합한 선택이며, 그 이상의 세밀한 제어가 필요할 때 ABAC를 고려하면 된다는 것이 강사의 실용적인 조언이다.


RBAC의 핵심: 중복 없는 데이터베이스 테이블 설계

RBAC를 이해하는 데 있어 가장 중요한 것은 개념 자체보다 이를 어떻게 데이터베이스로 구현하느냐다. 강사는 RBAC의 개념이 단순하다고 말하면서도, 이를 중복 없이 효율적으로 관리하기 위한 테이블 설계가 진정한 핵심이라고 강조한다.

💡 [영상 참조] 강사는 이 시점에서 화면에 Mermaid 다이어그램으로 시각화된 데이터베이스 ERD(Entity Relationship Diagram)를 보여주며 설명합니다. 상세 내용은 원본 영상을 확인하세요.

RBAC 데이터베이스 테이블 설계 다이어그램

03:35 - RBAC 데이터베이스 테이블 설계 다이어그램 - Users, Roles, Permissions 핵심 테이블 및 role_permissions, user_roles 중간 연결 테이블 구조

강사가 제시하는 RBAC 테이블 구조는 크게 세 개의 핵심 엔터티 테이블과 두 개의 연결(Junction) 테이블로 구성된다.

Users 테이블은 사용자 정보를 담는다. 이메일, 비밀번호 해시(절대 평문 저장 금지) 등 기본 식별 정보가 포함된다. Roles 테이블은 역할 자체를 정의하며, 역할의 이름(예: admin, editor)과 설명(description)으로 구성된다. 강사는 이 테이블 자체가 권한을 부여하는 것이 아님을 명시적으로 강조한다. Permissions 테이블은 실제 권한의 최소 단위를 정의하며, 어떤 리소스(resource)에 어떤 액션(action)을 허용할지를 나타낸다.

이 세 테이블 사이를 연결하는 두 개의 중간 테이블이 RBAC 설계의 정수다. role_permissions 테이블은 어떤 역할이 어떤 권한을 갖는지를 매핑하며, user_roles 테이블은 어떤 사용자가 어떤 역할을 갖는지를 매핑한다. 이 다대다(Many-to-Many) 관계 구조 덕분에, 사용자 → 역할 → 권한의 연결을 따라가는 것만으로 특정 사용자가 행사할 수 있는 모든 권한을 한 번에 파악할 수 있게 된다.

User → Role → Permission 연결 흐름

05:06 - User → Role → Permission 연결 흐름 - 관리자 역할과 사용자 계정의 user_roles 테이블 연결 및 권한 전파 동작

권한 명명 규칙: resource:action 패턴

권한을 정의할 때는 리소스:액션 형태의 명명 규칙을 사용하는 것이 업계에서 통용되는 컨벤션이다. 예를 들어 포스트를 생성하는 권한은 posts:create, 읽는 권한은 posts:read, 수정은 posts:update, 삭제는 posts:delete처럼 표현한다. 강사는 이 방식이 JWT 토큰 설계나 RBAC/ABAC 구현에서 매우 광범위하게 사용되는 패턴이라고 설명하며, 이를 모르더라도 AI 기반 개발 도구가 플래닝 단계에서 자연스럽게 이 패턴으로 제안해 줄 것이라고 덧붙인다.

권한 명명 규칙 예시 화면 - resource:action 패턴

10:09 - 권한 명명 규칙 예시 화면 - resource:action 패턴(posts:create, posts:read 등) 목록


RBAC 설계가 주는 실질적 이점: 변경의 유연성

RBAC의 진짜 강점은 권한 변경이 필요한 순간에 드러난다. 만약 RBAC 없이 각 사용자에게 직접 권한을 부여했다면, “관리자” 100명의 권한에 변화를 주려면 100번의 수정 작업이 필요할 것이다. RBAC에서는 이 문제가 우아하게 해결된다.

강사는 두 가지 변경 시나리오를 통해 이 장점을 명확히 설명한다. 첫 번째는 역할의 권한을 바꾸는 경우다. 예를 들어 관리자 역할에서 “사용자 삭제” 권한을 제거하고 싶다면, role_permissions 테이블에서 관리자 역할과 해당 권한의 연결 레코드 하나만 삭제하면 된다. 이 단 하나의 변경이 관리자 역할을 가진 모든 사용자에게 즉시 전파(propagate)된다. 두 번째는 특정 사용자의 역할을 변경하는 경우다. 일반 사용자를 편집자로 승격시키려면 user_roles 테이블에서 해당 사용자의 역할 연결만 교체하면 되고, 편집자 역할에 연결된 모든 권한이 즉시 그 사용자에게 적용된다. 이것이 강사가 강조하는 “중복 없는 권한 관리”의 실체다.


실습: AI IDE를 활용한 CMS 프로젝트 구현

💡 [영상 참조] 이 섹션 전반에 걸쳐 강사는 “Verdent”라고 언급하는 AI 기반 IDE 화면을 보여주며 실습을 진행합니다. 도구의 정확한 명칭은 STT 변환 과정에서 불명확하게 수록되었으므로 원본 영상에서 확인하세요.

강사는 “Verdent”[영상 참조 - 정확한 도구명 확인 필요]라는 AI 기반 IDE를 사용하여 실제 프로젝트를 구현한다. 이 도구의 가장 큰 특징은 **플랜 모드(Plan Mode)**로, 텍스트 프롬프트뿐 아니라 Mermaid 차트 같은 시각적 다이어그램을 통해 시스템 구조를 이해하고 계획을 세울 수 있다는 점이다. Claude Opus 4.6(1M 컨텍스트)을 활용하며, PM·프론트엔드·백엔드 등 작업 성격에 맞는 스킬(핸들)을 선택해 더 전문적인 결과물을 얻을 수 있다.

기획 단계: AI와 함께하는 플래닝

강사는 먼저 플랜 모드에서 CMS 시스템을 예제로 RBAC의 기능과 데이터베이스 구성 방법을 설명해 달라고 AI에게 요청한다. 이때 강사가 가장 강조하는 포인트는, AI가 제시하는 질문들을 절대 건너뛰지 말아야 한다는 것이다. AI의 질문에 답하지 않고 자동으로 진행하도록 두면, 그것은 단순 자동화 툴을 사용하는 것과 다를 바가 없다고 강사는 단언한다. AI의 질문에 인간의 판단과 맥락을 제공하는 과정이 바로 바이브 코딩에서 개발자(또는 PM)가 존재해야 하는 핵심 이유라는 것이다.

이 프로젝트의 기술 스택으로는 Next.js(App Router), Drizzle ORM, SQLite(데모용; 프로덕션에서는 PostgreSQL 사용 권장), Better Auth(인증 라이브러리; STT에서 “Better Earth”, “Better Author” 등으로 오인식됨), shadcn/ui + Tailwind CSS(UI 컴포넌트)가 선택된다. CMS에서 다루는 콘텐츠 타입은 포스트(Post)와 아티클(Article)로 제한하고, 권한 계층은 Admin·Editor·Author·Viewer 네 가지 역할로 구성한다.

역할별 권한 구조

💡 [영상 참조] 강사는 이 시점에서 각 역할별 권한을 정리한 테이블을 화면에 보여줍니다. 상세 내용은 원본 영상을 확인하세요.

플랜 모드에서 역할별 권한 설계 테이블 - Admin/Editor/Author/Viewer

07:21 - Verdent(AI IDE) 플랜 모드에서 Admin/Editor/Author/Viewer 각 역할별 권한 설계 테이블

네 가지 역할의 차이는 다음과 같다. **Admin(관리자)**은 모든 권한을 보유하며, 다른 사용자의 역할을 변경하는 사용자 관리 기능까지 수행할 수 있다. **Editor(편집자)**는 자신이 작성한 글뿐 아니라 다른 사람의 글도 수정할 수 있는 권한을 가지며, 사용자 관리는 불가하다. **Author(작가)**는 포스트를 생성하고 자신의 포스트만 관리할 수 있으며, 타인의 포스트는 수정할 수 없다. **Viewer(뷰어)**는 읽기 권한만 있어 포스트를 생성하거나 수정할 수 없다.

빌드 결과 확인: 권한 시스템이 실제로 작동하는 순간

AI 플래닝 결과에 만족하면 빌드 버튼 하나로 코드 생성이 시작된다. 생성 완료 후 npm run dev로 개발 서버를 실행하고, 시드 데이터(seed data) 생성을 AI에게 요청하여 각 역할의 테스트 계정을 만든다. 강사는 각 계정으로 직접 로그인하며 권한 동작을 검증한다.

신규 가입 후 Viewer 권한이 기본 적용된 CMS 초기 대시보드

11:48 - CMS 앱 초기 실행 화면 - 신규 가입 후 Viewer 권한이 기본 적용된 대시보드 상태

Admin 계정으로 로그인하면 모든 포스트를 볼 수 있고 새 포스트 생성이 가능하며, 사이드바에 사용자 관리 메뉴가 표시된다. 해당 화면에서 다른 사용자의 역할을 Viewer·Author·Editor·Admin 중 하나로 즉시 변경할 수도 있다.

Admin 계정의 사용자 관리 화면 - 역할 변경 드롭다운 UI

13:04 - Admin 계정 로그인 상태의 사용자 관리 화면 - 역할(Viewer/Author/Editor/Admin) 드롭다운 변경 UI

Editor 계정에서는 사용자 관리 메뉴가 사라지지만 포스트 생성 권한은 유지된다. Author 계정은 포스트를 생성할 수 있으나, 포스트 목록에는 자신이 만든 글만 표시되어 타인의 글을 편집할 수 없다.

Author 계정 포스트 목록 - 자신이 생성한 포스트만 표시

14:11 - Author 계정 로그인 후 포스트 목록 - 자신이 생성한 포스트만 표시되는 권한 분리 동작 확인

Viewer 계정은 읽기만 가능하며 생성·수정·삭제 UI 요소 자체가 표시되지 않는다.

강사는 여기서 중요한 포인트를 짚는다. UI에서 버튼을 숨기는 것은 사용자 경험(UX)을 위한 조치일 뿐, 실제 보안은 백엔드의 RBAC 로직에서 이루어진다는 것이다. 설령 UI 제한을 모두 해제하더라도, RBAC가 올바르게 구현되어 있다면 허용되지 않은 CRUD 작업은 실제로 실행되지 않는다. 이것이 바이브 코딩 과정에서 AI가 실수로 잘못된 코드를 생성하더라도 권한 시스템이 최후의 보루 역할을 해준다는 강사의 핵심 주장이다.


마무리 / 핵심 정리

이 강의의 핵심 메시지는 세 가지로 요약할 수 있다. 첫째, RBAC는 복잡해 보이지만 본질적으로 사용자 → 역할 → 권한의 연결 구조이며, 이미 우리 머릿속에 어느 정도 있는 개념을 체계화한 것에 불과하다. 둘째, 효율적인 RBAC 구현의 핵심은 user_roles와 role_permissions라는 두 중간 테이블을 통해 다대다 관계를 설계하는 데 있으며, 이 구조 덕분에 단 하나의 레코드 변경으로 수많은 사용자의 권한을 일괄 제어할 수 있다. 셋째, 바이브 코딩 환경에서 “RBAC”라는 단어 하나를 프롬프트에 포함하는 것만으로도 AI가 이 모든 설계 원칙을 반영한 코드를 생성해 준다는 점에서, 이 개념을 아는 것 자체가 결과물의 품질을 크게 높이는 레버리지가 된다.

강사는 개발에 익숙하지 않은 사람일수록 더 쉽게 이해할 수 있도록 접근하는 것이 중요하며, 너무 어렵게 느껴지면 포기하게 된다는 점을 강조하며 강의를 마무리한다. 시각적 플래닝을 지원하는 AI IDE와 RBAC 같은 핵심 설계 개념의 조합이 바이브 코딩의 생산성과 안전성을 동시에 끌어올리는 실질적인 전략임을 이 강의는 실증적으로 보여준다.


📚 출처 및 참고

구분내용
원본 영상바이브 코딩 한다면 무조건 알아야하는 권한 시스템 RBAC
채널코드팩토리
리포트 작성2026-04-08
작성 방식YouTube 영상 STT 변환 후 에디팅

💬 본 리포트는 영상 내용을 바탕으로 재구성되었습니다. 정확한 내용은 원본 영상을 참조해 주세요.