mattermost-community-enterp.../Extend-Function.md
Claude 7e5c7b8c36 Add documentation and local build Dockerfile
- README.md: Build and deployment guide for beginners
- Extend-Function.md: Extended files list and version upgrade guide
- Unlock-License.md: License check removal documentation
- Dockerfile.local: Local source build support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 01:12:27 +09:00

11 KiB

Mattermost Community Enterprise - 확장 기능 문서

이 문서는 Team Edition에서 Enterprise 기능을 활성화하기 위해 생성/수정된 파일과 버전 업그레이드 시 이식해야 할 내용을 정리합니다.


프로젝트 구조

mattermost-community-enterprise/
├── enterprise/                    # Enterprise 브릿지 (기존)
│   └── community_imports.go       # enterprise-community 임포트
├── enterprise-impl/               # [신규] Enterprise 구현체
│   ├── enterprise.go              # 메인 등록 파일
│   ├── go.mod                     # 별도 모듈 정의
│   ├── go.sum
│   ├── ldap/                      # LDAP 구현
│   ├── saml/                      # SAML 구현
│   ├── cluster/                   # 클러스터링 구현
│   ├── metrics/                   # Prometheus 메트릭 구현
│   ├── compliance/                # 컴플라이언스 구현
│   ├── data_retention/            # 데이터 보존 구현
│   ├── message_export/            # 메시지 내보내기 구현
│   ├── account_migration/         # 계정 마이그레이션 구현
│   ├── access_control/            # 접근 제어 구현
│   ├── ip_filtering/              # IP 필터링 구현
│   ├── notification/              # 알림 구현
│   ├── oauthproviders/            # OAuth 프로바이더 구현
│   ├── outgoing_oauth_connection/ # 외부 OAuth 연결 구현
│   ├── push_proxy/                # 푸시 프록시 구현
│   └── searchengine/              # 검색 엔진 구현
├── enterprise-community/          # [신규] Enterprise 등록 파일
│   ├── imports.go                 # 모든 구현체 임포트
│   ├── ldap/init.go
│   ├── saml/init.go
│   ├── cluster/init.go
│   ├── metrics/init.go
│   ├── compliance/init.go
│   ├── data_retention/init.go
│   ├── message_export/init.go
│   ├── account_migration/init.go
│   ├── access_control/init.go
│   ├── ip_filtering/init.go
│   ├── notification/init.go
│   ├── outgoing_oauth_connection/init.go
│   ├── push_proxy/init.go
│   └── searchengine/init.go
├── channels/api4/                 # [수정됨] API 라이선스 체크 제거
│   ├── ldap.go
│   ├── saml.go
│   ├── user.go
│   ├── group.go
│   └── scheme.go
├── channels/app/platform/         # [수정됨] 메트릭 핸들러
│   └── metrics.go
├── Dockerfile.local               # [신규] 로컬 빌드용 Dockerfile
├── Dockerfile.mattermost          # [신규] Git 빌드용 Dockerfile
├── README.md                      # [신규] 빌드 가이드
├── Extend-Function.md             # [신규] 이 문서
└── Unlock-License.md              # [신규] 라이선스 해제 문서

생성된 파일 상세

1. enterprise-impl/ (Enterprise 구현체)

enterprise-impl/enterprise.go

Enterprise 기능 등록을 위한 메인 파일입니다.

package enterprise

import (
    "github.com/mattermost/mattermost/server/v8/channels/app"
    "github.com/mattermost/mattermost/server/v8/enterprise-impl/ldap"
    "github.com/mattermost/mattermost/server/v8/enterprise-impl/cluster"
    "github.com/mattermost/mattermost/server/v8/enterprise-impl/metrics"
    // ... 기타 imports
)

func init() {
    app.RegisterLdapInterface(ldap.New)
    app.RegisterClusterInterface(cluster.New)
    app.RegisterMetricsInterface(metrics.New)
    // ... 기타 등록
}

enterprise-impl/ldap/ldap.go

LDAP 인증 및 동기화 구현체입니다.

