오픈 소스 프로젝트를 분석을 해보려 합니다.
목적
분석을 통한 목표는
1. nestjs에서의 보편적인 디렉토리 구조는 어떻게 구성하는지
2. 환경변수 관리 방법
3. 코드 설계
위 세가지 사항에 대한 학습입니다.
프로젝트 선정 조건
그러므로 선정할 프로젝트의 조건은
1. nestjs기반의 백엔드 프로젝트
2. 어느정도 신뢰성을 가지고있는 프로젝트(github의 오픈소스 중 star, fork의 갯수가 많은 프로젝트를 선정)
3. 최근에도 꾸준히 관리가 되고 있는 프로젝트
4. 개발 문서 작성이 잘 되어있는 프로젝트
프론트엔드 프로젝트는 유명한 프로젝트들도 많고 쉽게 찾을 수 있지만
백엔드 프로젝트는 여러가지 이유로 실제 서비스 프로젝트는 찾기 어려웠고
그러던중 nestjs-boilerplate라는 이름의 프로젝트를 찾았습니다.
그리고 오픈프로젝트를 찾을때는 https://www.reddit.com/ 레딧에서 검색하시는게 더 편했습니다.
nestjs-boilerplate
이름에서도 알 수 있듰이 nestjs를 기반으로 개발된 백엔드 보일러플레이트입니다.
프론트 프로젝트도 함께 개발되어있지만 해당 저장소는 백엔드 소스만 취급하며 일단 백엔드 저장소만 분석할 예정입니다.
- 보일러플레이트란?
컴퓨터 프로그래밍에서 보일러플레이트 또는 보일러플레이트 코드라고 부르는 것은 최소한의 변경으로 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드를 말한다.
간단하게 아래와 같은 기능을 지원합니다.
- Database. TypeORM과 Mongoose 지원
- Seeding.
- Config Service (@nestjs/config).
- 메일링 서비스 (nodemailer).
- 이메일 기반 로그인 및 회원가입
- 소셜 로그인(Apple, Facebook, Google, Twitter).
- 관리자 및 사용자 role분할
- 국제화/번역 (I18N) (nestjs-i18n).
- 파일 업로드. 로컬 및 Amazon S3 drivers 지원
- Swagger를 통한 api문서.
- E2E and units tests.
- Docker.
- CI (Github Actions).
도커 컨테이너 구성
각 항목을 간단히 설명하면
- Nestjs : 해당 프로젝트에 사용한 서버 프레임워크
- PostgreSQL : 해당 프로젝트에서 사용한 RDBMS
- Adminer : 데이터베이스 관리 도구로 Docker Hub의 이미지를 사용해 컨테이너 구축
- maildev : 로컬환경에서 이메일을 보낼 수 있는 smtp서버 및 인터페이스
디렉터리 구조 도식화
아래는 nestjs-boilerplate 프로젝트의 소스트리입니다.
여러가지 디렉터리와 파일이 많지만 저는 src, docs, docker관련 파일들 위주로 살펴보게될겁니다.
├── CODE_OF_CONDUCT.md
├── Dockerfile
├── LICENSE
├── Procfile
├── README.md
├── docker-compose.ci.yaml
├── docker-compose.yaml
├── docs
│ ├── auth.md
│ ├── database.md
│ ├── file-uploading.md
│ ├── installing-and-running.md
│ ├── introduction.md
│ ├── readme.md
│ └── serialization.md
├── e2e.Dockerfile
├── env-example
├── maildev.Dockerfile
├── nest-cli.json
├── package-lock.json
├── package.json
├── renovate.json
├── src
│ ├── app.module.ts
│ ├── auth
│ ├── auth-apple
│ ├── auth-facebook
│ ├── auth-google
│ ├── auth-twitter
│ ├── config
│ ├── database
│ ├── files
│ ├── home
│ ├── i18n
│ ├── mail
│ ├── mailer
│ ├── main.ts
│ ├── roles
│ ├── session
│ ├── social
│ ├── statuses
│ ├── users
│ └── utils
├── startup.ci.sh
├── startup.dev.sh
├── test
│ ├── admin
│ ├── jest-e2e.json
│ ├── user
│ └── utils
├── tsconfig.build.json
├── tsconfig.json
└── wait-for-it.sh
오픈 소스 프로젝트를 분석하기 위한 프로젝트 선정했습니다.
실제 서비스하는 프로젝트는 아니지만 star, fork 갯수도 많고 docs가 잘 구성되어있고 디렉터리 구조도 잘 잡혀 있다고 생각하는 프로젝트를 선정해서 만족고 있습니다.
이어서 프로젝트 실행, DB스키마 분석, API분석 등의 단계를 따라 진행할 예정입니다 :)
ps 아래는 오픈 소스를 분석하기 위해 참고했던 포스팅 들입니다.
'etc' 카테고리의 다른 글
오픈소스 분석하기(2) - 프로젝트 실행하기 (1) | 2024.01.03 |
---|---|
https (0) | 2023.07.01 |
퍼페티어(puppeteer)사용하여 크롤링 하기 (1) | 2023.03.12 |
인증과 인가 (0) | 2022.07.24 |
OOP(객체 지향 프로그래밍)이란? with typescript (0) | 2022.05.29 |