비대한 유저 데이터를 포스트데이터로 전송하기
1년 가량 서비스한 게임이다보니 , 유저 데이터가 정말 많았다 .
( 특히 클래스로 묶이기 보다는 밸류 타입의 데이터로 쪼개져 있기 때문)
유저 데이터 클래스 내의 변수( 필드 )만 400줄 가량 되는데 ,
이걸 아까 7시에서 8시 반까지
PostData.AddField( key , value );
형태로 옮겨 써야했다.
물론 통으로 제이슨으로 보내도 되겠지만 ,
페이스북 오픈소스인 Parse.com 서버를 쓰고 있는데
통으로 제이슨으로 박히기 보다는 유저 데이터 안에 한 필드당 하나의 칼럼으로
검색이나 필터링에 용이하게 만들고 싶어서 …
( 사실 제이슨으로 해서 서버단에서 해도 되겠지만,, 서버 개발자님이 우리 회사 직원은 아닌지라 클라 선에서 할 수 있는건 처리해야겠다 싶었다. )
처음엔 리플렉션을 쓸까 하다가
리플렉션은 iOS 에서 크래시가 나기 때문에 안쓰기로하고 -_-..
놀랍게도 저걸 일일히 보고 복붙해서 손으로 했다.
집에 일찍 와서 단잠을 자려고 누웠는데 그 순간,
해법이 생각나 버렸다.
원래 클래스 -> 제이슨 직렬화 -> 딕셔너리 <String, String>
위 순서대로 파싱하고 난 후에
Foreach ( var field_temp in 딕셔너리 ) { PostData.AddField( field_temp.key , field_temp.value );}
하면 된다 .
이 방법으로 하면 추가적인 이점이
PlayerData 만 수정하면 자동으로
서버 조작 부를 고칠 필요도 없다 .
( 노가다로 하면 일일히 고쳐야함 … )
유일한 단점이라면 모든 데이터를 string 으로 넘기는 것 정도
어짜피 postData field는 int or string 만 지원하기 때문에 ..
큰 의미는 없다. ( 기존 노가다 방식도 Convert 를 늘 해줬다. )