Skip to content

Commit 6ab1e84

Browse files
committed
docs: readme 문서 작성
1 parent da6c585 commit 6ab1e84

File tree

1 file changed

+162
-228
lines changed

1 file changed

+162
-228
lines changed

README.md

Lines changed: 162 additions & 228 deletions
Original file line numberDiff line numberDiff line change
@@ -1,234 +1,168 @@
11
# ProjectVG API Server
22

3-
JWT + OAuth2 + WebSocket 인증 시스템을 포함한 ASP.NET Core API 서버입니다.
4-
5-
## 🚀 빠른 시작
6-
7-
### 1. 전체 개발 환경 설정 (최초 1회)
8-
```powershell
9-
# DB와 Redis를 포함한 전체 환경 설정
10-
.\scripts\dev-setup.ps1
11-
```
12-
13-
### 2. API만 빠르게 재빌드 (개발 중)
14-
```powershell
15-
# API 코드 변경 후 빠른 재빌드
16-
.\scripts\start-api.ps1
17-
```
18-
19-
### 3. 서비스 중지
20-
```powershell
21-
# 모든 서비스 중지
22-
.\scripts\stop-all.ps1
23-
```
3+
**Clean Architecture 기반 AI 채팅 플랫폼 백엔드 시스템**
4+
5+
.NET 8.0 ASP.NET Core API 서버로, JWT/OAuth2 인증, WebSocket 실시간 통신, Redis 세션 관리를 구현한 AI 채팅 플랫폼입니다.
6+
7+
## 🏗️ 시스템 아키텍처
8+
9+
### Clean Architecture 구현
10+
```
11+
┌─────────────────── Presentation Layer ──────────────────┐
12+
│ ProjectVG.Api (Controllers, Middleware, Authentication) │
13+
├─────────────────── Application Layer ───────────────────┤
14+
│ ProjectVG.Application (Services, DTOs, Business Logic) │
15+
├─────────────────── Domain Layer ────────────────────────┤
16+
│ ProjectVG.Domain (Entities, Repositories, Domain Rules) │
17+
├─────────────────── Infrastructure Layer ────────────────┤
18+
│ ProjectVG.Infrastructure (Database, External Services) │
19+
└─────────────────── Common/Tests ────────────────────────┘
20+
```
21+
22+
### 기술 스택
23+
- **.NET 8.0**: C# 12, nullable reference types
24+
- **ASP.NET Core 8.0**: Controllers 기반 REST API
25+
- **Entity Framework Core 8.0**: Code-First, SQL Server
26+
- **Redis**: StackExchange.Redis 세션 관리
27+
- **Authentication**: JWT + Google OAuth2 PKCE
28+
- **Testing**: xUnit + Moq + FluentAssertions
29+
- **Container**: Docker + Docker Compose
30+
31+
## 📋 핵심 기능
32+
33+
### 인증 시스템
34+
- **JWT 토큰**: Access (15분) + Refresh (30일) 이중 토큰
35+
- **OAuth2 PKCE**: Google 인증, 게스트 로그인
36+
- **Redis 세션**: 분산 환경 토큰 관리, blacklist 지원
37+
- **다중 헤더**: Authorization, X-Access-Credit, X-Refresh-Credit
38+
39+
### AI 캐릭터 관리
40+
- **하이브리드 설정**: JSON 필드 구성 + 직접 프롬프트 입력
41+
- **소유권 모델**: 시스템/공개/개인 캐릭터 권한 관리
42+
- **실시간 프롬프트 생성**: 설정 기반 SystemPrompt 동적 구성
43+
44+
### 채팅 시스템
45+
- **이중 프로토콜**: WebSocket + HTTP REST API
46+
- **메시지 관리**: User/Assistant/System 역할 기반 대화
47+
- **외부 서비스 통합**: LLM, Memory, TTS 서비스 연동
48+
- **페이지네이션**: 대화 기록 효율적 조회
49+
50+
### 크레딧 시스템
51+
- **금융급 정밀도**: Decimal(18,2) 정확한 잔액 관리
52+
- **불변 거래 기록**: 완전한 audit trail
53+
- **동시성 제어**: Optimistic concurrency 일관성 보장
54+
55+
## 🔧 기술 구현
56+
57+
### 성능 최적화
58+
- **메모리 관리**: IMemoryOwner<byte> LOH 회피, ArrayPool 버퍼 재사용
59+
- **비동기 패턴**: 모든 I/O 작업 async/await
60+
- **데이터베이스**: 연결 복원력 (지수 백오프 5회 재시도), 자동 마이그레이션
61+
- **ConfigureAwait 제거**: ASP.NET Core 환경 최적화로 가독성 향상
62+
63+
### 보안 구현
64+
- **JWT 보안**: 32자 이상 암호키, 다중 소스 헤더 지원
65+
- **OAuth2 PKCE**: Proof Key for Code Exchange, CSRF 방지
66+
- **입력 검증**: Data Annotations + 도메인 레벨 검증
67+
- **SQL Injection 방지**: EF Core 매개변수화 쿼리
68+
69+
### 테스트 전략
70+
- **100% 인증 커버리지**: JWT Provider (12), Token Service (15), Auth Service (15), JWT Filter (10) 테스트
71+
- **다층 테스트**: Unit Tests (Mock), Integration Tests (실제 DB), End-to-End Tests (API)
72+
- **성능 검증**: Base64 인코딩 13.5% 성능 향상 측정
73+
74+
## 🗄️ 데이터 모델
75+
76+
### Core Entities
77+
- **User**: OAuth2 기반 사용자, 16자 고유 UID, 크레딧 잔액
78+
- **Character**: 하이브리드 구성 (JSON/Direct), 공개/개인 구분
79+
- **ConversationHistory**: 역할별 메시지, 10,000자 제한
80+
- **CreditTransaction**: 불변 거래 기록, 소스 추적
81+
82+
### 데이터베이스 설계
83+
- **Optimistic Concurrency**: RowVersion 타임스탬프
84+
- **JSON 컬럼**: 유연한 캐릭터 설정 저장
85+
- **정밀 Decimal**: 금융 거래 정확성
86+
- **인덱스 전략**: 사용자별, 캐릭터별 효율적 조회
87+
88+
## 🌐 API 엔드포인트
89+
90+
### 인증 (`/api/v1/auth`, `/auth`)
91+
- `POST /api/v1/auth/refresh` - Access Token 갱신
92+
- `POST /api/v1/auth/logout` - 세션 종료
93+
- `POST /api/v1/auth/guest-login` - 게스트 인증
94+
- `GET /auth/oauth2/authorize/{provider}` - OAuth2 시작
95+
96+
### 캐릭터 (`/api/v1/character`)
97+
- `GET /api/v1/character` - 전체 캐릭터 조회
98+
- `POST /api/v1/character/individual` - JSON 설정 캐릭터 생성
99+
- `POST /api/v1/character/systemprompt` - 직접 프롬프트 캐릭터 생성
100+
- `GET /api/v1/character/my` - 내 캐릭터 관리
101+
102+
### 채팅 및 크레딧
103+
- `POST /api/v1/chat` - 채팅 메시지 처리 (JWT 필수)
104+
- `GET /api/v1/credits/balance` - 크레딧 잔액
105+
- `GET /api/v1/credits/history` - 거래 내역 (페이지네이션)
24106