주요 메서드:

  • DoLogin() - LDAP 로그인 처리
  • GetUser() - LDAP에서 사용자 조회
  • GetGroup() - LDAP에서 그룹 조회
  • SyncAllUsers() - 모든 사용자 동기화
  • RunTest() - LDAP 연결 테스트

enterprise-impl/cluster/cluster.go

Redis 기반 클러스터링 구현체입니다.

주요 메서드:

  • StartInterNodeCommunication() - 노드 간 통신 시작
  • RegisterClusterMessageHandler() - 메시지 핸들러 등록
  • SendClusterMessage() - 클러스터 메시지 전송
  • GetClusterStats() - 클러스터 상태 조회

enterprise-impl/metrics/metrics.go

Prometheus 메트릭 수집 구현체입니다.

주요 메서드:

  • Register() - 메트릭 등록
  • Handler() - HTTP 핸들러 반환
  • IncrementHTTPRequest() - HTTP 요청 카운트
  • ObserveAPIEndpointDuration() - API 응답 시간 측정

2. enterprise-community/ (등록 파일)

enterprise-community/imports.go

모든 Enterprise 구현체를 임포트하여 init()이 실행되도록 합니다.

package enterprise_community

import (
    _ "github.com/mattermost/mattermost/server/v8/enterprise-community/ldap"
    _ "github.com/mattermost/mattermost/server/v8/enterprise-community/cluster"
    _ "github.com/mattermost/mattermost/server/v8/enterprise-community/metrics"
    // ... 기타 imports
)

enterprise-community/ldap/init.go

LDAP 구현체를 app에 등록합니다.

package ldap

import (
    "github.com/mattermost/mattermost/server/v8/channels/app"
    ldapImpl "github.com/mattermost/mattermost/server/v8/enterprise-impl/ldap"
)

func init() {
    app.RegisterLdapInterface(ldapImpl.New)
}

3. 수정된 파일

channels/api4/ldap.go

LDAP 관련 API에서 라이선스 체크 제거:

  • syncLdap() - LDAP 동기화
  • testLdap() - LDAP 연결 테스트
  • getLdapGroups() - LDAP 그룹 조회
  • linkLdapGroup() - LDAP 그룹 연결
  • unlinkLdapGroup() - LDAP 그룹 연결 해제
  • migrateIdLdap() - LDAP ID 마이그레이션
  • createLdapPublicCertificate() - 인증서 생성

channels/api4/scheme.go

커스텀 권한 스키마 API에서 라이선스 체크 제거:

  • createScheme() - 스키마 생성
  • patchScheme() - 스키마 수정
  • deleteScheme() - 스키마 삭제

channels/api4/group.go

그룹 관련 API에서 라이선스 체크 제거:

  • getGroupsByTeam() - 팀별 그룹 조회
  • getGroupsByChannel() - 채널별 그룹 조회

channels/api4/user.go

사용자 마이그레이션 API에서 라이선스 체크 제거:

  • migrateAuthToLdap() - LDAP 인증 마이그레이션
  • migrateAuthToSaml() - SAML 인증 마이그레이션

channels/app/platform/metrics.go

메트릭 라우터에 /metrics 핸들러 등록 추가:

// MetricsHandlerProvider 인터페이스 추가
type MetricsHandlerProvider interface {
    Handler() http.Handler
}

// initMetricsRouter()에 핸들러 등록 코드 추가
if pm.metricsImpl != nil {
    if handlerProvider, ok := pm.metricsImpl.(MetricsHandlerProvider); ok {
        pm.router.Handle("/metrics", handlerProvider.Handler())
    }
}

버전 업그레이드 가이드

Mattermost 새 버전으로 업그레이드할 때 다음 파일들을 이식해야 합니다.

필수 이식 파일

  1. enterprise-impl/ 전체 디렉토리

    • 새 버전의 einterfaces에 맞게 수정 필요
    • 인터페이스 변경 시 구현체 업데이트
  2. enterprise-community/ 전체 디렉토리

    • 새로운 Enterprise 기능 추가 시 init 파일 추가
    • app 패키지 경로 변경 시 import 수정
  3. enterprise/community_imports.go

    • enterprise-community 패키지 임포트 유지

API 라이선스 체크 재제거

