Skip to main content

2026년 1월 변경 이력

2026-01-30

📧 이메일 시스템(Email System) 도입 및 설계

사용자 보안 강화와 안정적인 커뮤니케이션을 위한 이메일 발송 시스템 설계를 완료했습니다.

  • AWS SES 기반 인프라: 고비용 SMTP 대신 확장성과 신뢰성이 높은 AWS SES를 메인 프로바이더로 채택했습니다.
  • Redis 활용 비동기 인증:
    • 링크 인증 방식: 사용자 경험(UX)을 고려한 이메일 내 버튼 클릭 인증 방식을 설계했습니다.
    • 토큰 관리: 인증 토큰을 Redis에 TTL(30분)과 함께 저장하여 DB 부하를 줄이고 보안을 강화했습니다.
  • 비동기 처리: 이메일 전송 작업을 백그라운드 큐에서 처리하여 회원가입 시 사용자 응답 지연을 방지하는 아키텍처를 수립했습니다.
  • 문서화: 이메일 시스템 설계 문서를 신설하여 아키텍처와 구현 로드맵을 기록했습니다.

2026-01-21

👤 페르소나(Persona) 기반 서비스 전환 및 인프라 구축

단순 생성 도구를 넘어 '나만의 AI 인플루언서'를 만들고 관리할 수 있는 서비스로 진화하기 위한 핵심 인프라를 구축했습니다.

  • Backend: 페르소나 관리 시스템

    • 데이터 모델: Persona 엔티티를 추가하여 유저별 캐릭터 정보를 관리합니다. (이름, 설명, 기본 프롬프트, 원본/썸네일 이미지 경로 포함)
    • DB 마이그레이션: personasworkflow_mappings 테이블 생성을 위한 마이그레이션을 완료했습니다.
    • 워크플로우 매핑: 특정 기능(예: 페르소나 사진 생성)이 실제 어떤 워크플로우를 사용할지 관리자가 동적으로 설정할 수 있는 WorkflowMapping 시스템을 도입했습니다.
    • S3 스토리지 확장: StorageController에서 bucketType('temp' | 'permanent')을 지원하여 페르소나와 같은 영구 데이터를 분리 저장할 수 있도록 개선했습니다.
  • Frontend: 사용자 중심 페르소나 UI

    • 이미지 크롭(Cropping): react-easy-crop을 도입하여 페르소나 등록 시 유저가 직접 원형 아바타 영역을 지정할 수 있는 UI를 구현했습니다.
    • UUID 파일명: 업로드 시 파일명을 UUID로 강제 변환하여 특수문자로 인한 경로 깨짐 문제를 원천 방지했습니다.
    • 레이아웃 개편:
      • 페르소나 목록 페이지(/personas) 신설 및 '추가 카드' 디자인 적용.
      • 페르소나 상세 페이지(/personas/[id]) 레이아웃 구축.
      • 사이드 메뉴에 페르소나 바로가기 추가.
    • 화면 최적화: 고정된 maxWidth를 제거하고 화면 폭을 최대로 활용하는 시원한 레이아웃으로 변경했습니다.

2026-01-19

💰 자동 환불 시스템 구축 (Auto-Refund System)

  • 문서: Vivid Token 설계
  • 내용: 시스템 장애나 예외 상황 발생 시 사용자 자산을 보호하기 위한 자동 환불 메커니즘을 도입했습니다.
    • 즉시 환불: 생성 실패(FAILED) 시 즉시 환불.
    • 대기열 타임아웃: 대기(PENDING) 1시간 초과 시 자동 취소 및 환불.
    • 워커 장애 감지: 실행 중(PROCESSING) 10분 이상 무응답 시 자동 취소 및 환불.

2026-01-12

🚀 시스템 관리 및 보안 강화