25107
## 📁 프로젝트 구조
26108

27109
```
28-
ProjectVG Server/
29-
├── ProjectVG.Api/ # API 레이어
30-
├── ProjectVG.Application/ # 애플리케이션 레이어
31-
├── ProjectVG.Domain/ # 도메인 레이어
32-
├── ProjectVG.Infrastructure/# 인프라 레이어
33-
├── ProjectVG.Common/ # 공통 라이브러리
34-
├── ProjectVG.Tests/ # 테스트 프로젝트
35-
├── scripts/ # Docker 스크립트
36-
├── test-clients/ # 테스트 클라이언트
37-
└── docker-compose.yml # API 서비스 설정
38-
```
39-
40-
## 🔧 Docker 최적화 설정
41-
42-
### 분리된 서비스 구조
43-
- **API 서비스**: `docker-compose.yml` (빠른 재빌드)
44-
- **DB & Redis**: `docker-compose.db.yml` (별도 관리)
45-
46-
### 빌드 최적화
47-
- 멀티스테이지 빌드
48-
- 레이어 캐시 활용
49-
- .dockerignore로 불필요한 파일 제외
50-
- NuGet 복원 캐시
51-
52-
### 네트워크 구성
53-
- API: `projectvg-network`
54-
- DB/Redis: `projectvg-external-db` (외부 네트워크)
55-
- localhost 연결로 통신
56-
57-
## 🛠️ 개발 워크플로우
58-
59-
### 초기 설정 (1회만)
60-
```powershell
61-
# 전체 개발 환경 설정 (DB + Redis + API)
62-
.\scripts\dev-setup.ps1
63-
```
64-
65-
### 개발 중 (매일)
66-
```powershell
67-
# 코드 변경 후 API만 재빌드 (빠름!)
68-
.\scripts\start-api.ps1
69-
```
70-
71-
### 개별 서비스 관리
72-
```powershell
73-
# DB와 Redis만 시작
74-
.\scripts\start-db.ps1
75-
76-
# API만 시작
77-
.\scripts\start-api.ps1
78-
79-
# 모든 서비스 중지 및 정리
80-
.\scripts\stop-all.ps1
81-
```
82-
83-
### 테스트 실행
84-
```powershell
85-
# JWT 인증 시스템 테스트
86-
dotnet test ProjectVG.Tests/ProjectVG.Tests.csproj
87-
```
88-
89-
## 🌐 서비스 연결 정보
90-
91-
| 서비스 | URL | 포트 | 설명 |
92-
|--------|-----|------|------|
93-
| API | http://localhost:7910 | 7910 | 메인 API 서버 |
94-
| SQL Server | localhost | 1433 | 데이터베이스 |
95-
| Redis | localhost | 6380 | 캐시/세션 저장소 |
96-
97-
### 데이터베이스 접속 정보
98-
- **Server**: localhost:1433
99-
- **Database**: ProjectVG
100-
- **Username**: sa
101-
- **Password**: ProjectVG123!
102-
103-
## 🔐 JWT 인증 시스템
104-
105-
### 주요 기능
106-
- ✅ JWT Access/Refresh 토큰
107-
- ✅ OAuth2 로그인 (Google)
108-
- ✅ 토큰 자동 갱신
109-
- ✅ Redis 기반 세션 관리
110-
- ✅ WebSocket 인증 준비
111-
112-
### API 엔드포인트
113-
- `POST /api/auth/test-login` - 테스트 로그인
114-
- `POST /api/auth/refresh` - 토큰 갱신
115-
- `POST /api/auth/logout` - 로그아웃
116-
- `GET /api/test/me` - 사용자 정보 (인증 필요)
117-
118-
## 🚀 배포
119-
120-
### 자동 배포 (CI/CD)
121-
`release` 브랜치에 푸시하면 자동 배포됩니다.
122-
123-
### 수동 배포
124-
```bash
125-
# 프로덕션 배포
126-
./deploy.sh
127-
128-
# 개발 환경 배포
129-
./deploy-dev.sh
130-
131-
# Windows 환경
132-
.\scripts\deploy.ps1 -Environment dev
133-
.\scripts\deploy.ps1 -Environment prod
134-
```
135-
136-
상세한 배포 가이드는 [DEPLOYMENT.md](DEPLOYMENT.md)를 참조하세요.
137-
138-
## 🧪 테스트
139-
140-
### 테스트 실행
141-
```powershell
142-
# 전체 테스트
143-
dotnet test ProjectVG.Tests/ProjectVG.Tests.csproj
144-
145-
# 특정 테스트 클래스
146-
dotnet test --filter "FullyQualifiedName~JwtProviderTests"
147-
```
148-
149-
### 테스트 커버리지
150-
- **JWT Provider**: 100% (12개 테스트)
151-
- **Token Service**: 100% (15개 테스트)
152-
- **Auth Service**: 100% (15개 테스트)
153-
- **JWT Filter**: 100% (10개 테스트)
154-
155-
### OAuth2 테스트 클라이언트
156-
157-
#### 자동 실행 스크립트
158-
```powershell
159-
# PowerShell 스크립트 (권장)
160-
.\scripts\start-oauth2-client.ps1
161-
162-
# 배치 파일
163-
.\scripts\start-oauth2-client.bat
164-
```
165-
166-
#### 수동 실행
167-
```powershell
168-
# 테스트 클라이언트 디렉토리로 이동
169-
cd test-clients
170-
171-
# Python 서버 실행
172-
python start-oauth2-client.py
173-
```
174-
175-
#### 브라우저 접속
176-
```
177-
http://localhost:3000
178-
```
179-
180-
#### OAuth2 테스트 기능
181-
- ✅ PKCE (Proof Key for Code Exchange) 생성
182-
- ✅ OAuth2 Authorization Code Flow 테스트
183-
- ✅ Google OAuth2 연동
184-
- ✅ JWT 토큰 발급 확인
185-
- ✅ 사용자 정보 표시
186-
- ✅ 클립보드 복사 기능
187-
188-
## 📝 환경 변수
189-
190-
### 환경 변수 설정
191-
1. `env.example` 파일을 `.env`로 복사
192-
2. 필요한 값들을 수정
193-
194-
### 주요 환경 변수
195-
```bash
196-
# 외부 서비스 연결
197-
LLM_BASE_URL=http://localhost:5601
198-
MEMORY_BASE_URL=http://localhost:5602
199-
TTS_API_KEY=your-tts-api-key
200-
201-
# 데이터베이스 연결
202-
DB_CONNECTION_STRING=Server=localhost,1433;Database=ProjectVG;User Id=sa;Password=ProjectVG123!;TrustServerCertificate=true;MultipleActiveResultSets=true
203-
204-
# Redis 연결
205-
REDIS_CONNECTION_STRING=localhost:6380
206-
207-
# JWT 설정
208-
JWT_SECRET_KEY=your-super-secret-jwt-key-here-minimum-32-characters
209-
JWT_ACCESS_TOKEN_LIFETIME_MINUTES=15
210-
JWT_REFRESH_TOKEN_LIFETIME_DAYS=30
211-
212-
# OAuth2 설정 (선택사항)
213-
GOOGLE_OAUTH_CLIENT_ID=your-google-client-id
214-
GOOGLE_OAUTH_CLIENT_SECRET=your-google-client-secret
215-
```
216-
217-
## 🐛 문제 해결
218-
219-
### 빌드 시간 단축 팁
220-
1. **DB/Redis 분리**: 한 번 시작하면 재시작 불필요
221-
2. **캐시 활용**: Docker 레이어 캐시 사용
222-
3. **선택적 빌드**: API만 재빌드
223-
224-
### 일반적인 문제
225-
- **포트 충돌**: 다른 서비스가 7910, 1433, 6380 포트 사용 중
226-
- **DB 연결 실패**: DB 초기화 대기 시간 필요 (30초)
227-
- **Redis 연결 실패**: Redis 컨테이너 상태 확인
228-
229-
## 📚 추가 문서
230-
231-
- [API 참조](docs/api_reference.md)
232-
- [아키텍처 가이드](docs/architecture/)
233-
- [개발 가이드](docs/development/)
234-
- [코딩 컨벤션](docs/coding_conventions.md)
110+
ProjectVG.Api/ # Presentation Layer
111+
├── Controllers/ # REST API 컨트롤러
112+
├── Middleware/ # 전역 예외 처리, WebSocket
113+
├── Filters/ # JWT 인증 필터
114+
└── Models/ # Request/Response DTO
115+
116+
ProjectVG.Application/ # Application Layer
117+
├── Services/ # 비즈니스 로직 서비스
118+
├── Models/ # 애플리케이션 DTO
119+
└── Commands/ # 명령 객체
120+
121+
ProjectVG.Domain/ # Domain Layer
122+
├── Entities/ # 도메인 엔티티
123+
├── Repositories/ # 리포지토리 인터페이스
124+
└── Common/ # 기본 엔티티, 값 객체
125+
126+
ProjectVG.Infrastructure/ # Infrastructure Layer
127+
├── Persistence/ # EF Core DbContext
128+
├── Auth/ # JWT, OAuth2 구현
129+
├── Integrations/ # 외부 서비스 클라이언트
130+
└── Services/ # 인프라 서비스
131+
132+
ProjectVG.Tests/ # Test Suite
133+
├── Api/ # 컨트롤러, 필터 테스트
134+
├── Application/ # 서비스 통합 테스트
135+
├── Auth/ # 인증 시스템 테스트
136+
└── Infrastructure/ # 리포지토리, 외부 서비스 테스트
137+
```
138+
139+
## 🔄 외부 서비스 연동
140+
141+
### 연동 서비스
142+
- **LLM Service**: AI 모델 추론 처리
143+
- **Memory Service**: 대화 컨텍스트 관리
144+
- **TTS Service**: 텍스트 음성 변환
145+
146+
### 데이터 저장소
147+
- **SQL Server**: 주 데이터베이스 (사용자, 캐릭터, 대화)
148+
- **Redis**: 세션 관리, 토큰 캐시
149+
150+
## 💡 아키텍처 설계 원칙
151+
152+
### Clean Architecture 적용
153+
- **의존성 역전**: Domain ← Application ← Infrastructure
154+
- **관심사 분리**: 각 레이어별 명확한 책임
155+
- **테스트 가능성**: Mock 기반 단위 테스트
156+
- **기술 독립성**: 프레임워크에 종속되지 않는 비즈니스 로직
157+
158+
### 도메인 중심 설계
159+
- **Rich Domain Model**: 엔티티에 비즈니스 로직 캡슐화
160+
- **Repository Pattern**: 데이터 접근 추상화
161+
- **Value Objects**: 불변 도메인 개념
162+
- **Aggregate Root**: 일관성 경계 정의
163+
164+
### 성능 고려사항
165+
- **비동기 처리**: I/O 바운드 작업 최적화
166+
- **메모리 효율성**: 대용량 데이터 스트리밍 처리
167+
- **연결 풀링**: 데이터베이스 연결 최적화
168+
- **캐싱 전략**: Redis 기반 세션/데이터 캐시

0 commit comments

Comments
 (0)