
게임 내 유저 프로필 API를 설계해보겠습니다.
다음과 같은 프로필 항목을 가정하고 API를 설개합니다
① 프로필 캐릭터 액자 : 프로필 캐릭터를 감싸는 외적 요소
② 프로필 캐릭터
③ 닉네임
④ 유저의 uId
⑤ 자기소개글
⑥ 뱃지/트로피/랭킹 등 : 향후 기획 변경 및 추가를 고려하여 확장 가능한 구조를 전제로 설계
[DB 설계]

[Mysql 트랜젝션 추가]
유저가 최초 생성될 때는 User 테이블과 UserProfile 테이블이 함께 생성되어야 합니다.
두 테이블은 하나의 작업 단위이므로
중간에 에러가 발생할 경우 전체 작업이 롤백되어야 합니다.
이를 위해 MySql 트랜잭션을 적용하여 두 작업을 하나의 작업으로 처리하도록 하겠습니다.

제공 기능 :
BeginTransaction
Commit
Rollback
[기존의 Auth 코드 리팩토링]
이제 유저 생성 시 UserProfile 테이블도 함께 생성되도록 구조가 변경될 예정입니다.
기존의 Auth클래스가 유저 조회, 생성, 프로필까지 생성하게되면 책임이 점점 커진다고 생각되어
책임을 분리하기 위해
유저 생성, 조회 기능을 UseCase로 빼내었습니다.


기존의 Auth의 경우,
각 플랫폼에서 플랫폼별 유저 코드를 획득하는 기능만 남겨둡니다.
[유저 조회 및 생성]

유저 조회, 생성, 유저 프로필 생성을 하나의 UseCase로 묶어 한번에 처리하겠습니다.
1. 유저를 조회한다.
2. 유저가 존재하지 않을경우
- 유저 테이블에 유저를 생성한다.
- 유저 프로필 테이블에 유저를 생성한다.



유저 프로필 생성시에는 미리 정의해둔 Default값을 사용합니다.


이제 로그인시 프로필도 함께 생성됩니다.
[프로필 조회]

프로필 조회의 경우
유저의 프로필 정보와 프로필에 연결된 뱃지 목록을 DB에서 조회하여 응답값으로 반환합니다.
프로필 화면에서 필요한 정보를 한번의 Api호출로 조회할 수 있도록 구성하여 불필요한 네트워크 통신을 줄입니다.

성공적으로 프로필 정보를 얻을 수 있습니다.
[프로필 변경]
프로필 변경 API에서는
각 프로필 항목에 대해 변경 여부를 나타내는 Bool 값을 함께 전달받아
실제로 변경된 항목만 DB에 Update하도록 구현하였습니다.
본 예시에서는 하나의 API에서 모든 프로필 항목을 변경할 수 있도록 설계하였습니다.
다만 기획에 따라 각각의 API로 분리하여 구현하는 것도 가능합니다.


var setClauses = new List<string>();
var parameters = new DynamicParameters();
if (isChangeNickName)
{
setClauses.Add("Nickname = @nickname");
parameters.Add("nickName", nickName);
}
if (isChangeLabel)
{
setClauses.Add("LabelId = @label_id");
parameters.Add("labelId", labelId);
}
if (isChangeMessage)
{
setClauses.Add("Message = @message");
parameters.Add("message", message);
}
if (setClauses.Count == 0)
{
return false;
}
각 항목에 대해 변경 여부를 확인한 뒤,
변경되는 항목만 추가합니다.
var setClause = string.Join(", ", setClauses);
var SQL = $@"
UPDATE UserProfile
SET {setClause}
WHERE uId = @uId;";
var result = await _session.Connection.ExecuteAsync(SQL, parameters,
transaction: _session.Transaction);
변경된 컬럼만 UPDATE 쿼리를 실행합니다.

테스트로 닉네임을 방랑자로 변경하보겠습니다.

성공적으로 반영되었습니다.
[코드]
github
'게임 웹서버 만들기' 카테고리의 다른 글
| 유저 재화 - 게임 웹서버 만들기 12 (0) | 2026.01.06 |
|---|---|
| dotNet Core에서 Serilog 사용하기, 로그 파일 생성 - 게임 웹서버 만들기 11 (0) | 2025.12.30 |
| 구글 Windows 로그인 - 게임 웹서버 만들기 9 (0) | 2025.12.12 |
| Redis연결, 세션키 생성 - 게임 웹서버 만들기 8 (0) | 2025.12.12 |
| 패킷 암호화 / 복호화 - 게임 웹서버 만들기 7 (0) | 2025.12.08 |