vault backup: 2026-06-01 16:40:05

This commit is contained in:
son
2026-06-01 16:40:05 +09:00
parent 9315198179
commit 6524cd5d34
12 changed files with 2599 additions and 5700 deletions

View File

@@ -1,60 +1,96 @@
# 자기소개 / 기술스킬
## 슬로건
```
API 설계부터 Clean Architecture 까지, 서비스 흐름을 구조적으로 설계하는 백엔드 개발자
상태 변화가 많은 도메인을 이벤트 흐름과
Clean Architecture로 설계하는 백엔드 개발자
```
---
## 현재의 나 & 지향하는 바
## 한 줄 소개
Spring Boot와 .NET 기반으로 인증/인가, 비동기 작업 파이프라인, JS Interop 브릿지 등
서비스 안정성과 직결되는 백엔드 기능을 Clean Architecture 위에서 설계하고 구현해왔습니다.
대용량 파일 업로드 라이브러리 개발부터 Redis 기반 AI 비동기 파이프라인 구축,
GPT 추천 엔진 설계까지 도메인 문제를 API와 내부 구조로 풀어내는 경험을 쌓았으며,
인프라까지 이해하는 백엔드 개발자로 성장하고자 합니다.
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 | ★★★★☆ | Minimal API 기반 REST API 설계, Opaque Session Token 인증, UseCase 중심 구조, NuGet 라이브러리 배포 경험 |
| Backend | Java, Spring Boot | ★★★★☆ | 3계층 Clean Architecture 기반 API 설계, Spring Security + GitHub OAuth2, SSE 실시간 이벤트 시스템 구현 |
| Architecture | Clean Architecture | ★★★★☆ | Api / Core / Infrastructure 계층 분리, 의존성 역전 구조 설계, Result\<T\> Monad 기반 에러 전파 파이프라인 구성 |
| Architecture | Domain Modeling | ★★★★☆ | UploadSession·FileReservation 분리, Space 중심 멀티 테넌트 권한 모델, 상태 머신 기반 도메인 설계 경험 |
| Database | PostgreSQL, EF Core | ★★★☆☆ | 12개 엔티티 ERD 설계, Migration 자동화, FOR UPDATE row-level lock 기반 동시성 제어, CAS 패턴 SQL 구현 |
| Database | MySQL, MyBatis / JPA | ★★★☆☆ | 16개 테이블 모델링, Flyway 마이그레이션 관리, 복잡 조인 쿼리 작성 |
| Upload / Storage | tus, tusd | ★★★★☆ | tusd Hook 연동(pre-create / post-finish), Finalize 중복 방지 CAS Lock, Storage Sharding 65,536 버킷 설계, tus-js-client 래퍼 라이브러리 직접 구현 |
| Auth | OAuth2 / Session Token | ★★★★☆ | GitHub OAuth2 인증 흐름 구축, Opaque Session Token + Redis 세션 저장소 + HMAC 해싱 + sliding renewal 정책 구현 |
| Infra | Docker, Docker Compose | ★★★★☆ | 5-서비스 오케스트레이션, internal 네트워크 격리, Healthcheck 기반 depends_on, Multi-stage 빌드 이미지 최적화 |
| Infra | nginx Reverse Proxy | ★★★☆☆ | tus 헤더 포워딩(Tus-Resumable, Upload-Offset), 스트리밍 버퍼링 해제, 단일 진입점 라우팅 구성 |
| Cache / Async | Redis | ★★★☆☆ | 세션 저장소(Hash), Pub/Sub 기반 비동기 작업 결과 전달, AI 작업 큐(List) 구현 |
| AI Integration | OpenAI GPT API | ★★★☆☆ | Structured Output 기반 추천 엔진, 2단계 Cascade Ranking, Defensive Normalization으로 Hallucination 방어, Pipe-delimited Format으로 토큰 40% 절감 |
| CI/CD | GitLab CI, GHCR | ★★★☆☆ | PR 단위 테스트 자동화, 변경 경로 기반 조건부 빌드, Docker 이미지 자동 푸시 파이프라인 구성 |
| Frontend | Blazor WASM, Vue 3 | ★★☆☆☆ | Blazor JS Interop 브릿지 설계, Vue 3 Composition API + Pinia 기반 지도 UI 구현 |
| 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 중심 비즈니스 흐름 구성
### 1. 두 가지 백엔드 스택을 Clean Architecture 위에서 설계
2. 서비스 안정성과 직결되는 백엔드 기능 구현
- tus 기반 대용량 업로드: 클라이언트 라이브러리(NuGet 배포) + 서버 파이프라인 양방향
- 인증/인가: GitHub OAuth2, Opaque Session Token + Redis 세션, Space Role 기반 인가
- 동시성 제어: CAS UPDATE, FOR UPDATE row-lock, Recovery Worker 기반 자동 복구
- Java/Spring Boot, C#/ASP.NET Core 모두 실무 수준으로 3계층 구조 적용
- Result\<T\> Monad 기반 에러 전파, UseCase 중심 비즈니스 흐름
- 150여 개 ErrorCode 상수와 일관된 ErrorResponse 구조로 프론트엔드 분기 단순화
3. 도메인 문제를 비동기 파이프라인으로 풀어낸 경험
- Redis List/Pub/Sub 기반 AI 작업 큐로 ML 추론과 API 응답성 분리
- GPT 2단계 Cascade Ranking으로 토큰 70% 절감, Defensive Normalization으로 Hallucination 차단
- Blazor JS Interop 브릿지로 .NET ↔ JavaScript 콜백 마샬링 최적화
### 2. 서비스 안정성과 직결되는 백엔드 기능 구현
4. 인프라까지 고려한 백엔드 설계
- Docker Compose 멀티 서비스 오케스트레이션, internal 네트워크 격리
- nginx Reverse Proxy + tus 헤더 포워딩, GitLab CI 자동 빌드/배포 파이프라인
- **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 기반 자동 빌드/배포 파이프라인