- 개요
로그인 정보를 전달하는 AccountServer를 추가하여 프로젝트를 구성해보겠습니다.
해당 프로젝트에 다음의 2개의 패키지를 설치합니다.
- 1) EntityFrameworkCore.SqlServer : .Net 애플리케이션이 MS SQL과 소통할 수 있도록 서비스 제공
- 2) EntityFrameworkCore.Design : EF Core의 디자인 타임 도구를 사용할 수 있도록 서비스 제공
1) DataModel 클래스

AccountServer에서 사용할 DB의 어트리뷰트를 위와 같이 구성하였습니다.
각각 다음과 같습니다.
- 로그인한 계정의 ID
- 로그인한 계정의 이름
- 로그인한 계정의 비밀번호
2) AppDbContext 클래스

AppDbContext 클래스를 생성하여 Entity Framework를 사용하여 DB 연결을 수행하도록 하겠습니다.
엔티티 클래스로 추가한 AccountDb를 프로퍼티로 사용하도록 설정하였습니다.
또 생성자를 정의하여 DbContext를 초기화합니다.
마지막으로 OnModelCreating 함수를 오버라이드하여 AccountDb 엔티티가 존재하는 데이터 테이블에
고유 INDEX를 생성하도록 설정하였습니다.
3) appsettings.json 파일

DefaultConnection 속성을 설정하여 프로젝트에서 기본적으로 사용할 DB를 설정하였습니다.
4) Startup 클래스

ConfigureServices 함수를 위와 같이 수정하였습니다.
DB를 연결하는 방법을 명시하면서, 사용할 DB의 서버도 같이 명시하였습니다.
이후 Package Manager Console에서 다음의 명령어를 입력하여 DB를 생성합니다.
- add-migration "migration 이름"
- update-database
5) WebPacket 클래스

AccountServer에서 교환이 이뤄질 패킷들을 위와 같이 생성하였습니다.
- CreateAccountPacketReq 패킷 : 계정 생성을 요청하는 패킷
- CreateAccountPacketRes 패킷 : 계정 생성에 응답하는 패킷
- LoginAccountPacketReq 패킷 : 로그인을 요청하는 패킷
- LoginAccountPacketRes 패킷 : 로그인을 응답하는 패킷
- ServerInfo : 로그인할 서버의 상태 저장
6) Extensions 클래스

Extensions 클래스를 위와 같이 구성하여 Extension 메서드를 정의하였습니다.
SaveChangesEx 함수는 AppDbContext를 대상으로 예외처리하여 SaveChanges 함수를 호출합니다.
7) AccountController 클래스

MVC 모델에서 Controller 역할을 수행할 AccountController 클래스를 생성하였습니다.
위와 같이 Route 어트리뷰트를 설정하여 라우팅 경로를 설정하였습니다.
또, DB와의 연결을 관리하기 위한 AppDbContext를 멤버변수로 추가하였습니다.
생성자에서는 해당 멤버변수를 설정합니다.

계정 생성 요청(POST)에 대한 응답을 전달하기 위한 CreateAccount 함수를 위와 같이 추가하였습니다.
본문에서 보낸 CreateAccountPacketReq를 인자로 받아 동작합니다.
이후의 동작은 다음과 같습니다.
- 요청에 대한 응답으로 보낼 CreateAccountPacketRes 인스턴스를 생성
- 생성할 계정의 AccountName이 DB에 존재하는지 확인
- 존재하지 않는 경우 : 새롭게 생성한 후 DB에 저장, 이후 생성 여부를 True로 설정
- 존재하는 경우 : 생성 여부를 False로 설정
- 이후 CreateAccountPacketRes 인스턴스 반환

로그인 요청(POST)에 대한 응답을 전달하기 위한 LoginAccount 함수를 위와 같이 정의하였습니다.
본문에서 보낸 LoginAccountPacketReq를 인자로 받아 동작합니다.
이후의 동작은 다음과 같습니다.
- 요청에 대한 응답으로 보낼 LoginAccountPacketRes 인스턴스를 생성
- 로그인을 진행할 계정의 AccountName과 Password가 DB에 존재하는지 확인
- 존재하지 않는 경우 : 로그인 여부를 False로 설정
- 존재하는 경우 : 로그인 여부를 True로 설정, 클라이언트가 선택하여 접속할 서버의 리스트를 설정
- 이후 CreateAccountPacketRes 인스턴스 반환
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (6) 라이브서비스' 카테고리의 다른 글
| 2D MMO 라이브 서비스 - (4 - 4) 로그인 UI (0) | 2025.10.27 |
|---|---|
| 2D MMO 라이브 서비스 - (4 - 3) AccountServer (2) (0) | 2025.10.21 |
| 2D MMO 라이브 서비스 - (4 - 1) 서버 구조 (0) | 2025.10.20 |
| 2D MMO 라이브 서비스 - (3 - 3) DummyClient (3) (0) | 2025.10.14 |
| 2D MMO 라이브 서비스 - (3 - 2) DummyClient (2) (0) | 2025.10.13 |