프로젝트

파이널 프로젝트 'MEMON'

grin-quokka 2019. 12. 29. 19:33

Don_Juan (Memon)

프로젝트 'MEMON'

  • 내가 코드스테이츠에서 진행한 파이널 프로젝트는 '메몬'이다. 친구들과 밥을 먹고 한 사람이 계산하고 나중에 돈을 보내주는 더치 페이를 할 때 편하게 사용할 수 있는 어플을 만들고자 이 프로젝트를 진행 하였다.

  • 구글 플레이스토어에서 다운로드 할 수 있다.

    메몬 memon - Apps on Google Play

    • 함께 먹은 사람(주소록 기반)과 총 비용을 기록해서 사용할 수 있다.
    • 내가 돈을 낸 사람이라면 돈을 입금해달라는 알림 푸시를 5회까지 보낼 수 있고, 돈을 내야하는 사람이라면 입금을 했으니 확인해달라는 알림 푸시를 보낼 수 있다.

Back-end

  • 이 프로젝트에서 혼자 백엔드를 담당했다.
  • 라우터로 url을 분기해서 클라이언트를 위한 API를 만들었다.
  • AWS의 EC2를 사용해 서버를 구축했고, DB는 RDS로 사용했다.
  • PostgreSQL을 Sequelize ORM을 이용해 모델과 컨트롤러를 만들었다.
  • 구현한 부분들 중에서 중요하게 생각하는건 트랜잭션이다.
    • 트랜잭션을 이용하여, Pricebook이라는 테이블에 로우를 생성하고, Payment 테이블에 여러 로우들을 생성하고 싶은데 중간에 에러가 발생한다면 그 전의 것들을 다 롤백하고, 모두 정상적으로 동작했다면 커밋하도록 했다.
sequelize
        .transaction(t => {
          return Pricebook.create(
            { ...req.body.priceBook },
            { transaction: t }
          ).then(pricebook => {
            pricebookId = pricebook.id;
            const promises = [];

            for (let i = 0; i < req.body.participant.length; i++) {
              const newPromise = Payment.create(
                {
                  bossId: user.id,
                  participantId: req.body.participant[i].id,
                  pricebookId: pricebook.id,
                  isIn: req.body.participant[i].isIn,
                  isPayed: false
                },
                { transaction: t }
              );
              promises.push(newPromise);
            }

            return Promise.all(promises);
          });
        })
        .then(result => {
          res.send({ pricebookId });
        })
        .catch(err => {
          res.status(400).send({ msg: err.name });
        });

배운점, 느낀 점

  • 타입스크립트를 사용했는데 타입을 지정해줌으로써 실행하기 전에 미리 에러를 잡을 수 있다는 것을 많이 느꼈다.
  • 자동 배포나 보안, 로깅 등의 필요성을 많이 느꼈고, 아쉽다. 다음에는 젠킨스를 이용해 배포를 자동화해보고 싶다. 또한 에러도 로깅하는 툴을 사용해서 관리하고 싶다.