사이드 프로젝트 개발기

Tasker·2023년 12월 28일
0

개발

목록 보기
4/4

자료


서론

  프론트엔드 개발자 6명이서 기획, 서버, DB, 프론트 모두 만든 스토리다. 비록, 사이드 프로젝트이지만 우아한형제들에서 프로젝트를 만들어가는 방식을 엿볼 수 있어서 감회가 새로웠다.


내용

  • 연차가 낮은 막내도 리드를 할 수 있다.
  • 본 글은 사업계획 형식으로 작성해보았다.

문제 인식(Problem)

  현재 우아한형제들의 프론트엔드 생태계는 아래와 같다.

  • 우아한형제들 프론트엔드 개발자 수 130+명
  • 운영중인 배민 서비스 10+개
  • 프론트엔드 레포지토리 수 300+개

많은 기술들이 파편화되어 있다.

해결방법(Solution)

  사내 기술을 한 곳에 모은다.

  • 개발자가 신기술을 도입하거나, 기술적 챌린지를 해야 할 때 쉽게 도움을 받을 수 있도록 한다. 사내 레포지토리의 정보와 컨트리뷰터 목록을 제공해서 '이 사람에게 찾아가면 되겠구나!' 라는 걸 알려준다.
  • 사내 기술 트렌드를 확인해 볼 수 있다.
  • 아키텍처를 고민할 때 참고할 수 있다.

성장가능성(Scale-Up)

  사이드 프로젝트이므로 생략한다. 사람들이 피드백 준 내용들을 반영해가며 성장한다.

조직(Team)

  사이드 프로젝트라서 막내가 리더를 경험해보기로 했다. 사내 동아리 형태로 모집된 프론트엔드 개발자 6명이서 기획, 서버, DB, 프론트 전부를 작업할 예정이며, 사내 디자이너 한 명을 추가로 구해서 7명이서 진행한다.


투입 시간 정하기

  주에 3~5시간 정도 투자하기로 한다. 사이드 프로젝트라서 빨리 만들어야 하고, 업무 외적으로 하는 작업이기 때문에 시간을 미리 확인하고 시작했다.

규칙 정하기

  그라운드룰, 테크트리, 컨벤션, 브랜치 전략 등을 정한다.

기술스택 정하기

  • Nest.js
    • FE 개발자들에게 익숙한 Node.js기반 + Typescript 기본 지원
    • 모듈식 아키텍처로, 재사용성 및 확장성 용이
    • 미들웨어, DB등의 기능을 기본으로 제공
  • Next.js
    • zero config를 지향
    • 일정 수준 컨벤션이 강제 + 문서와 생태계가 잘 갖춰져 있다.
    • 정적 사이트로 설계해서 SSG를 활용하기로 했다.

Batch Scheduler 서버 구성

  • 레포지토리 정보를 불러온다.
    • 퇴근 후 시간대에 cron job과 Gitlab API를 써서 사내 레포지토리를 불러 온다.
  • 라이브러리 정보를 불러온다.
    • 사내 프론트엔드 레포지토리에서 사용하는 npm 라이브러리 정보를 불러온다.
    • 추가 정보는 npm 레지스트리에서 불러온다.

서버 작업 중 발생했던 이슈들

  • 작업 중 Gitlab 서버가 터졌다.
    → timezone 문제(GMT+9) 때문에 업무 시간에 스케쥴러가 돌아서 부하가 발생했다.
    → job을 순차적으로 실행하도록 하고, 최근에 업데이트된 레포지토리만 긁어 오도록 개선해서 해결하였다.
  • CodeDeploy Failed
    → Entity에 신규 Column을 생성했지만, 운영DB에 추가 신청을 하지 않았다. (운영DB의 경우는 보안상 신청 후에 추가한다.)
    → 추적이 어려워서 규칙을 다듬어서 해결했다.

프론트 작업 중 발생했던 이슈들

  • 배포 이슈
    → CSR의 경우 ${root}/index.html 만 배포하면 되었는데, Next.js의 SSG는 빌드시 생성되는 N개의 정적 파일(index.html, 404.html, libraries.html, ...)에 대해서 처리해야 했다.
    → CloudFront의 Function을 사용해서 우회하는 방식으로 해결했다.
    → 그런데, 이게 SSG가 맞나? 의문이 들어서 각잡고 프로젝트를 검토해봤는데 getStaticPath, getStaticProps를 사용하지 않고 있었다. 사내 망은 분리되어 있어서 정책상 build할 때 data fetching이 막혀 있기 때문이었다.
    → 정적 사이트의 성능상의 이점 + 배포없이 업데이트할 수 있는 ISR로 변경했다.
    → 가만히 생각해보니, SSG를 쓸 필요가 없음을 알게 되었다. 이유는 아래와 같다.
    • Server API를 Client에서만 호출하고 있었다.
    • Client에서 Routing처리를 했다.
    • 사용자 인터랙션이 많은 동적 페이지였다.
    → 결국 CSR로 변경했다.
  • 더딘 작업 속도
    → 사이드프로젝트이다 보니, 작업이 너무 더뎠다.
    → 사내 공간을 대여해 workshop을 구성하고 하루종일 같이 작업하는 시간을 가졌고, 모일 때마다 많이 진전시킬 수 있었다.
    → 사소한 것 하나하나 다 여쭤보기보다는, 선택지를 좁혀주거나 어느정도는 리더가 결정해와야 했다.
profile
..ㅁ

0개의 댓글