여름방학 프로젝트 3주차 - 3
·
방학 공부 기록
오늘은 전에 만들었던 Refresh 토큰 구조를 클라이언트에 적용했다. ApiClient에서 요청을 보냈는데 401 오류가 뜨면 Refresh 토큰을 사용해서 refresh 요청을 보내도록 하였다.Refresh 흐름요청 시에 원래 토큰을 멤버변수로 저장해두었다가 401 오류가 뜨면 TryRefreshAccessToken 부분으로 넘어간다.먼저 세마포어로 이미 진행중인 Refresh가 있는지 확인을 해주고, 없다면 직접적인 요청으로 넘어가게 된다.세마포어를 잡았는데 토큰이 갱신되었다면, HasAccessToken을 반환해준다.만약 Refresh 토큰 갱신 작업이 실패하면 false를 반환하고, 그 오류가 unauthorize라면 로그인이 만료된 것이니 ExpireSession을 호출해준다. 대충 총 흐름은..
여름방학 프로젝트 3주차 - 2
·
방학 공부 기록
게임 서버를 수정할 때마다dotnet publishscpsshsystemctl restart를 직접 입력해서 배포하는게 과정이 너무 귀찮아서 GitHubActions를 사용해서 배포 자동화를 했다.main 브랜치에 Push하면 GitHub에서 자동으로 프로젝트를 빌드하고, publish 결과물을 Oracle Cloud 서버로 전송한 뒤 배포 스크립트를 실행하도록 구성했다.전체 흐름은 다음과 같다.GitHub Push ↓GitHub Actions 실행 ↓dotnet publish ↓SCP로 서버 업로드 ↓배포 스크립트 실행 ↓systemd 서비스 재시작전에 정리했던 배포를 Actions 사용해서 자동화 한거라 보면 된다.SSH 키 등록GitHub Actions가..
여름방학 프로젝트 3주차 - 1
·
방학 공부 기록
하하 오늘은 면접을 보고 왔다.지금 하고있는 서버 프로젝트 이상한거 다 고치고 피드백 받는걸 과제로 내주신다고 한다. 좀 개쩌는 기회인듯.코드 수정코드에서 로직이 잘못됐거나, 오류가 날수 있는 부분들을 AI한테 찾아내게 시켜서 고치는 시간을 가졌다.동시성 문제들어떻게 보면 굉장히 간단한 사실인데 깨닫지 못했던 부분이 있었다. public async Task GetOrCreateAsync(int userId) { Character? character = await _dbContext.Characters.FirstOrDefaultAsync(c => c.UserId == userId); if (character is not null) ..
여름방학 프로젝트 2주차 - 3
·
방학 공부 기록
오늘은 재화들 가져올수 있는 api를 제작하고 지금까지 만든 서버 로직과 구조들이 잘 돌아가는지 확인하기 위해 유니티랑 연동해서 테스트해보는 시간을 가졌다. 클라이언트 연결 코드를 내가 맡게 되었으면 코드도 같이 올리겠다만... 구글로그인만 내가 연결하였고, 나머지는 우리 팀원들이 맡아보기로 해서 난 정상 작동만 확인하는 테스트코드만 만들었다.그래서 클라이언트 코드는 쓸게 없다..AccountController.TestLogin먼저 유니티 에디터에선 구글로그인을 할수 없기때문에 테스트로 이미 등록된 내 개발자 계정의 토큰을 임시로 반환해주도록 하는 매서드를 만들었다.이렇게 되면 구글로그인 없이 test만 호출해도 jwt 토큰을 발급해준다.CurrencyController간단하게 모든재화 / 한가지 재화를..
여름방학 프로젝트 2주차 - 2
·
방학 공부 기록
드디어 로그인 서버를 얼추 끝내고 게임서버 컨텐츠, 구조만들기에 돌입했다! 로그인 서버도 사실 토큰 관리라던가 만료됐을때 재로그인 없이 재발급 등 할게 좀 있는데 일단 뒤로 제쳐두고 스테이지, 맵, 재화, 플레이어 방 시스템을 만들었다.지금까지는 클라우딩 서비스, 구글로그인 같이 공부할게 명확했어서 정리하기 편했는데 컨텐츠를 만들었다보니 뭘 정리해야할지 모르겠다.게임서버 배포전에 했던 내용이랑 중복이긴 하지만 로그인 서버 말고 게임 서버도 nginx로 배포 해놓았다.Persistence 분리기존에는 로그인 서버 안에 User 엔티티가 있었는데, Character와 1:1 관계를 정의하기 위해 유저 정보를 사용해야 했다.근데 그럼 User - Character가 서로 알아야 하는데 User는 로그인 서버에..
여름방학 프로젝트 2주차 - 1
·
방학 공부 기록
오늘은 유니티에서 모바일 구글로긴을 만들것이다. 선한쌤 구글로그인을 똑같이 만드려고 했는데 모바일이랑은 아예 다른방식이어서 처음부터 만들게 됐다.. 그래도 데스크탑보다 구현은 간단한것 같다. 먼저 모바일 구글로그인에 대해 알아보니, 유니티 패키지로 간단하게 하는건 지원이 종료됐다고 한다. 그래서 Android Credential Manager를 사용해서 구현해줄 것이다. Android credential Manager를 사용하게 되면 자바 플러그인을 사용해야 한다고 해서 그부분은 지피티한테 맡기고 우선 모바일에서 세팅해주어야 할 부분들을 설명하겠다.사전 세팅모바일 로그인은 컴퓨터로 테스트가 불가능해서 어쩔수 없이 모바일로 빌드를 뽑아서 테스트 해야한다.그래서 빌드세팅을 건들게 많은데, 먼저 이 Packa..
여름방학 프로젝트 1주차 - 3
·
방학 공부 기록
오늘은 어제 만든 로그인서버를 개발할때 사용해봐야 되기 때문에 Iaas 서비스를 사용해서 배포하기를 해볼것이다. 이번 프로젝트에선 오라클 클라우드를 사용할 것이다. 평생무료가 되기때문에...원래 aws 썼었는데 프리티어가 끝났다. 내가 느끼기론 진짜 처음하는 입장에서 너무 할게많고 복잡했어서 중요한것들만 설명해보겠다.인스턴스 생성 및 세팅위에서 얘기했듯, 이번 프로젝트에선 오라클 클라우드 서비스를 사용할것이다.그중에서도 Compute 시스템과 Database 시스템을 사용하겠다. 그럼 이제 사용할 두개의 시스템의 인스턴스를 생성해주고, 세팅을 해줄것이다. Compute먼저 Compute Instance를 생성하겠다. 세팅에서 초반은 크게 건드릴게 없었고, 네트워크 부분만 설명을 해보겠다.위 사진은 네트워..
여름방학 프로젝트 1주차 - 2
·
방학 공부 기록
오늘은 본격적으로 로그인 서버를 구현해보겠다 일단 출시를 목표로 한 프로젝트이기 때문에 Id, Pw를 플레이어가 직접 회원가입 하고 로그인 하는걸 만들기에는 뭔가 꺼림칙 해서 구글로그인을 만들어보기로 했다.구글 세팅먼저 구글로그인을 구현하기 위해선 구글 클라우드에 가입하고 프로젝트를 생성해주어야 한다.프로젝트를 생성해준 후 Google Auth Platform 서비스 들어가서 웹클라이언트를 하나 생성한다.그리고 클라이언트 ID를 복사하고 이때 복사한 클라이언트 ID는 인증에 사용한다.단, Id는 밖으로 유출되면 안되기 때문에, 닷넷 유저시크릿으로 넣어준다.GoogleService프로젝트로 돌아가서 GoogleLoginRequst 모델을 생성해서 구글 로그인 시에 반환되는 IdToken을 받아준다.추가로 ..