Dev_articles/Projects

[ft_transcendence] Kick off

humblEgo 2020. 12. 12. 02:52
42seoul에서 진행한 프로젝트를 기록합니다. 
아래는 2020년 12월 4일 진행한 프로젝트 kickoff를 요약한 내용입니다.

1. 들어가며

이번에 진행할 프로젝트는 '트렌센던스'입니다. 트렌센던스는 '초월'이란 뜻입니다. 왜 프로젝트에 이런 거창한 이름이 붙었을까요?

 

42seoul의 프로젝트들을 나타내는 'Holy graph'

42seoul에는 공통 과정에 해당하는 '이너써클'이 존재하고, 이후에 하고 싶은 주제에 해당하는 프로젝트를 선택해서 진행할 수 있는 '아웃써클'이 존재합니다. 그리고 트렌센던스 프로젝트는 이너써클의 마지막 프로젝트로, 이를 완료해야 아웃써클을 진행할 수 있습니다. 즉, 공통써클을 초월하려면 뽀개야하는 관문인 셈이며 이런 성격이 이름으로 드러난 것 같습니다.

 

트렌센던스 프로젝트는 개발기를 블로그에 남겨보려합니다. 

앞서 진행한 Webserv 과제는 무려 2달간 진행하며 팀 내부적으로 나름 의미있는 고민과 통찰이 쌓였습니다. 하지만 외부에 보여주기 애매한 상태로 남은 것이 아쉬웠습니다. 가령 github project에 적힌 카드들은 acheive되면 따로 찾아보기 어렵죠. 위키에도 학습한 내용이 쌓여있지만 막상 깃헙에서는 코드랑 README만 보는 것 같습니다. 그래서 이번에는 프로젝트 진행하며 병렬적으로 개발기를 남겨보고자 합니다.


2. 요구사항 요약

PONG 게임을 즐길 수 있는 서비스를 만들면 됩니다! (아타리의 그 pong 맞습니다.)

이 서비스의 대략적인 요구사항은 아래와 같습니다.

  • 한 컴퓨터에서 같이 즐길 수 있는 듀얼모드가 가능해야한다.
  • 원격으로 대결할 수 있는 대결모드가 가능해야한다.
  • 랭킹 시스템을 제공해야한다.
  • 길드 시스템을 제공해야한다.
  • 길드전 시스템을 제공해야한다.
  • 게임 중계 시스템이 가능해야한다.
  • 단체 채팅 시스템이 가능해야한다.
  • 1:1 채팅 시스템이 가능해야한다.
  • 게임 프로필 시스템(대전 신청 기능 포함)이 구현되어야한다.
  • 42로그인, 소셜 로그인이 가능해야한다.
  • 관리자 시스템이 구현되어야한다.

웹서버 구현도 규모가 상당히 크게 느껴졌는데, 다시 보니 선녀네요ㅎㅎ

 

3. 기술스택

이제 정들었던 C/C++을 벗어나야 합니다.

사용해야하는 기술스택은 아래와 같습니다.

  • PostgreSQL (DB)
  • Ruby on rails
  • Backbone.js
  • Docker

PostgreSQL는 42mate 프로젝트를 진행하며 개미눈꼽만큼 다루어보았고, Docker는 42seoul 과제를 진행하며 어느 정도 다루어보았지만 나머지는 미지의 영역입니다. 솔직히 Ruby 언어 자체에는 크게 관심이 없었는데 생산성의 Ruby on rails 를 다뤄보는 것은 기대가 되네요!

4. 프로젝트 일정

프로젝트 일정은 2월 중순 이전에 끝내는 것을 1차적인 목표로 두기로 하였습니다. 물론 프로젝트의 목적이 학습에 있는만큼, 학습하는데 시간이 더 필요하다는 판단이 든다면 일정은 더욱 미뤄질 예정입니다. 뭐든 처음하는걸 제대로 하려하면 시간이 더 걸리더군요.

특히 이번 프로젝트에서는 '학습과 설계'에 충분히 시간을 투자하기로 협의했습니다. 프로젝트의 규모가 크고 팀원 수가 많은데 효율적인 협업을 하려면, '제대로 모듈화' 하는 것이 관건입니다. 그리고 이는 충분한 학습과 설계가 선행되어야할 것입니다. 제대로 모듈화되고 나면 TDD처럼 해당 모듈을 구현하며 학습과 설계를 반복할 수 있겠죠?

 

결과적으로 대강 잡은 큰 틀은 아래와 같습니다.

  1. 기술학습 (45일)
    • SQL → 루비 → 루비온레일스 → JS → backbone.JS → html/css -> PONG 게임 구현 실습 -> 채팅 시스템 구현 실습 -> Social-login 및 42 인증 기능 실습
  2. 서브젝트 재분석
  3. 설계
  4. 구현
  5. 테스트 & 개선

5. 학습 방법

학습방법에 대해서는 아래처럼 세부 논의가 진행되었습니다. 개인학습과 달리 팀 학습에서 오는 시너지를 극대화하는 방법을 찾고 싶었기 때문이죠. 적어도 '내가 모르는 것을 모르는 상황'을 팀 차원에서 방지할 수 있는 좋은 문화와 시스템을 갖출 수 있도록 이것저것 실험할 예정입니다.

  1. 학습을 어떻게 할 것인가?

    • 같은 진도표를 따르되 같은 진도 안에서 쉐어링할 분야를 정한다.
  2. 언제까지 학습을 하고 구현을 시작해야할까?

    • 기술이 앞으로의 개발자 생활과 멀리 동떨어진 것이라면 데드라인을 정해서 빠르게 해치우는 식으로 학습해야할 것이다. 하지만 이번 프로젝트는 웹을 제대로 다룰 수 있는 기회이니 만큼 충분히 학습을 하면 좋겠다. 미리 학습을 어느정도 진행한 eunhkim님의 예상에 따르면 학습 기간은 최소한 45일이 걸릴 것 같다. 별개로 이후 설계에 15일, 구현에 20일, 버그픽스에 10일 정도 소요될 것 같다.
  3. 학습시 미팅 주기는 어떻게 할 것인가?

    • 화, 금요일에 1시간가량 온라인 미팅을 진행한다.
    • 미팅에선 '남들이 모를 것 같은 것'이나 '생각해봤으면 하는 주제'에 대해 공유한다.
    • 막히는 부분은 팀에 질문하여 빠르게 해소한다.

6. 마치며

운이 좋게도 또 다시 훌륭한 동료들과 팀을 구성할 수 있게 되었습니다. 코로나 때문에 원격으로 팀프로젝트를 진행해야하는게 아쉽지만 워낙 다들 열의가 넘치고 프로젝트 관리에 익숙해져서 잘 진행할 수 있을 것 같네요. 좋은 영향 받으며 성장할 수 있을 것 같습니다. 기대되네요.