MSA 기반 채용 관리 플랫폼 — 13개 마이크로서비스 + 6가지 핵심 아키텍처 패턴
채용 프로세스의 공고 등록부터 지원, 면접 일정 관리, AI 매칭까지 전 과정을 관리하는 플랫폼입니다. 단순 CRUD가 아닌 실무에서 마주치는 분산 시스템 문제를 직접 해결하는 데 초점을 맞췄습니다.
👉 https://corebridge.cloud/home
별도 설치 없이 위 링크에서 주요 기능을 바로 체험할 수 있습니다. MSA 13개 서비스를 단일 Spring Boot 앱으로 통합한 데모 버전입니다.
| 역할 | 이메일 | 비밀번호 |
|---|---|---|
| 구직자 | user@demo.com | qwer1234 |
| 기업 | company@demo.com | qwer1234 |
| 관리자 | admin@demo.com | qwer1234 |
데모 소스코드: CoreBridge-Demo
👉 https://corebridge.cloud/swagger/index.html
12개 마이크로서비스의 OpenAPI 3.1 명세를 확인할 수 있습니다. 드롭다운에서 서비스를 선택하면 해당 API 엔드포인트, 요청/응답 스키마를 조회할 수 있습니다.
총 96개 API 엔드포인트 (정적 문서 — Springdoc OpenAPI 기반 추출)
| 패턴 | 해결한 문제 | 기술 |
|---|---|---|
| Outbox Pattern | 서비스 간 데이터 일관성 (Dual Write 방지) | Outbox + Kafka (6 Topic, 5 Outbox Producer) |
| Circuit Breaker | 장애 전파 차단 (Cascading Failure) | Resilience4j (5개 독립 인스턴스) |
| CQRS + Batch | 읽기 성능 최적화 | ConcurrentHashMap 캐시 + Kafka 이벤트 동기화 |
| AI Pipeline | LLM 동기 32s 대기 → 스레드 풀 고갈 | FastAPI + Ollama + n8n 비동기 전환 (즉시 응답, 백그라운드 처리) |
| API Gateway | 13개 서비스 인증 중복 제거 + 트래픽 보호 | Spring Cloud Gateway + Cookie JWT 중앙 검증 + Redis Rate Limiter |
| K8s + CI/CD | 배포 자동화 | K3s + Jenkins + Rolling Update |
Backend: Java 21, Spring Boot 3.4, Spring Cloud Gateway, JPA/Hibernate, Resilience4j
Frontend: Vue.js 3, TypeScript, Pinia, Tailwind CSS, Vite
AI: Python, FastAPI, Ollama (llama3 + nomic-embed-text), Redis Vector Search, n8n
Infra: PostgreSQL 18, Apache Kafka, Redis Stack, Docker, K3s, Jenkins, Prometheus, Grafana
트래픽 대응: Redis (SADD 원자적 중복 체크 + Rate Limiter) + Kafka (쓰기 버퍼링)
| 대시보드 | 채용공고 목록 | 채용공고 상세 |
|---|---|---|
![]() |
![]() |
![]() |
| 이력서 + AI 분석 | 채용공고 지원 | 알림 |
|---|---|---|
![]() |
![]() |
![]() |
| 대시보드 | 지원자 관리 (리스트) | 지원자 관리 (칸반보드) |
|---|---|---|
![]() |
![]() |
![]() |
| AI 이력서 매칭 | 면접 일정 (리스트) | 면접 일정 (캘린더) |
|---|---|---|
![]() |
![]() |
![]() |
| 사용자 관리 | 사용자 통계 | 감사 로그 |
|---|---|---|
![]() |
![]() |
![]() |
Frontend (Vue.js :5173)
↓
API Gateway (:8000) ─── JWT 중앙 검증, 라우팅, Rate Limiter (Redis Token Bucket)
↓
┌─────────────────────────────────────────────────────────────┐
│ user :8001 사용자/인증/JWT 발급 │
│ jobposting :8002 채용공고 CRUD (Outbox 생산자) │
│ comment :8003 댓글 (Outbox 생산자) │
│ view :8004 조회수 (Outbox 생산자) │
│ like :8005 좋아요 (Outbox 생산자) │
│ hot :8006 인기 공고 집계 (Kafka 소비자) │
│ read :8007 CQRS 읽기 모델 (Kafka 소비자) │
│ resume :8008 이력서 관리 + AI 분석 연동 │
│ apply :8009 지원/채용프로세스/AI 매칭 │
│ (Redis 중복체크 + Kafka 비동기 쓰기 버퍼) │
│ notification :8010 알림 (SSE + Redis Pub/Sub) │
│ schedule :8011 면접 일정 관리 │
│ admin-audit :8012 관리자 감사 로그 │
└─────────────────────────────────────────────────────────────┘
↓ ↓
Kafka (6 Topics) AI Pipeline
Outbox → Consumer FastAPI :9001 + Ollama :11434 + n8n :5678
Apply → Consumer
채용 공고 마감 직전 수천~만 명의 동시 지원 트래픽을 안정적으로 처리합니다.
[유저 1만 명 동시 지원]
↓
Gateway Rate Limiter (초당 200건 초과 → 429 차단)
↓
Apply Service — Redis SADD (원자적 중복 체크, O(1))
↓
Kafka "corebridge-apply" 토픽에 발행 (DB 접근 없음)
↓
즉시 응답: "접수되었습니다" (50ms 이내)
======= 유저 대기 끝 =======
ApplyEventConsumer가 Kafka에서 메시지를 자기 속도로 소비
↓
DB INSERT (Apply + RecruitmentProcess)
↓
SSE 알림: "지원이 확정되었습니다"
- Docker & Docker Compose
- Java 21+ (백엔드 빌드용)
- Node.js 18+ (프론트엔드 빌드용)
# PostgreSQL, Redis, Kafka 실행 (init-db.sql → 12개 DB 자동 생성)
docker-compose up -d
# 볼륨 초기화 후 재시작하려면:
# docker-compose down -v && docker-compose up -dcd backend
./gradlew build -x test
# 각 서비스 개별 실행 (멀티 터미널 또는 IDE Run Configuration)
# 시작 시 DataInitializer가 시드 데이터를 자동 생성합니다
java -jar service/gateway/build/libs/*.jar
java -jar service/user/build/libs/*.jar # → admin, company, user1 계정 생성
java -jar service/jobposting/build/libs/*.jar # → 채용공고 5개 생성
java -jar service/resume/build/libs/*.jar # → 이력서 1개 생성
# ... (나머지 서비스)cd frontend
npm install
npm run dev
# → http://localhost:5173# Ollama 설치 후
ollama pull llama3
ollama pull nomic-embed-text
cd ai
docker-compose up -d # FastAPI + n8n| 역할 | 이메일 | 비밀번호 | 시드 데이터 |
|---|---|---|---|
| 관리자 | admin@test.com | qwer1234 | - |
| 기업 | company@test.com | qwer1234 | 채용공고 5개 |
| 지원자 | user@test.com | qwer1234 | 이력서 1개 |
모든 시드 데이터는 각 서비스의
DataInitializer가 앱 시작 시 자동 생성합니다.
init-db.sql은 PostgreSQL 최초 실행 시 12개 데이터베이스만 생성합니다.
CoreBridge-MSA/
├── backend/
│ ├── common/ # 공통 모듈 (Outbox, Event, Snowflake, Security)
│ ├── service/
│ │ ├── gateway/ # API Gateway (Spring Cloud Gateway + Rate Limiter)
│ │ ├── user/ # 사용자 + JWT 인증
│ │ ├── jobposting/ # 채용공고 (Outbox 생산자)
│ │ ├── jobposting-comment/ # 댓글 (Outbox 생산자)
│ │ ├── jobposting-view/ # 조회수 (Outbox 생산자)
│ │ ├── jobposting-like/ # 좋아요 (Outbox 생산자)
│ │ ├── jobposting-read/ # CQRS 읽기 모델 + Circuit Breaker
│ │ ├── jobposting-hot/ # 인기 공고 집계
│ │ ├── resume/ # 이력서 + AI 분석 연동
│ │ ├── apply/ # 지원/채용프로세스/AI 매칭 (Redis + Kafka 비동기)
│ │ ├── notification/ # 알림 (SSE)
│ │ ├── schedule/ # 면접 일정
│ │ └── admin-audit/ # 감사 로그
│ └── build.gradle
├── frontend/ # Vue.js 3 + TypeScript
├── ai/
│ └── fastapi/ # AI API (임베딩, 매칭, 스코어링)
├── deploy/
│ ├── k3s/ # Kubernetes 매니페스트
│ └── load-test/ # k6 부하 테스트 스크립트
├── docs/
│ ├── ARCHITECTURE.md # 아키텍처 문서
│ ├── API.md # API 명세
│ ├── ERD.md # ERD 설계
│ ├── design/ # 패턴별 설계 문서 (6개)
│ └── retrospective/ # 기술 회고 (4개)
├── scripts/
│ └── init-db.sql # DB 생성 (시드 데이터는 DataInitializer)
└── docker-compose.yml # 인프라 (PostgreSQL, Redis, Kafka)
| 문서 | 설명 |
|---|---|
| API Documentation | 12개 서비스 OpenAPI 명세 (Swagger UI) |
| ARCHITECTURE.md | 전체 아키텍처, 포트 매핑, Kafka 토픽, AI 파이프라인 |
| API.md | Gateway 기반 API 명세 (13개 서비스) |
| ERD.md | 데이터베이스 설계 (Outbox, CQRS 포함) |
| Outbox 설계문서 | 왜 Outbox을 선택하였을까? (CDC/Dual Write 비교) |
| Circuit Breaker 설계문서 | 왜 Resilience4j를 적용하였을까? (파라미터 튜닝 근거) |
| CQRS 설계문서 | 왜 ConcurrentHashMap인가? (Redis 대비) |
| AI Pipeline 설계문서 | 왜 n8n 비동기를 사용했는가? (Spring @Async 대비) |
| API Gateway 설계문서 | 왜 Cookie JWT인가? (XSS vs CSRF) |
| K8s/CI/CD 설계문서 | 왜 K3s + Rolling Update인가? |
cd backend
./gradlew testJava 257파일, 테스트 46개 파일 · 327개 메서드 (단위 + 통합)
- iMac M1 (2021) / 16GB RAM / macOS Sequoia 15.5
- IntelliJ IDEA / VS Code
- K3s on WSL2 (CI/CD 검증용)
MIT License

