새 버전에서 다음 파일들의 라이선스 체크를 다시 제거해야 합니다:

  1. channels/api4/ldap.go

    • c.App.Channels().License() == nil 조건문 찾아서 제거
    • !*c.App.Channels().License().Features.LDAP 조건 제거
  2. channels/api4/scheme.go

    • !*c.App.Channels().License().Features.CustomPermissionsSchemes 조건 제거
  3. channels/api4/group.go

    • !*c.App.Channels().License().Features.LDAPGroups 조건 제거
  4. channels/api4/user.go

    • LDAP/SAML 마이그레이션 라이선스 체크 제거
  5. channels/app/platform/metrics.go

    • MetricsHandlerProvider 인터페이스 추가
    • /metrics 핸들러 등록 코드 추가

이식 스크립트 예시

#!/bin/bash
# upgrade-mattermost.sh

NEW_VERSION=$1
OLD_DIR="mattermost-community-enterprise"
NEW_DIR="mattermost-server-$NEW_VERSION"

# 1. 새 버전 다운로드
git clone https://github.com/mattermost/mattermost.git $NEW_DIR
cd $NEW_DIR/server

# 2. Enterprise 구현체 복사
cp -r $OLD_DIR/enterprise-impl ./
cp -r $OLD_DIR/enterprise-community ./

# 3. community_imports.go 복사
cp $OLD_DIR/enterprise/community_imports.go ./enterprise/

# 4. go.mod 업데이트 (enterprise-impl 추가)
echo 'replace github.com/mattermost/mattermost/server/v8/enterprise-impl => ./enterprise-impl' >> go.mod

# 5. vendor 업데이트
go mod vendor

echo "이제 API 파일에서 라이선스 체크를 수동으로 제거하세요"

라이선스 체크 자동 제거 스크립트

#!/bin/bash
# remove-license-checks.sh

# LDAP 라이선스 체크 제거
sed -i '/c\.App\.Channels()\.License() == nil.*LDAP/d' channels/api4/ldap.go
sed -i '/!.*License()\.Features\.LDAP/d' channels/api4/ldap.go

# Scheme 라이선스 체크 제거
sed -i '/License()\.Features\.CustomPermissionsSchemes/d' channels/api4/scheme.go

# Group 라이선스 체크 제거
sed -i '/License()\.Features\.LDAPGroups/d' channels/api4/group.go

echo "라이선스 체크 제거 완료. 빌드 테스트를 실행하세요."

einterfaces 매핑

인터페이스 구현 파일 등록 함수
LdapInterface enterprise-impl/ldap/ldap.go app.RegisterLdapInterface
SamlInterface enterprise-impl/saml/saml.go app.RegisterSamlInterface
ClusterInterface enterprise-impl/cluster/cluster.go app.RegisterClusterInterface
MetricsInterface enterprise-impl/metrics/metrics.go app.RegisterMetricsInterface
ComplianceInterface enterprise-impl/compliance/compliance.go app.RegisterComplianceInterface
DataRetentionInterface enterprise-impl/data_retention/data_retention.go app.RegisterDataRetentionInterface
MessageExportInterface enterprise-impl/message_export/message_export.go app.RegisterMessageExportInterface
AccountMigrationInterface enterprise-impl/account_migration/account_migration.go app.RegisterAccountMigrationInterface

주의사항

  1. UI 라이선스 체크: 웹 클라이언트(client/ 디렉토리)에도 라이선스 체크가 있을 수 있습니다. JavaScript 파일은 minified 상태라 수정이 어렵습니다.

  2. 버전 호환성: 이 구현체는 Mattermost v9.x를 기준으로 작성되었습니다. 메이저 버전이 변경되면 인터페이스 시그니처가 달라질 수 있습니다.

  3. 테스트: 업그레이드 후 반드시 모든 Enterprise 기능을 테스트하세요:

    • LDAP 로그인
    • 클러스터 동기화
    • Prometheus 메트릭 (/metrics 엔드포인트)
    • 커스텀 권한 스키마 생성/수정
  4. 상용 사용: 이 프로젝트는 학습 및 개인 사용 목적입니다. 상용 환경에서는 Mattermost 공식 라이선스를 구매하세요.