permissions

2 개의 포스트

대규모 가시성: Figma가 (새 탭에서 열림)

피그마(Figma)는 서비스 규모가 확장됨에 따라 복잡해진 권한 관리 로직을 효율적으로 처리하기 위해 자체적인 권한 정의 언어(DSL)인 'Permit'을 구축했습니다. 기존의 파편화된 명령형 코드 방식에서 벗어나 선언적인 DSL을 도입함으로써 권한 정책의 일관성을 확보하고 보안 취약점 발생 가능성을 획기적으로 낮췄습니다. 이를 통해 복잡한 사용자-리소스 간의 관계를 명확하게 모델링하고 성능 저하 없이 대규모 시스템에 적용할 수 있는 권한 검증 인프라를 완성했습니다. ### 기존 시스템의 한계와 권한 관리의 복잡성 * 권한 체크 로직이 Go 애플리케이션 코드 곳곳에 흩어져 있어, 특정 리소스에 대한 접근 규칙을 한눈에 파악하거나 일관되게 수정하기 매우 어려웠습니다. * 팀, 프로젝트, 파일로 이어지는 계층 구조뿐만 아니라 엔터프라이즈 설정, 공유 링크 등 수많은 변수가 결합되면서 권한 로직 수정 시 예기치 않은 부작용(side effects)이 발생할 위험이 컸습니다. * 성능 최적화를 위해 데이터베이스 쿼리에 권한 로직을 직접 포함시켜야 하는 경우가 많았는데, 이는 비즈니스 로직과 권한 정책이 뒤섞여 코드 유지보수성을 떨어뜨리는 결과로 이어졌습니다. ### 관계 기반 접근 제어(ReBAC)와 Permit DSL 설계 * 구글의 Zanzibar 시스템에서 영감을 얻어, 객체 간의 관계를 중심으로 권한을 정의하는 ReBAC(Relationship-Based Access Control) 모델을 피그마의 환경에 맞게 커스텀화했습니다. * Permit DSL은 'Actor(사용자)', 'Resource(파일, 팀 등)', 'Action(편집, 보기 등)' 간의 관계를 선언적인 문법으로 정의합니다. * 예를 들어 "사용자가 파일이 속한 프로젝트의 편집자라면 해당 파일에 대한 편집 권한을 가진다"와 같은 전이적인(transitive) 관계를 직관적인 문법으로 표현할 수 있게 되었습니다. ### 컴파일러 및 성능 최적화 기술 * DSL로 작성된 정책을 런타임에 해석하는 대신, 효율적인 Go 코드로 변환하는 자체 컴파일러를 개발하여 실행 성능을 극대화하고 런타임 오버헤드를 최소화했습니다. * 컴파일 단계에서 정적 분석을 수행하여 순환 참조나 정의되지 않은 권한 사용 등 논리적 오류를 사전에 차단합니다. * 특히 '부분 평가(Partial Evaluation)' 기법을 도입하여, 권한 로직을 SQL 쿼리의 WHERE 절로 변환함으로써 수백만 개의 리소스 중 사용자가 접근 가능한 항목만 효율적으로 필터링할 수 있도록 구현했습니다. ### 안전한 전환을 위한 검증 및 배포 프로세스 * DSL 내부에 유닛 테스트를 직접 작성할 수 있는 기능을 포함시켜, 정책 변경이 기존의 기대 결과와 일치하는지 배포 전 즉시 검증할 수 있는 환경을 마련했습니다. * '섀도 모드(Shadow mode)'를 활용하여 실제 트래픽에서 기존의 레거시 권한 로직 결과와 새로운 Permit 시스템의 결과를 실시간으로 비교하며 데이터 정합성을 확인했습니다. * 성능 모니터링을 통해 권한 확인 작업이 전체 API 응답 시간에 미치는 영향을 정밀하게 추적하며 안정성을 확보했습니다. 권한 관리는 단순한 기능을 넘어 대규모 SaaS의 보안과 확장성을 결정짓는 핵심 인프라입니다. 피그마의 사례처럼 권한 로직을 비즈니스 코드에서 분리하여 '정책(Policy)'으로서 중앙 집중화하고 코드화하는 전략은, 제품의 복잡도가 높아질수록 개발 생산성과 시스템 안정성을 동시에 잡을 수 있는 가장 강력한 방법 중 하나입니다.

게임 개발자 플레이북: 세 (새 탭에서 열림)

디스코드는 커뮤니티 운영에 있어 정형화된 '모범 사례'에 얽매이기보다, 각 서버의 고유한 특성에 맞춰 타 서버의 창의적인 아이디어를 참고하고 변형할 것을 권장합니다. 커뮤니티의 진정한 성공 지표는 단순한 멤버 수가 아닌 유저들의 실질적인 '참여도(Engagement)'에 있으며, 이를 위해 서버 탐색 기능을 적극적으로 활용하여 영감을 얻는 것이 중요합니다. 이번 가이드는 포트나이트, 로켓 리그, 딥 락 갤럭틱의 사례를 통해 멀티플레이어 게임 커뮤니티가 어떻게 최적의 서버 환경을 구축하고 마케팅 목표를 달성하는지 분석합니다. **서버 탐색을 통한 영감 수집** * 서버 탐색(Server Discovery) 기능을 활용해 다른 커뮤니티가 채널을 구성하고 운영하는 방식을 직접 관찰할 수 있습니다. * 자신의 서버와 유사한 주제를 가진 서버뿐만 아니라, 게임과 관련 없는 카테고리의 서버에서도 유용한 운영 팁과 아이디어를 발견할 수 있습니다. * 단순히 다른 서버의 형식을 복제하는 데 그치지 않고, 자신의 커뮤니티 요구 사항에 맞게 아이디어를 변주(Riffing)하여 적용하는 과정이 필요합니다. **성공적인 커뮤니티의 핵심 지표** * 커뮤니티의 규모를 판단할 때 멤버 숫자에만 매몰되지 말고, 유저들이 얼마나 활발하게 상호작용하는지에 집중해야 합니다. * 추천 페이지에 오른 대형 서버 외에도 특정 주제를 깊이 있게 다루는 다양한 서버들을 검색해 보며 참여도를 높이는 구체적인 방안을 연구해야 합니다. **멀티플레이어 서버 설정의 우수 사례** * 포트나이트, 로켓 리그, 딥 락 갤럭틱은 각기 다른 커뮤니티 니즈와 마케팅 전략을 충실히 반영한 최상급 서버 설정 모델을 보여줍니다. * 이들 서버는 단순한 카테고리 분류나 채널 생성, 권한 설정을 넘어 게임의 특성과 유저 경험을 극대화할 수 있는 고유한 구조를 갖추고 있습니다. * 각 게임의 개발 단계(비공개 테스트, 얼리 액세스 등)에 맞춰 커뮤니티를 어떻게 전략적으로 운영해야 하는지에 대한 실무적인 예시를 제공합니다. 성공적인 게임 커뮤니티를 구축하고 싶다면 먼저 서버 탐색 기능을 통해 다양한 성공 사례를 벤치마킹해 보시기 바랍니다. 규모를 키우는 마케팅보다는 유저가 실질적으로 활동할 수 있는 공간을 설계하는 것이 장기적인 커뮤니티 성장의 핵심입니다.