토이 프로젝트 일지 3 : 클라우드 스토리지 서비스를 제공하는 Nodejs 서버 만들기
1. 시작 계기
이번 프로젝트는 앞선 프로젝트들보다 큰 규모의 복잡한 프로그램들을 어떻게 체계적으로 설계할 수 있는지를 학습하는 것을 목표로 시작하게 되었다. 필자는 Dropbox 를 주로 애용하고 있어서, 이쪽 서비스에 대해서 자세히 알고 있어서 Dropbox의 필수 기능들을 구현해보는 방향으로 프로젝트를 시작하게 되었다. 개발 기간은 약 3달 정도로 잡았으며, 다른 분과 협업을 통해서 제작했다. 협업에 참여해주신 lucky6030님에게는 깊은 감사의 말씀을 드린다.
2. 프로젝트 개요
가. 프로젝트 소개
1. 프로젝트 유형: 팀 토이 프로젝트(총 2명)
2. 구현 서비스 : 클라우드 스토리지 서비스
3. 개발 환경 : replit(WEB IDE)
4. 구동 환경 : linux
5. 활용 기술
- 프론트 엔드 : bootstrap 4
- 백엔드 : Nodejs-Express, Firebase
> Firebase의 인증 서비스, 데이터베이스 서비스, 스토리지 서비스를 이용했다.
6. 개발 기간: 2023.1.11 ~ 2023.3.2
7. 담당 역할: 팀장(일정 관리, 작업 분배, 백엔드 및 프론트엔드 개발, 코드 평가 및 통합 작업)
나. 프로젝트 목표
큰 규모의 프로그램을 어떻게 체계적으로 설계할 수 있는지 이해하고, 다른 분들과 협업할 경우 어떻게 하면 충돌 없이 업무를 효율적으로 분배할 수 있는지 학습하는 것을 목표로 했다.
3. 프로젝트 구현
가. 사이트 구조
사이트들은 Main을 중심으로 총 5개의 사이트로 나눠서 작업했다.
- Main : 클라우드 서비스에서 가장 핵심적인 기능들인 파일 업로드 & 다운로드 & 공유 기능들을 제공
- Sign In : 일반 로그인 & 구글 로그인 기능을 제공
- Sign Up : 회원가입 기능을 제공
- File Info : 클라우드에 업로드된 파일 내용을 제공
- File Share : 사용자가 공유한 링크와 연관된 파일 내용을 제공
나. 서버측 구현
이번에도 저번 프로젝트와 유사하게 설계 > 구현 > 리팩토링을 합쳐서 하나의 사이클로 만들어서 반복하는 방식으로 점진적으로 계층적 설계가 만들어지도록 만들었다.
- REST API ROUTER : 클라이언트 요청 시 가장 처음 마주하게 되는 부분이며, 핵심 서비스를 담당
- FIRE BASE SERVICE : 비즈니스와 연관된 파이어베이스 관련 서비스들을 모아둬서 일관성을 향상
- FIRE BASE API : 파이어베이스 각각의 서비스 이용에 대한 일관성 있는 인터페이스를 제공
- BASE MODULE : 기본적인 구현에 필요한 로직들을 각각의 모듈들로 분리해줌
다. 클라이언트측 구현
- INTERFACE : 클라이언트 마주하게 되는 UI 부분
- CORE MODULE : UI와 가장 밀접하게 연관되었으며, UI 관련 핵심 서비스를 담당
- REST API : 서버에 대한 일관성 있는 인터페이스를 제공
- BASE MODULE : 기본적인 구현에 필요한 로직들을 각각의 모듈들로 분리해줌
라. 디렉토리 다운로드 기능 구현
이 프로젝트의 가장 복잡한 부분은 SSE 통신을 이용해서 실시간으로 진행률을 클라이언트 측에게 표시 시키면서 클라우드상에 업로드된 디렉토리를 다운로드하는 로직이다. 이러한 로직은 그림 7과 같은 순서도로 요약할 수 있다.






