방관자가 아닌실행자입니다.

트렌드를 구경하는 대신, 직접 서비스로 만들며 배웁니다.

Scroll to explore
About
김세민 프로필 사진

김세민

AI DevOps / Backend Developer

새로운 기술이 보이면 상상보단 실행합니다.

Backend

FastAPINestJSSaga PatternCircuit BreakerMSA

AI / LLM

AI AgentAI OrchestrationPrompt EngineeringLoRALLM Evaluation

Infra / DevOps

DockerArgoCDGitHub Actionsn8nk3sPrometheusGrafanaLoki

Data

PostgreSQLRedisRabbitMQ

Frontend

Next.jsReactTailwind CSS
Project

AlgoSu

알고리즘 스터디 관리 플랫폼 — 코드 제출부터 AI 분석까지 자동화

이 반복 작업, 자동화하면 안 될까?

알고리즘 스터디를 운영하면서 코드 리뷰의 비효율성을 경험했습니다. 매주 반복되는 수동 리뷰, 일관성 없는 피드백, 그리고 학습 진도 추적의 어려움이 있었습니다.

이 문제를 AI로 해결하기로 결정했습니다. 단순한 코드 분석을 넘어, 학습 패턴을 이해하고 개인화된 피드백을 제공하는 지능형 플랫폼을 구축했습니다.

algo-su.com
AlgoSu 플랫폼 스크린샷
algo-su.com

AI-Driven Architecture

Tier 1

Core Analysis

프로젝트 기반 설계 — 인프라, 보안, 배포 의사결정

  • 심판관 (Oracle)

    최종 기획 결정 및 아키텍처 승인

  • 기반설계자 (Architect)

    k3s 인프라, CI/CD 파이프라인 설계

  • 지휘자 (Conductor)

    배포 파이프라인 오케스트레이션

  • 관문지기 (Gatekeeper)

    인증/보안 — OAuth, JWT, Rate Limit

Tier 2

Learning Intelligence

도메인 구현 — API, 문제관리, Saga, UI 구현

  • 배달부 (Postman)

    API 설계 및 서비스 간 통신

  • 출제자 (Curator)

    문제 도메인 CRUD 및 주차별 관리

  • 서기관 (Scribe)

    Saga 오케스트레이션 및 트랜잭션 관리

  • 팔레트 (Palette)

    UI/UX 구현 — Next.js, shadcn/ui

Tier 3

Operations

운영 & 자동화 — AI 분석, 실시간 알림, GitHub 연동, 문서화

  • 분석가 (Sensei)

    AI 파이프라인 — Claude API, Circuit Breaker

  • 전령 (Herald)

    SSE 실시간 알림 및 상태 브로드캐스트

  • 정찰병 (Scout)

    GitHub 연동 — Octokit Push, 멱등성 처리

  • 기록관리자 (Librarian)

    ADR 문서화 및 런북 관리

System Design

Next.js → Gateway → 6개 마이크로서비스 + 비동기 워커 (PostgreSQL, RabbitMQ, Redis)

Tech Decisions

$0

월 인프라 비용

k3s vs EKS/GKE

HPA, PDB, NetworkPolicy 모두 지원하면서 인프라 비용 $0/월 달성

3

프레임워크, 6개 서비스

FastAPI + NestJS 동시 사용

Claude SDK Python 우선 지원 활용 + TypeORM/DI 파이프라인 일관성 확보

128Mi

최소 메모리

RabbitMQ vs Kafka

ARM 프리티어에 적합한 리소스 + prefetch=2로 백프레셔 제어

12

에이전트, 추가 인프라 $0

에이전트 오케스트레이션 자체 구현

추가 인프라 없이 프롬프트만으로 역할 분담 — 심판관, 설계자, 서기관 등 12인팀 운영

3

보상 트랜잭션 전략

Saga 오케스트레이션 패턴

DB→MQ 순서로 멱등성 보장, 서비스 재시작 시 미완료 Saga 자동 재개

Code Showcase

services/submission/src/saga/saga-orchestrator.service.ts

분산 트랜잭션 관리 — 낙관적 락 + 멱등성 순서 보장 + 서비스 재시작 시 미완료 Saga 자동 재개

@Injectable()
export class SagaOrchestratorService implements OnModuleInit {

  private static readonly STEP_TIMEOUTS: Record<SagaStep, number> = {
    [SagaStep.DB_SAVED]: 5 * 60 * 1000,       // 5분
    [SagaStep.GITHUB_QUEUED]: 15 * 60 * 1000,  // 15분
    [SagaStep.AI_QUEUED]: 30 * 60 * 1000,      // 30분
  };

  // Startup — 미완료 Saga 자동 재개
  async onModuleInit(): Promise<void> {
    const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);
    const incomplete = await this.submissionRepo.find({
      where: {
        sagaStep: Not(In([SagaStep.DONE, SagaStep.FAILED])),
        createdAt: MoreThan(oneHourAgo),
      },
    });
    for (const sub of incomplete) {
      await this.resumeSaga(sub);
    }
  }

  // 낙관적 락 + 멱등성
  async advanceToGitHubQueued(id: string): Promise<void> {
    const result = await this.submissionRepo.update(
      { id, sagaStep: SagaStep.DB_SAVED },
      { sagaStep: SagaStep.GITHUB_QUEUED },
    );
    if (result.affected === 0) return;  // 이미 진행됨
    await this.mqPublisher.publishGitHubPush({ submissionId: id });
  }
}

Troubleshooting

Architecture

데이터 소유권은 첫 설계에서 확정

Gateway가 Identity DB 직접 접근으로 출발. 분리 시 34개 API 신규 구축, 19파일 리팩터링, 597개 테스트 수정 발생.

597개 테스트 수정

Trade-off

정석보다 현실 제약 우선

Outbox 패턴(Debezium CDC)은 ARM 프리티어에서 리소스 초과. 낙관적 락 + 타임아웃 재개 조합으로 현 트래픽 규모에 충분한 안정성 확보.

Operations

사람의 실수는 CI 자동화로 방지

amend 커밋이 paths-filter 우회로 변경 서비스 빌드 누락 발생. force-push 금지 정책 수립 + CI 단계 강제 차단 적용.

Performance

리소스 제약이 과설계 제거의 기회

ARM 프리티어 제약으로 DB 커넥션 풀 40→20 축소, CI jobs 24→15 최적화, HPA 자동 스케일링 도입.

CI jobs -37.5%

Testing

로그 없는 실패는 가장 비싼 기술 부채

Guard 403 간헐 발생, 로그 미출력으로 원인 추적 불가. 캐시 히트 시 role 유효성 미검증이 원인. Sprint 40에서 테스트 보강.

Results

0

개발자

설계·개발·배포·운영 전 과정

0

마이크로서비스

NestJS 4 + FastAPI 1 + Node.js 1

0

AI 에이전트

자체 구현 오케스트레이션

0단계

CI/CD 파이프라인

15 jobs, 보안 스캔 포함

Contact

배우고, 만들고, 성장합니다.

채용 문의, 기술 이야기, 협업 제안 모두 환영합니다.