게임을 만들고 싶어서 들어간 팀
학생 시절 인터넷에서 게임 제작에 참여할 사람을 구한다는 글을 보고 지원했다. 작은 모바일 게임을 만드는 팀이었다. 개발자는 나 혼자였고, 디자이너와 함께 작업했다.
게임 엔진으로 클라이언트를 만들고 소셜 로그인과 인앱 결제를 붙였다. 로그인과 결제는 원리를 몰라 처음에는 잘 되지 않았다. 참고할 만한 글을 찾아 읽으며 한 단계씩 따라갔다. 랭킹과 푸시는 이후 다른 게임에서 붙였다.
로그인 버튼 뒤에 있던 일
소셜 로그인은 이미 가진 계정으로 다른 서비스에서도 자신을 확인하는 방법이다. 게임 안에 로그인 버튼을 띄우는 것 외에, 로그인 결과를 게임의 어느 사용자와 연결할지도 알아야 했다. 나는 그 원리부터 공부했다.
서버가 있는 앱을 예로 들면, 앱이 사용자 번호를 하나 보내왔다고 해서 그 사람이 맞다고 믿을 수는 없다. Google의 서버 인증 안내에서는 로그인으로 받은 ID 토큰을 서버에 보내 검증하도록 설명한다. 토큰은 로그인 결과를 담은 정보이고, 서버는 서명과 유효기간, 이 앱을 위해 발급된 것인지를 확인한다. 이름이나 이메일 문자열만 받는 것과는 다르다. Google 서버 인증 안내
이렇게 사용자를 확인해도 게임 안의 데이터와 권한은 따로 연결해야 한다. 로그인에 성공했다는 사실이 구매한 상품까지 알려주는 것은 아니기 때문이다. 당시 공부하던 로그인과 결제를 지금 다시 설명하면, 확인할 대상이 서로 다른 두 과정이었다.
결제 화면이 닫힌 뒤에도
결제를 붙이면서는 앱에서 결제가 끝났다고 알려주는 것만으로 처리해서는 안 되고, 서버에서도 확인해야 한다는 원리를 배웠다. 화면에서 성공처럼 보이는 것과 실제 구매가 확인된 것은 구분해야 했다.
지금 Google Play의 안내로 그 과정을 풀어보면, 앱은 구매를 식별하는 purchaseToken을 서버에 전달한다. 서버는 Google Play에 유효한 구매인지 확인하고, 이미 처리한 구매인지와 어느 사용자에게 적용할지도 살핀 뒤 상품을 사용할 권한을 준다. 결제를 기다리는 상태를 구매 완료로 처리해서도 안 된다. Google Play 구매 검증 안내
예를 들어 광고를 없애는 상품을 샀다고 해보자. 결제 화면이 닫혔다는 이유만으로 광고를 없애면 구매 확인이 빠진다. 반대로 구매는 됐는데 앱이 응답을 받지 못했다면, 사용자는 돈을 내고도 광고를 계속 볼 수 있다. 구매를 확인하는 과정과 확인한 결과를 사용자에게 적용하는 과정이 모두 필요하다. 같은 구매 정보가 다시 와도 새 구매인 것처럼 반복 처리하지 않도록 해야 한다.
당시 게임에서는 로그인과 인앱 결제를 연결해 출시했고, 그 과정에서 서버 확인이 필요한 이유를 공부했다. 지금 같은 기능을 다시 살핀다면 구매 검증 외에도 통신 실패나 상품 복원처럼 따로 확인할 경우가 남을 것이다.
사과 그림의 크기를 맞추며
기술 말고도 처음 배운 일이 있었다. 게임에 사과 그림이 필요했는데 디자이너에게서 받은 이미지가 게임에서 쓰기에는 크고 고화질이었다. 나는 크기를 줄여서 사용했다.
그때는 같은 그림을 두고 서로 다른 부분을 보고 있었다. 디자이너와 함께 일해보는 경험이 좋았고, 더 여러 사람과 진행했으면 어땠을까 하는 아쉬움도 남았다.
다시 비슷한 작업을 한다면 그림을 받은 뒤 줄이는 것보다, 어느 화면에 어느 크기로 들어갈지부터 같이 보면 좋겠다. 같은 사과라도 화면을 크게 채우는 이미지인지 작은 버튼 안의 그림인지에 따라 필요한 크기가 다를 것이다. 원본은 남겨두고 실제 게임에 넣을 파일을 함께 확인하면, 그림의 선명함과 용량을 같은 대상을 보며 이야기할 수 있겠다. 그때 그렇게 합의했다는 기억보다는, 그 장면을 지금 돌아보며 드는 생각이다.
게임은 스토어에 출시했다. 실제로 즐긴 사람은 지인 정도였다. 많은 사람이 쓰는 서비스가 되지는 않았지만, 로그인과 결제를 붙이고 다른 사람과 만든 결과물을 스토어에 올리는 과정은 끝까지 경험했다.
다음 게임을 만들려고 하자 비슷한 설정을 또 해야 했다. 여러 게임의 공통 기능을 한곳에서 관리하면 좋겠고, 공장처럼 여러 개를 만들고 싶다는 생각도 들었다. 나중의 공통화 경험까지 이어서 보면, 그때부터 모든 것을 공통으로 만들 줄 알았던 것은 아니다. 무엇을 다시 해야 하는지 보이기 시작했던 쪽에 가깝다.
작은 게임 하나를 만드는 동안 혼자 공부할 일과 같이 맞춰볼 일이 함께 있었다. 다시 함께 만든다면 사과 그림이 어디에 들어갈지부터 화면을 펴놓고 이야기해보고 싶다.
댓글
댓글은 GitHub 토론을 사용하며, 열면 GitHub 로그인이 필요합니다. 고객·사람이 드러나는 정보는 남기지 말아 주세요.