Skip to content

모듈 시스템

SirrChat은 필요에 따라 기능을 사용자 정의하고 확장할 수 있는 모듈식 아키텍처를 채택합니다.

모듈 유형

Auth 모듈

사용자 인증을 처리합니다.

go
type AuthModule interface {
    Name() string
    Authenticate(username, credential string) (bool, error)
    Supports(method string) bool
}

Storage 모듈

이메일 및 데이터 스토리지를 관리합니다.

go
type StorageModule interface {
    Save(mailbox string, message *Message) error
    Load(mailbox string, uid uint32) (*Message, error)
    Delete(mailbox string, uid uint32) error
}

Filter 모듈

이메일 콘텐츠 필터링 및 처리.

go
type FilterModule interface {
    Filter(ctx *Context, msg *Message) (Action, error)
}

내장 모듈

blockchain-auth

블록체인 지갑 인증 모듈.

구성:

toml
[[modules.auth]]
name = "blockchain-auth"
enabled = true

[modules.auth.config]
networks = ["ethereum", "bsc"]

ldap-auth

LDAP 디렉토리 서비스 인증.

구성:

toml
[[modules.auth]]
name = "ldap-auth"
enabled = true

[modules.auth.config]
server = "ldap://ldap.example.com"

spam-filter

스팸 필터링 모듈.

구성:

toml
[[modules.filter]]
name = "spam-filter"
enabled = true

[modules.filter.config]
threshold = 5.0
quarantine = true

dkim-signer

DKIM 이메일 서명 모듈.

구성:

toml
[[modules.modify]]
name = "dkim-signer"
enabled = true

[modules.modify.config]
selector = "default"
private_key = "/etc/sirrchatd/dkim/private.key"

커스텀 모듈

모듈 생성

go
package mymodule

import "github.com/mail-chat-chain/mailchatd/module"

type MyFilter struct {
    config Config
}

func (f *MyFilter) Name() string {
    return "my-filter"
}

func (f *MyFilter) Init(cfg map[string]interface{}) error {
    // Initialize configuration
    return nil
}

func (f *MyFilter) Filter(ctx *module.Context, msg *module.Message) (module.Action, error) {
    // Implement filtering logic
    if someCondition(msg) {
        return module.ActionReject, nil
    }
    return module.ActionAccept, nil
}

모듈 등록

go
func init() {
    module.Register("my-filter", &MyFilter{})
}

모듈 구성

toml
[[modules.filter]]
name = "my-filter"
enabled = true

[modules.filter.config]
custom_option = "value"

모듈 관리

모듈 나열

bash
sirrchatd module list

출력:

Auth 모듈:
  - blockchain-auth (활성화)
  - ldap-auth (비활성화)
  - pam-auth (활성화)

Filter 모듈:
  - spam-filter (활성화)
  - virus-scanner (활성화)

Storage 모듈:
  - maildir (활성화)
  - s3 (비활성화)

모듈 활성화/비활성화

bash
# 모듈 활성화
sirrchatd module enable spam-filter

# 모듈 비활성화
sirrchatd module disable spam-filter

모듈 다시 로드

bash
sirrchatd module reload --name spam-filter

모듈 구성

전역 구성

toml
[modules]
# 모듈 로딩 경로
load_path = "/usr/lib/sirrchatd/modules"

# 자동 로드
auto_load = true

# 모듈 타임아웃
timeout = "30s"

모듈 우선순위

toml
[[modules.filter]]
name = "spam-filter"
priority = 100  # 낮은 숫자 = 높은 우선순위

[[modules.filter]]
name = "virus-scanner"
priority = 50

모듈 후크

사용 가능한 후크

  • pre_auth: 인증 전
  • post_auth: 인증 후
  • pre_receive: 이메일 수신 전
  • post_receive: 이메일 수신 후
  • pre_send: 이메일 전송 전
  • post_send: 이메일 전송 후

후크 예제

go
func (m *MyModule) PreReceive(ctx *Context, msg *Message) error {
    // Execute before receiving email
    log.Printf("Receiving email from %s", msg.From)
    return nil
}

모듈 개발

개발 환경 설정

bash
# 모듈 템플릿 복제
git clone https://github.com/mail-chat-chain/module-template.git my-module
cd my-module

# 의존성 설치
go mod download

# 모듈 빌드
go build -buildmode=plugin -o my-module.so

모듈 테스트

go
package mymodule_test

import (
    "testing"
    "github.com/mail-chat-chain/mailchatd/module"
)

func TestMyModule(t *testing.T) {
    m := &MyModule{}
    err := m.Init(map[string]interface{}{})
    if err != nil {
        t.Fatal(err)
    }

    // Test logic
}

패키징 및 릴리스

bash
# 릴리스 버전 빌드
go build -ldflags="-s -w" -buildmode=plugin

# 시스템에 설치
sudo cp my-module.so /usr/lib/sirrchatd/modules/

일반 모듈

rate-limiter

속도 제한 모듈.

toml
[[modules.filter]]
name = "rate-limiter"

[modules.filter.config]
max_per_hour = 100
max_per_minute = 10

auto-reply

자동 응답 모듈.

toml
[[modules.modify]]
name = "auto-reply"

[modules.modify.config]
enabled_users = ["[email protected]"]
message = "I'm out of office"

archive

이메일 아카이빙 모듈.

toml
[[modules.storage]]
name = "archive"

[modules.storage.config]
retention_days = 365
compress = true

모듈 성능

성능 모니터링

bash
sirrchatd module stats

출력:

모듈            호출    평균 시간    최대 시간
spam-filter     1,234    45ms        250ms
dkim-signer     1,234    12ms        45ms
virus-scanner   1,234    123ms       890ms

성능 최적화

toml
[modules.performance]
# 동시 처리
parallel = true
max_goroutines = 10

# 캐싱
enable_cache = true
cache_size_mb = 64

문제 해결

디버그 모드

toml
[modules.debug]
enabled = true
log_level = "debug"
trace_calls = true

모듈 로그

bash
# 모듈 로그 보기
sirrchatd module logs --name spam-filter

# 실시간 로그
sirrchatd module logs --name spam-filter --follow

관련 문서:

Released under the GPL 3.0 License.