dotnetcore 11

Dapper에서 Date 형태 사용 (DateOnly Type Parser)- 게임 웹서버 만들기 14

일일 기능을 만들다보면 Date형태가 필요합니다.DateTime 타입을 사용하면 시간,분,초 등의 정보도 함께 들어가니 버그가 생길 수 있어DateOnly 타입을 사용하게 됩니다. 그러나 Dapper에서는 기본적으로 DateOnly 타입을 지원하지 않기 때문에 파라미터 바인딩 시 런타임 에러가 발생합니다. 이를 해결하기 위해 TypeHandler기능을 사용하여 DateOnly 타입을 자동으로 DateTime으로 변환하는 Handler를 추가하였습니다. DB에서는 date 컬럼을 DateTime으로 읽어오고,C#에서는 DateOnly로 변환하여 사용합니다.1. Handler 생성public class DateOnlyTypeHandler : SqlMapper.TypeHandler{ public ove..

카테고리 없음 2026.01.14

일일 미션(데일리미션) - 게임 웹서버 만들기 13

데일리 미션을 만들어보겠습니다. 데일리 미션의 전체 흐름은 다음과 같습니다. 1. 기획자가 데일리 미션을 작성합니다. 2. 기획자가 작성한 미션을 서버에 등록합니다.(운영툴 관련 기능이므로 이번 글에서는 다루지 않습니다.) 3. 유저는 자신의 미션 상태를 확인하거나, 미션 성공에 대한 결과를 서버에 요청합니다. 4. 서버는 기획자가 정의한 미션 조건과 유저의 실제 진행 정보를 비교하여 미션 달성 여부를 판단한 뒤 그 결과를 응답합니다. [미션 작성]1. 데일리 미션 정보 작성우선 데일리 미션에 대한 기본 정보를 정의합니다.- mission_type : 미션 종류를 구분하기 위한 타입값 (1 : 아이템 n개 획득 / 2 : 몬스터 n마리 처리 / 3 : 로그인 횟수 )- success_value ..

유저 재화 - 게임 웹서버 만들기 12

