프로젝트
파이널 프로젝트 'MEMON'
grin-quokka
2019. 12. 29. 19:33
-
간단한 프로젝트 설명 바로가기
프로젝트 '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 });
});
배운점, 느낀 점
- 타입스크립트를 사용했는데 타입을 지정해줌으로써 실행하기 전에 미리 에러를 잡을 수 있다는 것을 많이 느꼈다.
- 자동 배포나 보안, 로깅 등의 필요성을 많이 느꼈고, 아쉽다. 다음에는 젠킨스를 이용해 배포를 자동화해보고 싶다. 또한 에러도 로깅하는 툴을 사용해서 관리하고 싶다.