서버 웜업 매니저 (Server Warmup Manager) 고도화

  • 스테이징/라이브 패턴 도입: 관리자 UI에서 설정을 즉시 반영하지 않고 '스테이징' 상태로 관리한 뒤, 'S3 배포(Sync)' 버튼을 통해 한꺼번에 반영하는 워크플로우를 구축했습니다.
  • 트랜잭션 기반 S3 동기화: DB 업데이트와 S3 파일 업로드를 하나의 트랜잭션으로 묶어, 어느 한 쪽이 실패할 경우 전체 롤백되도록 구현하여 데이터 정합성을 확보했습니다.
  • 변경 감지 (MD5 Hashing): DB에 저장된 JSON과 S3의 실제 파일 내용을 비교하기 위해 MD5 해시값을 메타데이터로 관리합니다. 이를 통해 UI에서 "Changed(변경됨)" 상태를 시각적으로 표시합니다.
  • 백엔드 캐싱 최적화: S3 메타데이터 조회 비용을 절감하기 위해 백엔드에서 60초간 S3 데이터를 캐싱하며, Sync 성공 시 즉시 캐시를 무효화합니다.
  • Revert 기능: 현재 DB 설정을 버리고 S3의 최신 라이브 상태로 복구하는 기능을 추가했습니다.

다중 계층 속도 제한 시스템 (Multi-layer Rate Limiting)

  • 글로벌 표준 제한: 백엔드 전역에 분당 120회의 요청 제한을 적용하여 일반적인 공격과 무분별한 스크랩을 방지합니다.
  • 버스트 보호 (Burst Protection): 페이지 로딩 시 발생하는 동시 API 요청을 수용하기 위해 전역 초당 제한을 20회로 상향 조정했습니다.
  • 민감 기능 정밀 제어: S3 비용과 직결되는 웜업 매니저 API에는 분당 10회, 초당 5회의 엄격한 제한을 적용했습니다.
  • 프론트엔드 UX 가이드:
    • 생성 버튼 쿨다운: 생성 요청 성공 시 5초간 버튼을 비활성화하고 타이머를 표시하여 사용자의 실수 및 연타를 방지합니다.
    • 관리자 쿨다운: 웜업 매니저의 새로고침(30초) 및 배포(60초) 버튼에 로컬 타이머를 적용하고 차단 시 토스트 알림을 제공합니다.
  • 시스템 헬스체크 예외: Kubernetes의 Readiness Probe가 차단되지 않도록 /v1 엔드포인트에 넉넉한 전용 제한(분당 300회)을 설정했습니다.

📝 문서화

  • ROADMAP.md: 시스템 관리 및 보안 섹션을 추가하고 진행 상황을 업데이트했습니다.
  • OVERVIEW.md: 프로젝트 핵심 목표에 시스템 관리 및 보안 강화 내용을 반영했습니다.

2026-01-07

🚀 인프라 개선 및 보안 설정

EKS 네트워크 보안 및 연결성 강화

  • 보안 그룹 최적화: EKS 클러스터와 AWS 리소스(RDS, ElastiCache) 간의 통신을 위해 필수 포트(3000, 53 UDP/TCP, 6379, 443, 10250, 9443)를 식별하고 보안 그룹에 반영했습니다.
  • 애플리케이션 가용성 확보: ALB Load Balancer Controller에 의해 관리되는 3000번 포트 규칙의 중요성을 확인하고 가이드에 추가했습니다.
  • DNS 장애 해결: DNS 조회 시 발생하던 EAI_AGAIN 에러의 원인이 UDP 53번 포트 차단임을 확인하고, 이를 허용하여 Redis 및 외부 서비스 연결 안정성을 확보했습니다.

🚀 데이터베이스 마이그레이션 체계 도입 및 환경 동기화

마이그레이션 중심의 개발 프로세스 전환

  • Synchronize 비활성화: 모든 환경(Local, Dev, Prod)에서 TypeORM의 synchronize: false를 설정하여 의도치 않은 스키마 변경을 방지합니다.
  • Initial Schema 통합: 모든 환경의 데이터베이스를 초기화하고, initialSchema 마이그레이션 파일을 통해 동일한 스키마 상태로 동기화했습니다.
  • 자동 마이그레이션(MigrationsRun): 서버 기동 시 미적용 마이그레이션 파일이 있다면 자동으로 실행되도록 migrationsRun: true를 설정했습니다. 이제 배포 시 마이그레이션 파일만 포함하면 DB가 자동으로 업데이트됩니다.

