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

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

Scroll to explore
About Me
김세민 profile

김세민

Agentic AI Engineer / Builder

Role

Agentic AI Engineer &
Builder

에이전트를 설계·지휘하며 E2E, A2A 프로덕션 시스템을 구축합니다.

Backend
FastAPINestJSSaga PatternCircuit BreakerMSA
AI & LLM
AI AgentAI OrchestrationPrompt EngineeringLoRALLM Evaluation
Infra & DevOps
DockerArgoCDGitHub Actionsn8nk3sPrometheusGrafanaLoki
Data
PostgreSQLRedisRabbitMQ
Frontend
Next.jsReactTailwind CSS
Project

AlgoSu · 알고리즘 스터디 관리 플랫폼

0
개발자
설계·개발·배포·운영 전 과정
0
마이크로서비스
NestJS 4 + FastAPI 1 + Node.js 1
0
AI 에이전트
자체 구현 오케스트레이션
0단계
CI/CD 파이프라인
15 jobs, 보안 스캔 포함

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

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

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

UX

사용자 경험의 변화

AlgoSu 도입 전에는 스터디장 혼자 수기로 모든 과정을 처리했습니다. 이제는 로그인 후 클릭 몇 번으로 끝납니다.

Before — 수기 스터디 운영

스터디 공지매주 문제·마감 공지를 수동 발송스터디원 수기 제출Slack·카톡·GitHub PR 등 분산 채널스터디장 수동 리뷰스터디장이 직접 코드 읽고 채점개별 피드백 작성반복적·비일관적 피드백누락·지연 발생리뷰 누락과 지연이 반복학습 단절지속성 저하와 이탈로 이어짐

After — AlgoSu 자동화

로그인OAuth 1-클릭 로그인문제 선택주차별 자동 큐레이션코드 제출에디터에서 바로 제출AI 자동 분석Claude 기반 코드 리뷰 · SSE 스트리밍스터디 코드리뷰스터디원 간 실제 코드리뷰 페이지피드백 통합 제공AI + 스터디원 리뷰를 한곳에
System Design

CI/CD

7단계 15 jobs — 경로 필터, ARM64 크로스컴파일, Trivy 보안 스캔, GitOps 자동 배포

scroll
Secret Scangitleaks — 시크릿 유출 탐지Path Filterdorny/paths-filter — 모노레포 변경 감지Commit LintConventional Commits 규칙 검증ESLint+TS (×5)NestJS 5개 서비스 린트 + 타입 체크ruff (AI)FastAPI AI 서비스 Python 린트next lint+TSNext.js 프론트엔드 린트 + 타입 체크Jest (×5)NestJS 서비스별 단위/통합 테스트pytestAI 분석 파이프라인 테스트Jest (FE)React 컴포넌트 테스트Docker ARM64 (×6)QEMU 크로스컴파일 + GHA 캐시Next.js ARM64프론트엔드 ARM64 이미지 빌드Trivy Scan (×7)CRITICAL/HIGH 취약점 스캔 + SARIF 업로드ArgoCD DeployGitOps 자동 배포 — 이미지 태그 업데이트
Tech Decisions & Troubleshooting

기술적 의사결정

k3s vs EKS/GKE

OCI ARM 프리티어(4 OCPU, 24GB) 환경에서 프로덕션급 Kubernetes 필요. k3s는 50MB 바이너리, 512MB 메모리로 HPA·PDB·NetworkPolicy 완전 지원. EKS/GKE 대비 동일 기능에 비용 100% 절감.

FastAPI + NestJS

Claude SDK Python 우선 지원 + pydantic 응답 파싱으로 AI 서비스에 최적. AI Analysis만 FastAPI로 분리, 나머지 4개 서비스는 NestJS 10 통일로 DI·TypeORM 일관성 확보.

RabbitMQ vs Kafka

소규모 스터디 트래픽에 1:1 Task Queue 패턴 적합. 128Mi~512Mi 메모리로 ARM 프리티어 운영 가능. 내장 DLX→DLQ 자동 격리로 별도 실패 처리 구현 불필요.

Agent Orchestration

12개 AI Agent 페르소나를 Claude Code 슬래시 커맨드로 직접 구현. 프롬프트 엔지니어링만으로 역할 분담 가능, n8n·LangChain 등 외부 의존성 완전 제거.

Saga Pattern

코드 제출→GitHub Push→AI 분석 3단계 분산 트랜잭션의 원자성 보장 필요. 낙관적 락(WHERE sagaStep=EXPECTED) + 단계별 타임아웃(5/15/30분)으로 멱등성 확보. Outbox 패턴(Debezium CDC) 대비 ARM 리소스 제약 내 충분한 안정성.

스크롤하여 더 보기
100%
Troubleshooting
Lessons Learned

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에서 테스트 보강.

Code
Implementation

CI/CD Pipeline

.github/workflows/ci.yml

7단계 15 jobs — 모노레포 경로 필터 + ARM64 크로스컴파일 + Trivy 보안 스캔 + GitOps 배포

scroll
# 1) 모노레포 변경 감지
detect-changes:
  steps:
    - uses: dorny/paths-filter@v3
      with:
        filters: |
          gateway: ['services/gateway/**']
          submission: ['services/submission/**']

# 2) ARM64 크로스컴파일 + Immutable 태그
build-services:
  steps:
    - uses: docker/setup-qemu-action@v3
      with: { platforms: linux/arm64 }
    - uses: docker/build-push-action@v5
      with:
        platforms: linux/arm64
        tags: ghcr.io/tpals0409/algosu-${{ matrix.service }}:main-${{ github.sha }}
        cache-from: type=gha,scope=${{ matrix.service }}

# 3) Trivy 보안 스캔
trivy-scan:
  steps:
    - run: trivy image --severity CRITICAL,HIGH --exit-code 1
    - uses: github/codeql-action/upload-sarif@v3

# 4) GitOps 배포 (ArgoCD auto-sync)
deploy:
  if: needs.trivy-scan.result != 'failure'
  steps:
    - run: git commit -m "deploy(algosu): update image tags" && git push
Blog
Contact

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

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