cf2be6b125e430648113854136912514a6caf777
- ARepository 전체 메서드 IDbConnection using 추가 (커넥션 풀 누수) - GameServer NotImplementedException → 로그 출력으로 변경 - ServerBase Auth/Echo payload 길이 검증 주석 해제 - PacketSerializer MemoryStream using 추가 (양쪽 솔루션) - PacketSerializer size 파라미터 제거, 자동 계산 + size 검증 구현 - ServerBase NetDataWriter cachedWriter 재사용 (GC 압력 감소) - ServerBase isListening volatile 추가 - ServerBase Deserialize 실패 시 null payload 체크 - ServerBase Serilog 구조적 로깅 템플릿 구문 수정 - TestHandler 전체 메서드 try-catch 추가 - TestRepository IDbConnectionFactory 인터페이스로 변경 - DummyClients BodyLength 계산 불일치 수정 - DummyClients pendingPings 메모리 누수 방지 - EchoClientTester async void 이벤트 → 동기 Cancel()로 변경 - ANALYSIS.md 코드 분석 및 문제점 보고서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DB 사용법
구조
MMOServer (실행 프로젝트 Test파일들은 임시용)
├── RDB/
├──── Handlers/
│ └──── TestHandler.cs
├──── Models/
│ └──── TestM.cs
├──── Repositories/
│ └──── TestRepository.cs
└──── Services/
└──── TestService.cs
ServerLib (DLL)
├── RDB/
├──── Database/
│ └── DbConnectionFactory.cs
├──── Handlers/
│ ├── HandlerHelper.cs
│ └── Response.cs
└──── Repositories/
└── ARepository.cs
데이터 흐름
호출부 (Packet 등)
↓ 파라미터 전달
Handler → Service 호출 + 응답 포맷팅 (string, HelperHander 사용)
↓
Service → 비즈니스 로직, 유효성 검사, 예외 throw
↓
Repository → DB 접근 (Class? / bool / long 반환)
↓
MySQL
반환 타입 정리
| 레이어 | 반환 타입 |
|---|---|
| Repository | class? / IEnumerable<class> / long / bool |
| Service | 동일 (그대로 올림) |
| Handler | string (JSON 포장) |
새 테이블 추가 시
MMOServer/RDB/Models/에 Model 추가MMOServer/RDB/Repositories/에 Repository 추가 (ARepository 상속)MMOServer/RDB/Services/에 Service 추가MMOServer/RDB/Handlers/에 Handler 추가
ServerLib (DLL) 은 건드릴 필요 없음.
Connection Pool 설정(MMOServer/config.json)
{
"Database": {
"Host": "localhost",
"Port": "0000",
"Name": "XXXX",
"User": "root",
"Password": "11212121",
"Pooling": {
"MinimumPoolSize": "5",
"MaximumPoolSize": "100",
"ConnectionTimeout": "30",
"ConnectionIdleTimeout": "180"
}
}
}
Description
Languages
C#
99.6%
Dockerfile
0.4%