Enterprise Edition 기능 구현 가이드라인
GitLab EE(Enterprise Edition) 기능을 CE(Community Edition)와 분리하여 구현하는 방법과 SaaS 전용 기능, Dedicated 인스턴스 기능, 백엔드/프론트엔드 코드 분리 패턴을 설명합니다.
코드는 ee/ 에 둡니다 : 모든 Enterprise Edition(EE) 코드를 최상위 ee/ 디렉터리 안에 둡니다. 나머지 코드는 Community Edition(CE) 파일과 최대한 가깝게 유지해야 합니다. 테스트를 작성합니다 : 다른 코드와 마찬가지로 EE 기능도 회귀를 방지할 수 있도록 충분한 테스트 커버리지를 갖춰야 합니다. ee/ 의 모든 코드에는 ee/ 안에 대응하는 테스트가 있어야 합니다. 문서를 작성합니다. : doc/ 디렉터리에 문서를 추가합니다. 기능을 설명하고 해당하는 경우 스크린샷을 포함합니다. 기능이 적용되는 에디션 을 명시합니다. www-gitlab-com 프로젝트에 MR을 제출합니다. : 새 기능을 EE 기능 목록 에 추가합니다. 개발 환경의 런타임 모드 # EE Unlicensed : 메인 리포지터리 에서 설치했다면 일반 GDK 설치 상태가 이 모드입니다. EE licensed : GDK에 유효한 라이선스를 추가 한 경우입니다. GitLab.com : SaaS를 시뮬레이션 하는 경우입니다. CE : 위의 어느 상태에서든 CE를 시뮬레이션 하는 경우입니다. 기능 구현 결정 흐름 # 다음 다이어그램은 CE/EE/SaaS/Dedicated 계층 전반에서 기능을 어디에 어떻게 구현할지 결정하는 방법을 보여 줍니다. Mermaid 다이어그램 (57줄) 소스 코드 보기 %%{init: { "fontFamily": "GitLab Sans" }}%% flowchart TD accTitle: Feature implementation decision flow accDescr: Diagram showing how to decide where and how to implement features across CE/EE/SaaS/Dedicated layers A[Developer wants to implement a feature] --> B{What type of feature?} B -->|CE Feature| C[Implement in main codebase] B -->|EE Licensed Feature| D[EE Feature Path] B -->|SaaS-only Feature| E[SaaS Feature Path] B -->|Dedicated Feature| F[Dedicated Feature Path] C --> C1[Place code in app/, lib/, etc.] C --> C2[Write tests in spec/] C --> C3[No license checks needed] D --> D1{New or extending existing?} D1 -->|New EE Feature| D2[Place in ee/ directory] D1 -->|Extending CE| D3[Create EE module with prepend_mod] D2 --&