Files
vexplor_dev/docs/yc/UML[계획]-user-mail.md

6.0 KiB

UML[계획] - 사용자 메일 관리 시스템

개요

벡스플로우(Vexflow) 사용자 메일 관리 페이지 구현 프로젝트입니다. 외부 메일 서버(POP3/IMAP)와 연동하여 사용자가 본인의 메일 계정을 등록하고 벡스플로우 내에서 메일을 조회할 수 있는 기능을 제공합니다.

현재 동작

  • Admin 메일 시스템만 존재
  • JSON 파일 기반 저장소
  • 사용자 구분 없음

변경 후 동작

  • 사용자가 외부 메일 계정(IMAP 또는 POP3) 등록
  • 벡스플로우에서 해당 계정의 메일 조회
  • PostgreSQL 기반 계정 저장 및 관리
  • 사용자별 격리(user_id 기반)

아키텍처

┌─────────────┐
│   사용자     │
│  (Frontend)  │
└──────┬──────┘
       │
       ├─→ /mail/imap 페이지
       └─→ /mail/pop3 페이지
              │
              ↓
       ┌──────────────────┐
       │   userMail.ts    │ (API 클라이언트)
       │  (lib/api/)      │
       └────────┬─────────┘
                │
                ↓
       ┌────────────────────────────┐
       │  /api/user-mail/* 라우트   │
       │  (userMailController)      │
       └────────┬───────────────────┘
                │
        ┌───────┴────────┐
        │                │
        ↓                ↓
   ┌────────────────┐  ┌──────────────┐
   │ userMailAccount│  │ userMailImap │
   │  Service       │  │ Service      │
   │ (PostgreSQL)   │  │ (IMAP)       │
   └────────────────┘  │              │
                       └──────────────┘
                              │
                              ↓
                       ┌──────────────────┐
                       │  외부 IMAP 서버   │
                       └──────────────────┘

   또는

                       ┌──────────────────┐
                       │ userMailPop3     │
                       │ Service          │
                       │ (POP3)           │
                       └──────────────────┘
                              │
                              ↓
                       ┌──────────────────┐
                       │  외부 POP3 서버   │
                       └──────────────────┘

신규 파일 목록

백엔드 (Node.js/Express)

파일 경로 역할
src/services/userMailAccountService.ts DB 계정 관리 (생성, 조회, 삭제, 수정)
src/services/userMailImapService.ts IMAP 프로토콜 연결 및 메일 조회
src/services/userMailPop3Service.ts POP3 프로토콜 연결 및 메일 조회
src/controllers/userMailController.ts API 엔드포인트 처리
src/routes/userMailRoutes.ts 라우트 정의

프론트엔드 (React/TypeScript)

파일 경로 역할
frontend/lib/api/userMail.ts API 클라이언트
frontend/app/(main)/mail/imap/page.tsx IMAP 메일 관리 페이지
frontend/app/(main)/mail/pop3/page.tsx POP3 메일 관리 페이지

수정 파일 목록

파일 경로 변경 사항
src/runMigration.ts 마이그레이션 스크립트에 user_mail_accounts 테이블 추가
src/app.ts userMailRoutes 등록
src/components/AdminPageRenderer.tsx /mail/imap, /mail/pop3 페이지 하드코딩 등록 (2줄)

데이터베이스 스키마

user_mail_accounts 테이블

CREATE TABLE user_mail_accounts (
  id SERIAL PRIMARY KEY,
  user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  protocol VARCHAR(10) NOT NULL CHECK (protocol IN ('imap', 'pop3')),
  host VARCHAR(255) NOT NULL,
  port INT NOT NULL DEFAULT 993,
  use_tls BOOLEAN DEFAULT TRUE,
  username VARCHAR(255) NOT NULL,
  password TEXT NOT NULL, -- 암호화됨 (encryptionService 사용)
  status VARCHAR(20) DEFAULT 'active' CHECK (status IN ('active', 'inactive')),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE(user_id, protocol, host, username)
);

설계 원칙

1. 사용자 격리

  • 모든 API 요청에서 현재 사용자의 user_id 검증
  • 다른 사용자의 계정/메일 접근 불가

2. 프로토콜별 서비스 분리

  • userMailImapService.ts: IMAP 전용
  • userMailPop3Service.ts: POP3 전용
  • 각 서비스는 독립적으로 동작

3. 기존 기능 재활용

  • encryptionService: 비밀번호 암호화/복호화
  • mailparser: 메일 본문 파싱
  • imap 패키지: IMAP 연결(기존 mailReceiveBasicService 참조)

4. 기존 Admin 메일 시스템과 분리

  • 새로운 테이블, 서비스, 라우트로 완전 독립
  • JSON 파일 기반 방식 미사용

주요 API 엔드포인트

메서드 경로 설명
POST /api/user-mail/accounts 새 계정 등록
GET /api/user-mail/accounts 사용자 계정 목록
GET /api/user-mail/accounts/:id 계정 상세 조회
PUT /api/user-mail/accounts/:id 계정 수정
DELETE /api/user-mail/accounts/:id 계정 삭제
POST /api/user-mail/accounts/:id/test 연결 테스트
GET /api/user-mail/accounts/:id/mails 메일 목록 조회

변경 이력

날짜 버전 내용
2026-03-27 v1.0 초안 작성