꼬꼬마 블로그

꼬꼬마의 기술 블로그

우아한 테크캠프 2주차 과제를 완료했습니다 (1주가 지났지만 지금이라도 회고를 해보려고합니다)

과제

이번 과제는 우아마켓 (유사 당근마켓)을 개발하는것 이었습니다. 상품 등록, 동네 설정, 채팅 기능이 있었고 FE쪽에선 슬라이드 애니메이션으로 화면이 전환되는 효과를 주어야되었습니다.

 

async/await을 사용하지 않고 Promise 패턴을 통해 개발해야한다고 하셨습니다. 그 외 Webpack & Babel을 통해 1%의 브라우져에서 동작하도록 브라우져 호환성을 신경썼어야 했고, 구현에 도움되는 라이브러리는 사용할 수 없었습니다.

 

어려웠던 점

구현내용이 시간에 비해 너무 많았기 때문에 코드 퀄리티에 많이 시간을 쏟지 못했던 것 같습니다. 팀원분도 기능에 조금 더 치중하셨기 때문에 저도 이번 기회에 기능에 조금 더 투자를 해보자고 생각했기때문입니다.

 

그나마 기능을 모두 구현했지만 코드 퀄리티는 많이 아쉽습니다.

 

또한 처음에 채팅에 SocketIOWebSocket을 사용할 수 없는 줄 알았습니다. (WebSocket은 IE 10 미만의 버전에서는 지원하지 않았기 때문)
그래서 Interval Fetch 방식을 통해 폴링을 구현했습니다.

 

이 외에도 읽음 처리를 하기 위해 읽음 테이블을 만들어 사용자가 채팅을 읽을때마다 API를 호출하여 해당 테이블을 갱신해주었습니다.

구현 내용

AWS EC2 + AWS S3 를 통해 배포를 진행했습니다

구현에 특이점은 아래와 같습니다.

BaseQuery

개발 당시 sequelize를 통해 DB에 접근을 했습니다. 하지만 ORM을 사용할 수 없게 되었고 최소한의 변경으로 sequelize를 덜어내고자 최대한 비슷한 인터페이스로 개발을 했습니다. 그렇게 BaseQuery를 개발했고 쉽게 대체할 수 있었습니다.

 

해당 추상 클래스를 상속받는 클래스는 map이란 메서드를 구현함으로 RowDataPacket이라는 MySQL의 응답 데이터를 쉽게 도메인으로 변경할 수 있었습니다.

 

이번 과제를 진행하면서 너무 기능이 많다고 생각이 들었고 기능을 구현하는 것도 좋지만 조금 더 내가 성장할 수 있게 팀원과 꼼꼼히 코드리뷰도 하며 개발하는 것도 좋겠다고 생각했습니다.