1. JSON & MessagePack 직렬화 지원
JSON : 기본 텍스트 기반 직렬화, 디버깅 및 개발 환경에 적합
MessagePack : 바이너리 직렬화, 프로덕션 환경에서 고성능 통신
Content-Type 자동 감지 : 요청 헤더에 따라 자동 선택
application/json → JSON 처리
application/x-msgpack → MessagePack 처리
2. Entity Framework Core 통합
Code-First 접근 : C# 모델 클래스 기반 데이터베이스 스키마 생성
MySQL 지원 : Pomelo.EntityFrameworkCore.MySql 프로바이더 사용
마이그레이션 : EF Core Migration 기능으로 스키마 버전 관리
비동기 처리 : 모든 DB 작업은 async/await 패턴 사용
3. DB Lock & Middleware 기반 동시성 제어
MySQL 분산 락 : GET_LOCK 및 RELEASE_LOCK 함수 사용
EF Core 통합 : DbContext를 통한 락 관리
사용자별 독립 락 : 동일 사용자의 동시 요청을 순차 처리하여 데이터 무결성 보장
자동 락 처리 : PacketLockMiddleware가 인증된 요청에 자동으로 락 적용
선택적 락 제외 : 헬스체크 등 특정 엔드포인트는 락 생략
에러 처리 : 락 획득 실패 시 409 Conflict 응답 반환
타임아웃 관리 : 기본 30초, 설정 가능한 타임아웃 및 자동 해제
멀티 싱크 : Console + File 동시 출력
구조화된 로그 : JSON 형식으로 파싱 가능한 로그 저장
로그 레벨 : Information, Warning, Error 등 단계별 필터링
파일 롤링 : 일별 로그 파일 자동 생성 (logs/log-yyyyMMdd.txt)
요청 추적 : HTTP 요청/응답 자동 로깅
HTTP 메트릭 : 요청 수, 응답 시간, 상태 코드별 통계
커스텀 메트릭 : 사용자 액션, 비즈니스 로직 측정
Grafana 연동 : /metrics 엔드포인트로 실시간 모니터링
타입 지원 : Counter, Gauge, Histogram, Summary
Cache-Aside 패턴 : 읽기 시 캐시 → DB 폴백, 쓰기 시 DB 저장 → 캐시 무효화
캐시 장애 내성 : 모든 캐시 예외를 CacheService에서 흡수, Redis 장애 시 DB로 자동 폴백
데이터 유형별 정책 : 단일 엔티티 TTL 300초(쓰기 시 즉시 삭제), 목록 TTL 30초(무효화 안 함)
트랜잭션 연동 : 캐시 무효화는 반드시 DB 트랜잭션 커밋 이후에 수행
헬스체크 : Redis 장애 시 Degraded로 보고 (서비스 전체를 Unhealthy로 만들지 않음)
Prometheus 메트릭 : 캐시 히트/미스 카운터, 작업별 소요 시간 히스토그램
7. Load → Process → Save 패턴
3단계 아키텍처 : 모든 API 엔드포인트가 Load(데이터 조회) → Process(인메모리 로직) → Save(DB 저장+캐시 무효화)를 따름
읽기/쓰기 Load 분리 : 읽기 전용은 캐시 경유(GetByIdAsync, AsNoTracking), 쓰기용은 DB 직접 조회(LoadAsync, ChangeTracker 추적)
Process 격리 : 비즈니스 로직은 인메모리 객체만 조작, DB/캐시에 접근하지 않음
Lock 통합 : 쓰기 작업에서 DbLockService가 Load → Process → Save 전체를 감쌈
서비스 캡슐화 : 엔드포인트는 UserService만 호출하며 캐시 존재를 알지 못함
높은 커버리지 : 79/84 테스트 통과 (94%)
Moq 프레임워크 : 의존성 모킹으로 격리된 테스트
FluentAssertions : 읽기 쉬운 assertion 문법
InMemory DB : 실제 DB 없이 빠른 테스트 실행
계층적 구조 : YAML의 들여쓰기로 설정 그룹화
환경별 분리 : appsettings.yaml + appsettings.Development.yaml
타입 안전성 : C# 클래스로 강타입 바인딩
핫 리로드 : 설정 변경 시 자동 반영 (일부 설정)
Method
Path
Description
Request
Response
POST
/api/user/create
사용자 생성
{ "username": "string", "email": "string" }
UserPacket
GET
/api/user/{userId}
사용자 조회
-
UserPacket
PUT
/api/user/update
사용자 정보 수정
UserPacket
UserPacket
DELETE
/api/user/{userId}
사용자 삭제
-
204 No Content
Method
Path
Description
Auth Required
POST
/test
MessagePack 테스트
❌
GET
/test/json
JSON 직렬화 테스트
❌
GET
/health
서버 상태 확인
❌
GET
/metrics
Prometheus 메트릭
❌
# 로그 파일 위치
liteapi/logs/log-20260101.txt
# 실시간 로그 모니터링
tail -f liteapi/logs/log-$( date +%Y%m%d) .txt
# prometheus.yml
scrape_configs :
- job_name : ' liteapi'
scrape_interval : 5s
static_configs :
- targets : ['localhost:5117']