ETC/프로젝트

[Project_Beans Party] 앱 개발 인재양성 프로그램 마무리

지과쌤 2021. 1. 2.
반응형

 


2020년 9월~12월 약 4개월간 참여한 앱 개발 인재양성 프로그램을 최종 마무리 하였다.

 

수료증과 상

학교 SW중심대학사업단 에서 진행한 프로그램이었고, 아래 일정을 토대로 프로그램이 진행되었다.

 

비즈니스 모델링 교육과 앱 개발 교육이 생각보다 흥미롭고 알차게 진행되어서 좋았다. 평소 갖고있던 아이디어들을 어떻게 구체화할 수 있을까 고민을 많이 했는데 해당 교육을 듣고 도움이 많이 되었다.

아무튼 아이디어는 계속 메모중

이후 앱 개발, 기획, 설계에 관한 교육을 들었고 동기 4명과 함께 팀을 꾸려 프로젝트를 시작했다.

하지만..코로나로 인해 시험기간이 약 2주에서 3주, 길게는 한달까지 지속되었고, 캡스톤디자인 프로젝트를 진행중이던 내 개인 스케줄로 인해 실질적으로 어플리케이션을 개발할 수 있는 기간이 굉장히 짧았다..

 

애초에 개발 역량을 보는게 아닌 비즈니스 모델과 기획적인 부분을 많이 따지는것 같아 비즈니스 모델 관련한 고민들을 많이 했던 것 같다.

 

팀당 충분한 예산을 지원해줘서 개발에 필요한 유료 프로그램들을 살 수 있었다. 하지만 막판에 담당자분이 12월 31부로 퇴사를 하신다며 더이상의 후속지원은 어렵다는 말을.... 이럴거면 후속 지원 일정은 왜 적어놨는지....

 

그래도 기획과 설계단계를 충분히 거쳐 개발을 시작했고 구현하기로 한 알고리즘과 데이터플로우를 다 구현했다는것에 의의를 둔다.


게임? 게임!

유니티를 사용하여 게임을 만들기로 했다.

어렸을 적 재미있게 했던 미니게임천국2

미니게임천국에서 영감을 받아 시작했는데, 여러 일정들로 인해 계속 미뤄지고, 그래픽 요소를 새로 제작하는데 시간이 오래 걸려 5~6가지의 게임에서 한가지 게임으로 줄여 일단 출시를 해보는쪽으로 가닥을 잡았다.

 

게임 데이터 관리는 여건상 client <-> DB 로 바로 연결하는쪽으로 결정했다.

 

비즈니스 모델 관련해서는 캐릭터 스킨과 광고, 그리고 인앱결제를 통한 광고 제거 플랜 등을 추가하기로 하였다.

 

 

도트 드로잉 툴

위의 유료 도트 드로잉 프로그램을 사용하여 캐릭터와 각종 로고, 메뉴 등을 만들었고 asset store에서 괜찮은 무료 배경들을 가져와 사용했다.

게임 로고

 

메뉴도 도트로 찍고..
캐릭터도 찍고..
로비도 찍고

게임 UI와 캐릭터 등 그래픽 요소들을 만드는데 생각보다 오랜 시간이 걸렸고, 기존에 나온 게임들이 얼마나 디자이너들의 시간이 갈려 만들어졌는지 느낄 수 있었다.

 

그렇게 만들어진 UI UX들...

메인화면과 인게임

별거없어보이지만 쉽지 않았었다.


게임 알고리즘

 

기본적으로 유니티에서 다양한 기능들을 지원해줬기때문에 비교적 빠르게 알고리즘을 짤 수 있었다.

 

물리엔진과 벽 등 다수의 프리셋이 제공되었고, 잘 가져와서 조합하면 되었다. 하지만 다들 유니티를 처음 써봐서 꽤 많이 버벅였던 것 같다.

 

인게임 로직

 

-git 참고 및 수정 예정-


DB

 

내가 맡은 부분이다. 실시간으로 게임 데이터를 받아 랭킹 등을 계산하는데 사용해야했다. 

 

heroku 를 사용하여 MySQL 로 DB를 만들었다.

 

시간이 부족해 클라이언트와 DB를 바로 연결하였는데 테스트를 진행하면서 굉장히 비효율적이라는것을 깨달았다.

처음 짠 코드는 쿼리를 날릴때마다 DB연결을 하고 이후 연결을 끊는데, 이때 DB연결비용이 굉장히 커서 연결 구조 자체를 바꿔야했었다.

 

뻗음...

개선...방안?

일단 두가지정도로 개선할 수 있을 것 같다.

 

  1. client (db connection pool) <-> db
    • db 커넥션풀 을 사용한다 / 미리 연결해서 얻은 데이터들을 모아놓고 그곳에 요청하는방식이다.
  2. client <-> server (db connection pool) <-> db
    • db 연결을 반복하면 들어가는 비용이 너무 크기때문에, 서버와 db는 계속 라이브로 연결을 해두고, 필요할때마다 클라이언트와 서버를 연결한다.

일단 현재는 시간상 적용하기 힘들어 기존 방식대로 했지만, 나중에 또 구성할 일이 있다면 그때는 위 개선 방안을 참고하여 만들어봐야겠다.

 

테이블

일단 처음 게임을 시작할 때, 아래 사진과 같이 닉네임을 입력받는다.

 

처음 시작

이 과정에서 중복된 닉네임을 체크하느 알고리즘도 필요했는데, 사용자가 입력한 닉네임을 검색하여 결과값이 있다면 중복된 닉네임임을 알리고 결과값이 없다면 생성가능 또는 바로 생성하도록 하였다.

 

첫 생성시 user_score의 default값은 0이고, user_num은 순차적으로 증가하여 추후 유저를 따로 체크할 때 쓸 수 있도록 하였다.

 

이후 게임을 종료하고 유저의 점수에 따라 db 갱신이 들어간다.

45점으로 종료

45점으로 게임이 끝난 후, 바로 db갱신이 이루어지게 된다.

 

45점으로 갱신

그리고, 쌓인 데이터를 통해 사용자는 랭킹을 조회해볼 수 있다.

6등으로 반영된것을 볼 수 있다.

DataTable dt = selsql("SELECT" +
                                    " (SELECT COUNT(*) + 1 FROM user_info WHERE user_score > b.user_score) AS rank" +
                                    " FROM user_info AS b" +
                                    " WHERE user_name like '" + user_name + "'"+
                                    " ORDER BY" +
                                    " rank ASC");

위 쿼리문의 반환값을 DataTable 형태로 저장하고, 필요한 값들을 가져와 랭킹을 출력하는데 사용한다.


마무리

아무튼 만들었고.. 시연까지 해봤다.

 

코로나때문에 시험을 3주동안 치고... 과제는 과제대로 엄청 많이 해야하고... 이정도라도 만든게 어디야 라는 생각이 든다.

짧은 시간과 제한적인 환경때문에 처음 생각했던대로 만들지는 못했지만, 이후에는 꼭 만족스러운 결과물을 내야겠다는 생각이 들었다.


소스

https://github.com/jerrygoha/Project_Beans_Party

 

jerrygoha/Project_Beans_Party

Contribute to jerrygoha/Project_Beans_Party development by creating an account on GitHub.

github.com

 

반응형

댓글

💲 추천 글