전체 프로젝트에서 공통으로 사용되는 유저의 게임내 재화(Resource) 관리 서비스를 만들겠습니다. Table UserResource { uId bigint [pk] resource_id int [pk] amount int created_time datetime update_time datetime Indexes { (resource_id) }}Table UserResourceHistory { history_id bigint [PK, increment] uId bigint resource_id int [ref:> UserResource.resource_id] change_amount int before_amount int after_amount int reason_code..

dotNet Core에서 Serilog 사용하기, 로그 파일 생성 - 게임 웹서버 만들기 11

서버를 운영할때에는 로그가 굉장히 중요해진다. 버그가 발생했을 때나 CS요청이 들어왔을 때,에러로그와 API 요청 로그를 통해 당시의 상황을 추적하고 원인을 파악할 수 있다. 이번 게시글에서는서버에서 로그 파일을 생성하고 관리해보려고 한다. [Response Pipeline 생성]기존에 구현되어 있던 암호화/복호화 기능과새롭게 추가될 로그 파일 기능에서는 모두 Response값을 캡처해서 사용해야 합니다. 또한 추후에 모니터링과 같은 기능이 추가되는 경우도 Response 값을 활용해야 할 수 있습니다. 하지만 두 개 이상의 기능에서 각각 Response값을 캡처하려고 하면,응답 스트림이 한 번만 읽힐 수 있다는 특성 때문에한쪽에서는 빈 값을 바라보는 문제가 발생할 수 있습니다. 이러한 문제를 방지하기 ..

유저 프로필 - 게임 웹서버 만들기 10

게임 내 유저 프로필 API를 설계해보겠습니다. 다음과 같은 프로필 항목을 가정하고 API를 설개합니다① 프로필 캐릭터 액자 : 프로필 캐릭터를 감싸는 외적 요소② 프로필 캐릭터③ 닉네임④ 유저의 uId⑤ 자기소개글⑥ 뱃지/트로피/랭킹 등 : 향후 기획 변경 및 추가를 고려하여 확장 가능한 구조를 전제로 설계 [DB 설계] [Mysql 트랜젝션 추가]유저가 최초 생성될 때는 User 테이블과 UserProfile 테이블이 함께 생성되어야 합니다.두 테이블은 하나의 작업 단위이므로중간에 에러가 발생할 경우 전체 작업이 롤백되어야 합니다. 이를 위해 MySql 트랜잭션을 적용하여 두 작업을 하나의 작업으로 처리하도록 하겠습니다. 제공 기능 : BeginTransactionCommitRollback..

구글 Windows 로그인 - 게임 웹서버 만들기 9

구글 공식 문서에서는 로그인을 구현할 때 기존 방식이 아닌 새로 개편된 OAuth 방식을 사용하는 것을 권장하고 있습니다. OAuth 방식을 사용할 경우,Android 앱과 Windows 프로그램의 로그인 흐름이 서로 다르기 때문에플랫폼에 맞게 별도의 구현이 필요합니다. 이번 게시글에서는 Windows 프로그램 환경에서의 Google 로그인 구현 방법을 다뤄보려고 합니다. 실제로 명조, 니케와 같은 게임에서도 이와 유사한 브라우저 기반 로그인 방식을 사용하고 있는 것으로 보입니다. [시퀀스 다이어그램]본 구현에서는 브라우저 기반 Google 로그인 + polling 구조를 사용했습니다. [구글 클라우드 콘솔에서 Client 정보 생성] 1. 구글 클라우드 콘솔 접속https://console..

Redis연결, 세션키 생성 - 게임 웹서버 만들기 8

Redis DB 연결과게임 로그인 검증을 위한 세션키 생성, 검증을 구현해보겠습니다. [Redis 설치] Nuget 패키지 관리를 이용하여 StackExchange.Redis 라이브러리를 설치합니다. [Redis 연결/세팅]1. 의존성 주입으로 Redis 등록Program.cs 에 Redis를 사용할 수 있도록 확장메서드 AddRedis를 추가해줍니다.builder.Services.AddRedis(builder.Configuration); 이렇게 하면 Redis가 DI 컨테이너에 등록되어 다른 Service에서 자유롭게 Redis를 사용할 수 있습니다. 2. Redis Env 설정REDIS_HOST=[레디스 호스트명]REDIS_PORT=6379REDIS_PASSWORD=[설정비밀번호].env 파..

게스트 로그인, Dapper, IDGen, 서비스팩토리 - 게임 웹서버 만들기 6

이후 구글로그인, 애플로그인 등으로 확장을 전제로 한 게스트 로그인을 만들어보겠습니다. [ERD 작성] https://dbdiagram.io/d dbdiagram.io - Database Relationship Diagrams Design Tool dbdiagram.io로그인 구현을 위해 사용자 기본 테이블을 먼저 정의합니다.dbdiagram.io에 가시면 무료로 편리하게 작성할 수 있습니다. [Users 테이블 정의]Table users { uid bigint [primary key] platformCode int platformUserId varchar status int createdTime timestamp updateTime timestamp indexes { (platfor..

패킷 파라미터 유효성 검증 추가 - 게임 웹서버 만들기 4

게임 웹서버의 첫 기능을 만들기에 앞서,각 API별로 패킷 파라미터 검증 로직을 먼저 구현할 필요가 있습니다. 클라이언트에서 API에 도달한 요청 패킷의 파라미터를 확인하여,각각의 값이 유효한지 검사한 뒤,유효하지 않은 경우에 미리 정의해 둔 API Response의 Error 포맷으로 응답을 반환할 예정입니다. [테스트용 로그인 클래스 생성]API 확인용으로 임시 Login Controller와 Login Request 클래스를 생성했습니다.● 요청방식 : POST● BODY : LoginRequest 객체 ※ 각 패러미터에 대한 설명은 이후 로그인 관련 포스트에서 자세히 다룰 예정입니다. 현재 상태에서는 각 파라미터의 유효성 검증이 적용되어 있지 않기 때문에파라미터를 사용할 때 마다 != null ..

Api 응답 양식 결정 - 게임 웹서버 만들기 3

콘텐츠를 본격적으로 개발하기 전에,먼저 API 응답 형식을 결정해두면나중에 유지보수나 확장에 훨씬 유리합니다. 이번 글에서는 API 응답 양식을 정리해보겠습니다.[Api 응답 양식]Api 응답 양식을 미리 정의해두면,클라이언트측에서 데이터를 처리하거나 디버깅할 때 일관된 구조의 데이터를 다룰 수 있어 편리합니다.또한 모든 API가 같은 구조로 응답하기 때문에, 협업이나 에러 처리도 쉬워집니다. ApiResponse 클래스는 전체 프로젝트에서 공통으로 사용될 예정이므로,Common이라는 전용 폴더를 만들어 이 안에 관리하도록 하겠습니다. 추가->새 폴더로 Common 폴더를 생성해줍니다. 추가 -> 클래스로 'ApiResponse.cs'클래스를 생성해줍니다. 패킷의 기본 응답 구조는 위와 같이 정의..