유니티로 작업중인 개인 프로젝트 중 로그인 및 회원가입 시스템을 DB를 활용해서 구현 해보고 싶어졌다.
게임 시작후 로그인와 계정 생성을 담당해줄 UI를 만들어주고
버튼을 누르는 이벤트에 따라서 로그인과 계정을 생성할 시 필요한 정보를
내 MariaDB에 접근해서 데이터를 주고 받으려고 한다.
초기에 작성했던 구조도를 조금 수정해서 처음에 계정생성과 로그인을 담당해줄 부분을 만들어주고
Exit로 게임을 종료해주는 여러 과정에서 로그아웃을 넣어주기로 한다.
제일 먼저 구현했던 방식은
DB와 통신할때 DB에 접근해 해당 데이터를 쿼리문을 사용해 직접적으로 추가해 주거나 삭제하는 식으로
구현했지만 이는 게임을 플레이 하는 유저가 데이터를 조작하기 너무 쉬운 방식으로 구현되어
보안에 취약하다는 단점이 있다.
따라서 Restful Api를 활용하는 방식으로 진행해 보기로 했는데
이는 내가 직접적인 코드로 데이터를 조작 및 변경 하는것이 아니고
통신 규약 프로토콜에 따른 URL과 함수명, 그리고 정해진 형식의 데이터만
Json 형식으로 전송시켜 준다면 원하는 데이터 값만 깔끔하게 받아올 수 있는 장점이 있다.
우선 Restful Api란 두 시스템간에 안전하게 데이터를 주고 받기 위해서 사용하는 인터페이스인데,
이중에서 API(Aplication Programming Interface)는 다른 소프트웨어 시스템과 통신하기 위해 따르는 규칙이고
Rest는 여러 API 작동 방식중 Rest 아키텍쳐 스타일을 따르는 API를 Rest, Restful API 라고 한다.
Rest의 특징을 간단하게 살펴보자면
1. 월드 와이드 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있고,
2. 웹사이트의 이미지 ,텍스트, DB 내용 등 모든 자원에 고유한 ID인 HTTP URI를 부여한다.
3. 서버와 클라이언트의 역할이 명확하게 분리된다.
고 볼 수 있다.
이후
API로 클라이언트와 서버가 통신하기 위한 통신 규약을 문서로 정의하는데,
일단은 간단하게 통신 환경과 API 정도만 주고 받을 내용을 마크다운 형식으로 정리했다.
통신 대상은 데이터베이스를 구축해 놓은 라즈베리파이의 주소를 받아오고
데이터를 송수신하고 기능을 수행하는것을 미리 쿼리문으로 작성해놓았다.
이제 이를 수행할 URL만 제공받으면 원하는 데이터를 송수신할 수 있다.
새로운 계정을 만든다고 할때 필요한 데이터 형식을 정의하고 의미를 정리해준다.
예를 들어 User ID 는 string 형식으로 최대 12자리까지 가능하게 지정하고,
Password 또한 string 형식으로 최대 24자리까지 가능하게 지정한다.
계정 생성에 성공했을시 data로 수신 받을 것 은 success_msg이고 이는 string 형식으로 받아온다.
실패시에도 fail_msg를 string 형식으로 받아오고
가능하다면 실패 사유까지 나눠준다면 디버깅 및 사용자에게 정보를 제공할때 용이하게 사용 할 수 있다.
위와 같이 정의한 데이터 형식은 통일된 양식이 필요하기 때문에 Json 형태로 주고 받기로 했다.
회원가입과 로그인에 필요한 다른 함수들도 비슷하게 구현해주면 기능을 수행할 틀은 대강 마련 되었다고 볼 수 있다.
로그인 함수 에서는 추후에 로그인 후 토큰이라는 것을 활용해 Password 대신 내부적으로 활용 할 계획이다.
로그인 정보를 업데이트하고 확인할 때 마다 Password를 직접 사용하는건 보안적인 측면에서 취약할 수 있으므로
로그인 시 새로운 토큰을 생성하고 로그아웃시 토큰을 만료시키는 방식으로 진행한다.
score는 해당 계정으로 게임을 플레이하면서 획득해놓은 점수를 의미한다.
로그인 후 게임을 플레이 하는 도중에 DB에 score 를 업데이트 하고 싶을때 사용할 함수이다.
위에 기술한대로 파라미터는 Password 대신 Token을 사용 한다.
마지막으로 Logout은 토큰을 만료시키기 위해서 사용한다.
추후에는 Logout 하지 않고 Login시 보안을 위해 이중 Login을 방지하기 위한 장치를 마련할 계획이다.
2부에서는 c#으로 Rest API를 활용 하기 위한 코드를 작성해보자 !
이미지 출처 :
https://velog.io/@drv98/%EC%9E%90%EC%9B%90%EB%A6%AC%EC%86%8C%EC%8A%A4-URI
'Unity' 카테고리의 다른 글
Unity [디자인 패턴] - 싱글톤 패턴 (0) | 2024.08.07 |
---|---|
Unity [디자인 패턴] - 디자인 패턴이란? (0) | 2024.08.07 |
Unity - 물리 엔진(RigidBody, Collider) (2) | 2024.07.22 |
Unity [디자인 패턴] - 오브젝트 풀링 패턴 (0) | 2024.04.30 |
Unity에서 DB를 활용해 로그인, 회원가입 시스템 구현해보기 (2) (1) | 2024.04.26 |