Multi-Variant 기반 동적 미디어 처리 강화

  • Media Input Panel: Advanced Settings 내에 'Media' 탭을 신설하여 모델의 inputConfig에 따라 필요한 이미지/비디오 슬롯이 동적으로 나타나도록 구현했습니다.
  • 지연 업로드(Lazy Upload): 생성 버튼 클릭 시점에만 S3로 업로드하고, 반환된 S3 경로를 워크플로우 매핑 값으로 치환하는 효율적인 프로세스를 도입했습니다.
  • S3-ComfyUI 연동: ai-node-agent가 워크플로우 내의 s3:// 주소를 감지하여 ComfyUI의 로컬 input 디렉토리로 자동 다운로드 및 경로 치환을 수행하도록 개선했습니다.

📝 문서화

  • SECURITY_GROUPS.md: EKS 환경에서 필요한 핵심 포트 목록과 DNS 트러블슈팅 가이드를 포함한 신규 문서를 작성했습니다.
  • README.md: 인프라 섹션에 보안 그룹 설정 가이드 링크를 추가했습니다.
  • BACKEND_README.md: 데이터베이스 마이그레이션 가이드 및 신규 개발 워크플로우 정책을 업데이트했습니다.

2026-01-06

🚀 기능 추가 및 개선

Multi-Variant Workflow 시스템 도입

  • Backend: Workflow 엔티티를 WorkflowGroupWorkflowVariant로 분리하여 1:N 구조를 지원합니다.
    • WorkflowGroup: 제품(Product) 레벨의 메타데이터(이름, 설명, 가격, 카테고리 등) 관리.
    • WorkflowVariant: 구현(Implementation) 레벨의 ComfyUI 워크플로우 및 매핑 정보 관리.
    • 동적 라우팅: 사용자의 입력 데이터(text_1, image_1 등) 조합을 분석하여 적절한 Variant를 자동으로 선택하는 로직 구현.
  • Frontend:
    • Admin Panel: 4단계 워크플로우 생성 마법사(Basic Info -> Variants -> Mappings -> User Inputs) 구현.
    • User UI: GlobalGenerator에서 선택된 그룹의 Variant 정보를 기반으로 동적으로 입력 폼을 렌더링하도록 개선.

프롬프트 데이터 표준화

  • 키 표준화: 기존의 positive_prompt, prompt 등의 혼재된 키를 text_1, text_2 등의 표준화된 키로 통합 관리합니다.
  • UI 반영: Frontend 갤러리 및 상세 페이지에서 text_1 필드를 우선적으로 사용하여 프롬프트를 표시하도록 로직을 수정했습니다.

UI/UX 및 성능 개선

  • Grid System: MUI v6 표준에 맞춰 Grid item 속성을 제거하고 size 속성을 도입했습니다.
  • 이미지 최적화: Next.js Image 컴포넌트에 sizes prop을 추가하고 width/height 스타일(auto)을 보완하여 레이아웃 시프트 및 성능 경고를 해결했습니다.
  • 가상 스크롤: CreationVirtualList 로직을 CreationPage에 통합하여 상태 업데이트 충돌을 해결하고, smooth 스크롤 동작을 최적화했습니다.

🐛 버그 수정

  • 갤러리 렌더링 오류: 가상 스크롤 컴포넌트 분리로 인한 렌더링 충돌 문제를 해결했습니다.
  • 빈 이미지 소스 처리: 지갑 아이콘 및 생성 중인 이미지 Placeholder에서 빈 문자열("")이 src로 전달되어 발생하는 네트워크 오류를 수정했습니다.

📝 문서화

  • ARCHITECTURE.md: Multi-Variant 시스템 아키텍처 반영 확인 및 데이터 모델 설명 업데이트.