현실판 부루마블 게임을 기반으로 하는 여행 게시판.
주사위를 굴려 랜덤하게 도착하는 한국의 주요 도시 및 지역들을 여행을 조금더 풍요롭게해 줄 미션을 수행하며 실제로 여행하고 이를 해당 도시게시판에 블로깅하는 게임적인 요소가 가미된 여행 커뮤니티 게시판을 기획하였다.
해당 서비스는 크게 두가지로 구성된다.
첫째, 게임부. 게임부는 유저가 실제로 여행을 계획하는 단계에서 주사위를 굴리고 그 눈만큼을 유저의 캐릭터가 이동하게 되고 도착한 도시에서 미션을 수행하며 실제 여행을 다녀오고 이를 블로깅을 통해 인증한다면 리워드로 스탬프를 받고 다음 도시를 여행하기 위해 주사위를 굴린다. 캐릭터가 한바퀴를 돌게되면 레벨이 1 상승한다. 만약 같은 도시를 또 방문하게 된다면 유저는 두가지 선택을 할 수 있다. 1. 주사위를 다시 굴려 다른 지역을 여행하기, 2. 해당 도시를 새로운 레벨2의 미션을 수행하며 다시 여행하기.
둘째, 커뮤니티 게시판. 유저가 게임을 굳이 플레이하지 않더라도 해당 서비스는 여행 커뮤니티 게시판으로서 그역할을 지속한다. 해당 게임보드에 존재하는 도시 및 도들은 해당 여행 리뷰들을 게시한 게시판의 역할을 하고 유저들은 태그를 바탕으로 경험과 재미를 공유하는 커뮤니티 활동을 지속할 수 있다.
인증 및 보안
공통 기능
맴버쉽
메인 게임부
게시판
마이페이지(여권)
설계가 무엇보다 어렵고 중요하다는걸 많이 깨달았다. 특히 백앤드 프로그래머로써 테이블 설계가 얼마나 중요한지 느꼈다. 테이블 설계에 있어 가장 중점을 두었던 점은 최대한 수정과 업데이트에 용이하도록 만드는 것 그리고 내부 쿼리수를 최대한 줄이는 설계가 핵심이었다.
예를들어, city게시판을 만드는데 있어 각각의 도시 게시판을 만들고 블로그들을 콜럼으로 관리할 것인가 아니면 도시게시판 자체도 컬럼으로 관리할 것인가가 첫번째 난관이였다. 전자의 경우에는 조인되는 추가 쿼리를 줄이고 블로그의 수가 많아지는 경우를 대비할 수 있다는 장점이 있다는 생각이 들었지만 단점이 명확해 보여 후자를 선택하였다. 단점으로는 블로그만 분리해서 쿼리를 할 수 없어 불필요한 네트워크 비용을 발생시킬 수 있다는 생각을 했다(다양한 쿼리를 발생시켜야 하는데 복잡성이 올라서 속도 저하를 초래할 수 있다).
또는 미션 부분에서 각각의 도시의 특수한 미션들과 공통된 미션, 두가지 성질을 가진 미션들이 있는데 이를 어떻게 관리할 것인가. 처음에는 mission과 special_mission 두가지로 테이블을 나누고 공통미션은 시티와 조인테이블을 만들어 매핑하여 다양한 도시에서 공통된 미션을 사용 할 수 있게 하고 일대다의 형태로 시티와 special_mission을 묶어 special_mission이 시티에 고정값으로 종속되도록 설계하였으나 거의 비슷한 내용의 두 미션테이블이 쓸데없는 복잡성을 나았고 결국 이또한 성능 저하로 이어질 가능성이 대두되었다. 따라서, 미션을 모두 공통으로 두고 타입을 이넘으로 관리하며 부여하여 이 두가지 미션의 역할을 모두 충족시킬 수 있도록 하였다.
또한 이미지 또한 처음에는 member_image와 blog_image의 두 조인테이블을 만들어 분류하기 쉽게 관리하고자 하였는데 이 또한 불필요한 쿼리 수의 증가로 이어짐을 발견하여 이미지에 맴버와 블로그의 Nullable한 Fk를 두어(매핑하여) 관리하는 식으로 변경하였다.