8.0 KiB
자기소개 / 기술스킬
슬로건
상태 변화가 많은 도메인을 이벤트 흐름과
Clean Architecture로 설계하는 백엔드 개발자
한 줄 소개
ASP.NET Core와 Spring Boot 기반으로 tus 업로드 파이프라인, Opaque Session 인증, Transactional Outbox, Redis 비동기 작업 큐를 직접 설계·구현하며, 서비스의 정합성과 확장성을 함께 고려하는 백엔드 개발자를 지향합니다.
자기소개
Spring Boot와 .NET 기반으로 인증/인가, 비동기 작업 파이프라인, JS Interop 브릿지, Transactional Outbox 등 서비스 안정성과 직결되는 백엔드 기능을 Clean Architecture 위에서 설계하고 구현해왔습니다.
CloudSharp에서는 ASP.NET Core 10과 PostgreSQL 기반으로 Space 단위 RBAC 인가, tus 기반 대용량 업로드 finalize saga, Outbox 기반 SSE/Notification/Worker 3-target fan-out 구조를 설계하며 파일 시스템과 DB의 정합성을 CAS + 보상 + 자율 복구 워커 3단 구조로 보장하는 방법을 깊이 다뤘습니다. Didit에서는 Spring Boot와 Redis List + Pub/Sub을 조합해 ML 추론과 API 응답성을 분리하는 비동기 파이프라인을 구축하고, SSE clientKey 매핑으로 특정 사용자에게만 결과를 전달하는 무상태 구조를 구현했습니다. 술통여지도에서는 GPT-5.2 Structured Output 기반 2단계 Cascade Ranking과 Defensive Normalization으로 LLM hallucination을 구조적으로 방어하며 토큰 40%를 절감했고, TusBlazorClient에서는 tus-js-client를 C# API로 래핑한 NuGet 라이브러리를 직접 배포했습니다.
앞으로는 단순 기능 구현을 넘어 도메인 이벤트 흐름·동시성·관측 가능성·수평 확장성을 함께 고려하며, 인프라까지 이해하는 백엔드 개발자로 성장하고자 합니다.
Skills
Main Skills
| Category | Skill | Level | 활용 경험 |
|---|---|---|---|
| Backend | C# / ASP.NET Core | 3 | CloudSharp에서 Minimal API + Endpoint Filter 기반 3계층(Core/Infrastructure/Api) 구조 설계, Opaque Session Token 인증, UseCase 중심 비즈니스 흐름 구성, TusBlazorClient NuGet 라이브러리 배포 |
| Backend | Java / Spring Boot | 3 | Didit·술통여지도에서 30개+ REST 엔드포인트 설계, Spring Security 세션 인증, GitHub OAuth2, BackgroundService 기반 워커 구조 구현 |
| Architecture | Clean Architecture | 3 | Api / Core / Infrastructure 3계층 분리, 의존성 역전 구조 설계, Result<T> Monad 기반 에러 전파 파이프라인 구성 |
| Architecture | Domain Modeling | 3 | UploadSession·FileReservation 분리, Space 중심 멀티 테넌트 권한 모델, upload_sessions 7종 상태머신 + 조건부 UPDATE 기반 race 차단 설계 |
| Database | PostgreSQL / EF Core | 3 | CloudSharp 16개 테이블·15개 enum 모델링, partial unique index 7종으로 비즈니스 불변식 DB 강제, 조건부 ExecuteUpdate 기반 낙관적 claim, xmin row version 활용 |
| Database | MySQL / JPA·MyBatis | 3 | Didit에서 JPA + Flyway V1~V12 마이그레이션 + ddl-auto: validate 이중 정합성 보장, 술통여지도에서 MyBatis 기반 복잡 조인 쿼리 작성 |
| Upload / Storage | tus / tusd | 3 | tusd Hook 연동(pre-create / post-finish), finalize 중복 방지 CAS UPDATE, storage move + DB 트랜잭션 saga + 보상 처리, tus-js-client C# 래퍼 라이브러리 직접 구현 |
| Auth | OAuth2 / Session Token | 3 | GitHub OAuth2 인증 흐름 구축, Opaque Session Token + Redis 세션 저장소 + SHA-256 해싱 + sliding renewal, prefix 기반 토큰 분류(cs_st/cs_mcp/cs_dl/cs_sh)로 단일 헤더 라우팅 |
| Pattern | Transactional Outbox | 3 | 도메인 트랜잭션과 같은 DbContext에 outbox 기록, partial index 기반 낙관적 claim + 지수 백오프 재시도 + 라우팅 레지스트리로 SSE/Notification/Worker 3-target fan-out 구현 |
| Realtime / Async | SSE | 3 | Didit·CloudSharp에서 SseHub/SseEmitter 기반 실시간 이벤트 전달 구조 구현, clientKey 매핑으로 동일 사용자 다중 탭 구분 및 특정 사용자 타겟팅 |
| Cache / Async | Redis | 3 | List(작업 큐) + Pub/Sub(결과 전달) 조합으로 ML 비동기 파이프라인 구축, Opaque 토큰 세션 저장소(Hash) 및 Worker 채널로 활용, KeyDelete 한 번으로 logout-all 처리 |
| Infra | Docker / Docker Compose | 3 | CloudSharp 6-서비스 same-origin 스택 구성, init-storage one-shot 컨테이너로 동일 UID/GID(10001) bind mount 공유, healthcheck 기반 depends_on 체인, Multi-stage 빌드 최적화 |
Sub Skills
| Category | Skill | Level | 활용 경험 |
|---|---|---|---|
| AI Integration | OpenAI GPT API | 2 | 술통여지도에서 Structured Output 기반 2단계 Cascade Ranking 추천 엔진 구현, Defensive Normalization으로 hallucination 차단, pipe-delimited 포맷으로 토큰 40% 절감 |
| Infra | nginx | 2 | CloudSharp에서 단일 origin reverse proxy 구성, tus 헤더 포워딩(Tus-Resumable, Upload-Offset), /files/ streaming 버퍼링 해제 |
| CI/CD | GitLab CI / GHCR | 2 | test → build → push → Portainer webhook redeploy 파이프라인 구축, 변경 경로 기반 조건부 빌드, JUnit Report artifact 자동화 |
| Realtime | WebRTC (OpenVidu) | 1 | Didit에서 OpenVidu 2.32.1 기반 화상회의·녹화 기능 연동 |
| Search | Elasticsearch | 1 | 술통여지도에서 술집 전문 검색 인덱스 클라이언트 구성 |
| Frontend | Blazor WASM | 2 | TusBlazorClient 라이브러리에서 IJSRuntime JS Interop 브릿지 설계, [JSInvokable] + DotNetObjectReference 콜백 마샬링, DI 통합 |
| Frontend | Vue 3 | 1 | 술통여지도에서 Composition API + Pinia + Naver Maps 기반 지도 UI 구현 |
숙련도 기준
- Level 1: 사용 경험 있음 — 문서/예제 참고하여 기본 사용 가능
- Level 2: 기능 구현 가능 — 일반 요구사항 수준의 기능 구현 가능
- Level 3: 프로젝트 적용 가능 — 서비스 요구사항에 맞게 구조 설계 후 핵심 기능에 적용
- Level 4: 문제 해결 가능 — 성능·장애·구조 개선까지 가능
핵심 강점 요약
1. 두 가지 백엔드 스택을 Clean Architecture 위에서 설계
- Java/Spring Boot, C#/ASP.NET Core 모두 실무 수준으로 3계층 구조 적용
- Result<T> Monad 기반 에러 전파, UseCase 중심 비즈니스 흐름 구성
- 150여 개 ErrorCode 상수와 일관된 ErrorResponse 구조로 프론트엔드 분기 단순화
2. 서비스 안정성과 직결되는 백엔드 기능 구현
- tus 기반 대용량 업로드: tusd Hook 연동 + finalize saga + 보상 처리 + 5분 주기 Recovery Worker, NuGet 라이브러리 배포까지 양방향 구현
- 인증/인가: GitHub OAuth2, Opaque Session Token + Redis 세션, prefix 기반 단일 헤더 라우팅, Space Role 매 요청 재조회로 staleness 0
- 동시성 제어: 조건부 UPDATE 기반 CAS, partial unique index 7종,
xminrow version, Recovery Worker 기반 self-healing
3. 도메인 문제를 비동기 파이프라인으로 풀어낸 경험
- Transactional Outbox: 도메인 트랜잭션과 원자적 enqueue, partial index 기반 낙관적 claim, 지수 백오프 재시도, 3-target fan-out
- Redis List/Pub/Sub: ML 추론과 API 응답성 분리, Kafka/RabbitMQ 없이 운영 복잡도 절감
- GPT 2단계 Cascade Ranking: 200개 후보 → top10으로 압축, 토큰 70% 절감, Defensive Normalization으로 hallucination 차단
- Blazor JS Interop 브릿지:
[JSInvokable]+ DotNetObjectReference로 .NET ↔ JavaScript 콜백 마샬링 최적화
4. 인프라까지 고려한 백엔드 설계
- Docker Compose 6-서비스 same-origin 스택, init-storage one-shot으로 UID/GID 공유 bind mount
- nginx reverse proxy + tus 헤더 포워딩 + streaming 버퍼링 해제
- 자체 개발 벤치마크 도구로 Nextcloud 대비 업로드 2.6배·다운로드 3.86배 성능 측정
- GitLab CI + GHCR + Portainer webhook 기반 자동 빌드/배포 파이프라인