[Assignment]3 레드브릭

raejun·2021년 11월 10일
0
  1. 회원가입
  2. 게임 제작하기 - 제작 중 단계의 게임을 '프로젝트'라고 합니다
  3. 게임 출시(퍼블리싱)하기

각 단계의 요구사항은 다음과 같습니다

  • 회원가입
  • 게임 제작
    • 프로젝트는 '실시간'으로 반영이 되어야 합니다
      • 예를 들어, 프로젝트 수정 중 의도치 않은 사이트 종료 시에도 작업 내역은 보존되어야 합니다
  • 게임 출시하기
    • 프로젝트 당 퍼블리싱 할 수 있는 개수는 하나입니다. 퍼블리싱한 게임은 수정할 수 있어야 하며, 수정 후 재출시시 기존에 퍼블리싱된 게임도 수정됩니다
    • 출시하는 게임은 다른 사용자들도 볼 수 있으며, 사용자들의 조회수 / 좋아요 등을 기록할 수 있어야 합니다
    • '게임 혹은 사용자 검색'을 통해서 찾을 수 있어야 합니다

아래의 문제를 풀어야 합니다

- 참고 - 문제 1,2번은 필수 문제이며, 3번은 선택입니다
문제 1. '회원가입'부터 '게임 출시'까지 필요한 테이블을 설계하세요

문제 2. 다음에 필요한 API를 설계하세요

	1. 게임 제작하기에 필요한 API
	3. 조회수 수정, 좋아요 API
	4. 게임 혹은 사용자로 검색 API

- option -
문제 3. 
 (1) 프로젝트 실시간 반영을 위한 Architecture를 설계하세요 ( 그림이 있다면 좋습니다 )
 (2) 위의 Architecture를 토대로 기능을 구현하세요

프로젝트 자세히

회고

  • 이전 과제에서 얘기했듯이 라우터별로 역할을 나누어 과제를 진행하였다. 역할은 크게 게임 제작에 필요한 API, 프로젝트 생성 후 작업 내용을 실시간으로 저장하는 부분, 게임 출시 후 API로 3가지로 나뉘었다. 프로젝트 실시간 저장 부분은 소켓을 사용하여 적용하였는데 어떤 방식으로 저장을 할지에 대한 논의가 있었다. 소켓을 받는 이벤트가 있을 때마다 저장을 하게 되면 너무 많은 요청으로 인해 문제가 발생할 수 있다. 이에 서버에 버퍼를 두어 조건에 이르면 버퍼를 DB에 저장하여 비우는 방식을 적용하였다. 어느 정도 요청이 줄었지만, 클라이언트의 요청은 아직 많았다. 클라이언트에게 쿨타임을 주어 요청을 줄였다. 내가 직접 소켓파트에 작업을 참여하진 않았지만, 팀원들이 어떤식으로 클라이언트의 요청을 줄여 효율적인 서버를 운영하는 지 볼 수 있었다. 라우터를 다루는 API쪽은 기존 것들을 확장하는 방식으로 진행하였다. 다시 몽고DB와 몽구스를 사용하였다. 몽구스를 사용하면서 ObjectId의 데이터 타입으로 인해 고생을 했다. DB에 직접 접근하는 메소드를 사용하기전에 변수가 ObjectId가 맞는지 확인 후 사용을 해야 했다.(아니면 Argument passed in must be a string of 24 hex characters 이런 애러 등장)

    팀원들 대부분 관계형 DB에 익숙해서 인지 관계를 생각해서 DB를 구성하려해서 어렵게 접근한 것 같다. No-SQL 특성상 관계 형성을 하지 않고 필요한 컬럼은 특성으로 넣어 중복이더라도 쉽게 처리하는 방향으로 갔으면 쉽게 갔을 것 같다. 몽고db는 반환 타입이 특이해서 lean()이란 메소드를 붙여 json형식으로 만들어야 했다.(id값이 있는데 id가 중복으로 생기는 문제가 발생했었다) 몽고DB의 virtual이란 기능을 알게 됐다. 기존 컬렉션에 name이라는 속성이 있었다면 이것을 virtual로 성과 이름으로 가상의 속성을 만들 수 있다. 우리는 기존에 있는 속성말고 외부의 속성을 virtual로 가져와 사용하려 했다. release스키마에 like스키마 정보를 virtual로 연결 한다. Release DB접근 메소드에서 like를 populate메소드로 사용하여 적용한다.

profile
정리노트

0개의 댓글