아키텍처 설계
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 연결 풀: 블록체인 노드 연결 재사용
보안 설계
다층 보호
- 네트워크 계층: TLS 암호화
- 인증 계층: 다중 인증 지원
- 애플리케이션 계층: 입력 검증, SQL 인젝션 방지
- 데이터 계층: 저장 시 암호화
속도 제한
- 연결 속도: 연결 남용 방지
- 전송 속도: 스팸 방지
- 인증 시도: 무차별 대입 공격 방지
확장성
수평 확장
┌─────────────┐
│로드 밸런서 │
└──────┬──────┘
│
┌─────────┼─────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│ 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
}자세한 기술 정보: