Skip to content

백엔드 ‐ 기술적 판단 근거

ByeongIk Choi edited this page Dec 13, 2023 · 7 revisions

NestJS

  • 통일된 구조라서 역할이 명확하게 구분되어 있음.
  • Express에 비해 협업하기에 용이하고, 빠르게 개발할 수 있을 것 같아서 선택

JWT

  • 쿠키/세션 방식은 서버에서 사용자의 정보를 저장하여 상태를 관리해야 함
  • JWT는 토큰에 대한 유효성 검사만을 하면 되므로 서버의 확장성과 성능적인 측면에서 유리
  • 주로 웹 브라우저 환경에서 사용되고 관리는 쿠키/세션 방식 보다는 플랫폼간의 호환성이 높은 JWT가 적절하다고 판단
  • 다만 서버는 토큰의 탈취 여부를 제어할 수 없기 때문에, 추가적인 보안 정책이 필요함
  • 이를 위해 accessToken과 refreshToken을 나눠 사용하고, RTR 정책 도입 및 refreshToken 보안 강화 정책을 추가적으로 수행함

Nginx

  • HTTPS를 지원하기 위해, Nginx에서 SSL 설정
    • 기존에는 Application Server에서 SSL 설정 계획
    • Application Server는 Docker Container로 배포되기 때문에 인증서 파일을 도커 내부에 저장하면 안됨.
    • 따라서 Docker Volumes를 사용하여 컨테이너-서버간 SSL 인증서 파일을 공유하기로 결정
    • 그러나, Application Server에서 fs.readFileSync 사용 시 파일을 찾을 수 없다고 오류 발생
  • HTTP Request/Response에 gzip 압축을 적용해서 인바운드/아웃바운드 트래픽 용량 감소 가능
  • 네트워크 트래픽 제어를 위한 rate limiter의 역할도 수행

MongoDB

  • 상품 가격 변동 데이터를 저장하기 위한 데이터베이스로 MongoDB를 사용
  • vs MySQL
    • MySQL에 있는 외래키나 트랜잭션과 같은 특성 때문에 MongoDB의 쿼리 성능이 더 뛰어나다고 판단
  • vs TSDB
    • TSDB(TimeSeries Database)는 실시간으로 저장되는 시계열 데이터를 관리하는 데이터베이스
    • 상품 가격 변동 데이터는 10분 주기로 변화가 있을 때만 저장
    • 영구적으로 데이터를 보관해야 하기 때문에 특정 기간의 데이터를 저장하는 TSDB와 알맞지 않다고 판단

캐시

Container Registry

  • NCP(Naver Cloud Platform)에서 도커 이미지를 저장, 관리, 배포할 수 있는 서비스
  • 이미지를 private하게 보관할 수 있어서 보안상 유리
  • HTTP API V2를 지원해서 NCP 서버에서 이미지 pull 가능

Docker

  • Docker는 이미지로 컨테이너를 만들어서 배포하며, 각 컨테이너는 독립된 환경에서 동작
  • Host OS 상관없이 Docker와 이미지만 있으면 쉽게 서버를 배포 가능
Clone this wiki locally