# 자기소개 / 기술스킬 ## 슬로건 ``` 상태 변화가 많은 도메인을 이벤트 흐름과 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\ 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\ 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종, `xmin` row 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 기반 자동 빌드/배포 파이프라인