Skip to content

아키텍처 설계

SirrChat은 모듈식 아키텍처를 채택하여 유연하고 확장 가능한 이메일 서버 솔루션을 제공합니다.

전체 아키텍처

┌─────────────────────────────────────────────┐
│           클라이언트 계층                     │
│  (Thunderbird, Outlook, 모바일 앱)           │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           프로토콜 계층                       │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐    │
│  │  SMTP   │  │  IMAP   │  │Submission│    │
│  └─────────┘  └─────────┘  └─────────┘    │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           인증 계층                           │
│  ┌──────────┐  ┌─────┐  ┌─────┐  ┌──────┐ │
│  │Blockchain│  │LDAP │  │ PAM │  │Custom│ │
│  └──────────┘  └─────┘  └─────┘  └──────┘ │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           처리 계층                           │
│  ┌─────────┐  ┌──────┐  ┌─────────┐       │
│  │  Filter │  │Modify│  │  Check  │       │
│  │  (Sieve)│  │(DKIM)│  │(SPF/etc)│       │
│  └─────────┘  └──────┘  └─────────┘       │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           스토리지 계층                       │
│  ┌──────────┐  ┌────────────┐             │
│  │ Database │  │  Storage   │             │
│  │(PG/MySQL)│  │(Local/S3)  │             │
│  └──────────┘  └────────────┘             │
└─────────────────────────────────────────────┘

핵심 구성요소

프로토콜 핸들러

SMTP 서버

  • 이메일 수신 및 전송
  • STARTTLS 암호화 지원
  • 속도 제한 및 스팸 방지 조치 구현

IMAP 서버

  • 이메일 저장 및 검색
  • 폴더 관리
  • 이메일 검색 기능
  • IDLE 푸시 알림 지원

Submission 서버

  • 이메일 제출 (포트 587)
  • 필수 인증
  • 자동 DKIM 서명

인증 모듈

블록체인 인증

go
type BlockchainAuth struct {
    networks map[string]RPCClient
    cache    *AuthCache
}

func (b *BlockchainAuth) Verify(address, signature, message string) bool {
    // 1. Recover signer address
    // 2. Verify address match
    // 3. Check timestamp validity
    return verified
}

LDAP 인증

  • Active Directory 지원
  • 조직 단위(OU) 매핑
  • 속성 동기화

PAM 인증

  • 시스템 계정 통합
  • 다양한 PAM 모듈 지원

메시지 처리 파이프라인

수신 메일 → 스팸 검사 → 바이러스 스캔 → 필터 규칙

DB에 저장 ← DKIM 서명 ← 콘텐츠 수정 ← 사용자 규칙

스토리지 시스템

데이터베이스 계층

  • 사용자 데이터: 계정 정보, 할당량, 설정
  • 이메일 메타데이터: 발신자, 수신자, 제목, 타임스탬프
  • 인덱스: 빠른 검색 및 검색

파일 스토리지

  • Maildir 형식: 이메일당 하나의 파일
  • 압축: 오래된 이메일 자동 압축
  • S3 호환: 클라우드 스토리지로 확장 가능

데이터 흐름

이메일 전송 흐름

1. 클라이언트 연결 (SMTP/Submission)

2. 인증 확인

3. 이메일 콘텐츠 수신

4. 수신자 확인

5. 필터 규칙 적용

6. DKIM 서명

7. 큐 처리

8. 대상 서버로 전송

이메일 수신 흐름

1. 외부 서버 연결

2. SPF/DKIM/DMARC 검사

3. 스팸 검사

4. 사용자 규칙 적용 (Sieve)

5. 데이터베이스에 저장

6. 이메일 파일 저장

7. 클라이언트에 알림 (IMAP IDLE)

모듈 시스템

핵심 모듈

  • auth: 인증 제공자
  • storage: 스토리지 백엔드
  • filter: 이메일 필터링
  • modify: 콘텐츠 수정
  • check: 검증 확인

확장 포인트

go
type Module interface {
    Name() string
    Init(config Config) error
    Process(ctx Context, msg *Message) error
}

성능 최적화

동시성 모델

  • Goroutine 풀: 동시 연결 처리
  • 비동기 I/O: 논블로킹 네트워크 작업
  • 배치 처리: 데이터베이스 배치 작업

캐싱 전략

  • 인증 캐시: 블록체인 RPC 호출 감소
  • 사용자 데이터 캐시: 자주 사용되는 데이터를 메모리 캐시
  • DNS 캐시: DNS 쿼리 감소

연결 풀링

  • 데이터베이스 연결 풀: 데이터베이스 연결 재사용
  • RPC 연결 풀: 블록체인 노드 연결 재사용

보안 설계

다층 보호

  1. 네트워크 계층: TLS 암호화
  2. 인증 계층: 다중 인증 지원
  3. 애플리케이션 계층: 입력 검증, SQL 인젝션 방지
  4. 데이터 계층: 저장 시 암호화

속도 제한

  • 연결 속도: 연결 남용 방지
  • 전송 속도: 스팸 방지
  • 인증 시도: 무차별 대입 공격 방지

확장성

수평 확장

           ┌─────────────┐
           │로드 밸런서  │
           └──────┬──────┘

        ┌─────────┼─────────┐
        ▼         ▼         ▼
    ┌──────┐  ┌──────┐  ┌──────┐
    │ Node │  │ Node │  │ Node │
    │  1   │  │  2   │  │  3   │
    └───┬──┘  └───┬──┘  └───┬──┘
        │         │         │
        └─────────┼─────────┘

         ┌────────────────┐
         │  공유 스토리지  │
         │ (Database/S3)  │
         └────────────────┘

구성요소 분리

  • 독립 배포: SMTP, IMAP를 개별적으로 확장 가능
  • 공유 스토리지: 여러 인스턴스가 데이터 공유
  • 로드 밸런싱: 지능형 트래픽 분산

모니터링 및 로깅

메트릭 수집

  • 시스템 메트릭: CPU, 메모리, 디스크
  • 애플리케이션 메트릭: 이메일 처리량, 지연 시간
  • 비즈니스 메트릭: 사용자 활동, 스토리지 사용량

로깅 시스템

애플리케이션 로그 → 구조화된 출력 → 로그 집계 → 분석 플랫폼
                                      (ELK/Loki)

고가용성

페일오버

  • 마스터-슬레이브 복제: 데이터베이스 마스터-슬레이브 구성
  • 자동 전환: 상태 확인 및 자동 페일오버
  • 데이터 백업: 정기 백업 및 복구 테스트

상태 확인

go
type HealthCheck struct {
    Database  bool
    SMTP      bool
    IMAP      bool
    Storage   bool
}

자세한 기술 정보:

Released under the GPL 3.0 License.