기술스택
NestJS
- TypeScript, ESLint, Prettier, Jest를 기본으로 설정해주어 프로젝트 설정에서의 불편함을 줄여줄 수 있습니다.
- NestJS는 모듈화, 의존성 주입 등의 구조가 정의되어 있기 때문에 자유도가 높은 Express에 비해 짧은 기간 아키텍처를 위해 고민하는 시간을 절약하고, 팀원간의 코드 스타일을 일관되게 유지할 수 있습니다.
- NestJS는 HTTP, 웹 소켓, 미들웨어, 가드 등 서버 동작에 필수적인 기능을 함께 포함해 제공합니다. 따라서 Express에서보다 의존성으로 인한 문제(모듈 호환성 문제, 버전 충돌 등)을 줄이고 개발에 집중할 수 있습니다.
MySQL
- 일기 서비스 특성 상 정형화된 데이터가 대부분이므로 RDB를 선택했습니다.
- 일기, 사용자 정보 등을 MySQL로 관리합니다.
Redis
- read/write가 많은 데이터는 MySQL에만 보관하는 것보다는 Redis에 저장하기로 결정했습니다.
- 기본적으로 조회 속도가 RDB보다 빠르기 때문에 인증 토큰을 저장하거나, read/write가 빈번히 발생하는 데이터를 저장하는데 유리하다고 생각했습니다.
Elasticsearch
- 검색 기능 개선을 위해서 엘라스틱서치를 사용합니다.
- 서비스의 특성 상 길이가 긴 일기 본문을 저장하고 해당 데이터를 사용해 검색 기능을 지원하는데, 사용자와 데이터가 많아질 수록 검색 성능이 떨어질 수 있다고 판단했습니다.
- 엘라스틱서치는 역색인 기반의 검색을 지원해 거의 실시간으로 전문 검색이 가능하고 MySQL의 LIKE, Full Text Index를 사용한 검색보다 더 빠른 검색 기능을 사용자에게 제공할 수 있습니다.
Swagger