방관자가 아닌실행자입니다.
트렌드를 구경하는 대신, 직접 서비스로 만들며 배웁니다.

김세민
AI DevOps / Backend Developer
새로운 기술이 보이면 상상보단 실행합니다.
Backend
AI / LLM
Infra / DevOps
Data
Frontend
AlgoSu
알고리즘 스터디 관리 플랫폼 — 코드 제출부터 AI 분석까지 자동화
이 반복 작업, 자동화하면 안 될까?
알고리즘 스터디를 운영하면서 코드 리뷰의 비효율성을 경험했습니다. 매주 반복되는 수동 리뷰, 일관성 없는 피드백, 그리고 학습 진도 추적의 어려움이 있었습니다.
이 문제를 AI로 해결하기로 결정했습니다. 단순한 코드 분석을 넘어, 학습 패턴을 이해하고 개인화된 피드백을 제공하는 지능형 플랫폼을 구축했습니다.
AI-Driven Architecture
Core Analysis
프로젝트 기반 설계 — 인프라, 보안, 배포 의사결정
- 심판관 (Oracle)
최종 기획 결정 및 아키텍처 승인
- 기반설계자 (Architect)
k3s 인프라, CI/CD 파이프라인 설계
- 지휘자 (Conductor)
배포 파이프라인 오케스트레이션
- 관문지기 (Gatekeeper)
인증/보안 — OAuth, JWT, Rate Limit
Learning Intelligence
도메인 구현 — API, 문제관리, Saga, UI 구현
- 배달부 (Postman)
API 설계 및 서비스 간 통신
- 출제자 (Curator)
문제 도메인 CRUD 및 주차별 관리
- 서기관 (Scribe)
Saga 오케스트레이션 및 트랜잭션 관리
- 팔레트 (Palette)
UI/UX 구현 — Next.js, shadcn/ui
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
월 인프라 비용
k3s vs EKS/GKE
HPA, PDB, NetworkPolicy 모두 지원하면서 인프라 비용 $0/월 달성
프레임워크, 6개 서비스
FastAPI + NestJS 동시 사용
Claude SDK Python 우선 지원 활용 + TypeORM/DI 파이프라인 일관성 확보
최소 메모리
RabbitMQ vs Kafka
ARM 프리티어에 적합한 리소스 + prefetch=2로 백프레셔 제어
에이전트, 추가 인프라 $0
에이전트 오케스트레이션 자체 구현
추가 인프라 없이 프롬프트만으로 역할 분담 — 심판관, 설계자, 서기관 등 12인팀 운영
보상 트랜잭션 전략
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
데이터 소유권은 첫 설계에서 확정
Gateway가 Identity DB 직접 접근으로 출발. 분리 시 34개 API 신규 구축, 19파일 리팩터링, 597개 테스트 수정 발생.
597개 테스트 수정
정석보다 현실 제약 우선
Outbox 패턴(Debezium CDC)은 ARM 프리티어에서 리소스 초과. 낙관적 락 + 타임아웃 재개 조합으로 현 트래픽 규모에 충분한 안정성 확보.
사람의 실수는 CI 자동화로 방지
amend 커밋이 paths-filter 우회로 변경 서비스 빌드 누락 발생. force-push 금지 정책 수립 + CI 단계 강제 차단 적용.
리소스 제약이 과설계 제거의 기회
ARM 프리티어 제약으로 DB 커넥션 풀 40→20 축소, CI jobs 24→15 최적화, HPA 자동 스케일링 도입.
CI jobs -37.5%
로그 없는 실패는 가장 비싼 기술 부채
Guard 403 간헐 발생, 로그 미출력으로 원인 추적 불가. 캐시 히트 시 role 유효성 미검증이 원인. Sprint 40에서 테스트 보강.
Results
0인
개발자
설계·개발·배포·운영 전 과정
0개
마이크로서비스
NestJS 4 + FastAPI 1 + Node.js 1
0개
AI 에이전트
자체 구현 오케스트레이션
0단계
CI/CD 파이프라인
15 jobs, 보안 스캔 포함
