Skip to content

REST API Backend using NestJS, Prisma, PostgreSQL, and so on.

License

Notifications You must be signed in to change notification settings

hubts/moderate-nestjs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

30 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Nest Logo

Moderate REST API Backend

πŸ‘€ Overview

moderate-nestjs λŠ” NestJS ν”„λ ˆμž„μ›Œν¬λ₯Ό 기반으둜 ν•˜μ—¬ μ—¬λŸ¬ κΈ°λŠ₯듀을 κ΅¬ν˜„ν•œ λ°±μ—”λ“œ ν…œν”Œλ¦Ώ(Template) μž…λ‹ˆλ‹€. 이미 μš°λ¦¬κ°€ μ‚¬μš©ν•  수 μžˆλŠ” 유λͺ…ν•˜κ³  λ‹€μ–‘ν•œ ν…œν”Œλ¦Ώλ“€μ΄ μžˆμ§€λ§Œ, 이 ν…œν”Œλ¦Ώμ€ 쒀더 가볍고 직관적인 κΈ°λŠ₯듀을 μΆ”κ΅¬ν•˜μ—¬ λˆ„κ΅¬λ‚˜ μžμ‹ μ˜ μž…λ§›λŒ€λ‘œ μˆ˜μ • 및 보완할 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 특히, NestJSλ₯Ό 일반적으둜 μ΄ν•΄ν•œ μˆ˜μ€€μ˜ 개발자λ₯Ό λŒ€μƒμœΌλ‘œ, λ„ˆλ¬΄ 비약적인 λ ˆλ²¨μ—…λ³΄λ‹€λŠ” μ λ‹Ήν•œ(Moderate) μˆ˜μ€€μœΌλ‘œ κ°œμ„ λœ κΈ°λŠ₯듀을 ν†΅ν•˜μ—¬, λ°±μ—”λ“œ ꡬ좕에 λŒ€ν•œ μ•½κ°„μ˜ λΆˆνŽΈν•¨λ“€μ„ ν•΄μ†Œν•˜λŠ” 데에 κ·Έ λͺ©μ μ΄ μžˆμŠ΅λ‹ˆλ‹€. 결둠적으둜, 이 ν…œν”Œλ¦Ώμ„ 톡해 쒀더 쉽고 λΉ λ₯΄κ²Œ NestJS λ°±μ—”λ“œ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 것이 주된 λͺ©ν‘œμž…λ‹ˆλ‹€.

이 ν…œν”Œλ¦Ώμ—μ„œλŠ”,

  • NestJS(μ΄ν•˜ Nest) ν”„λ ˆμž„μ›Œν¬λ₯Ό μ΄μš©ν•˜μ—¬ API μ„œλ²„λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.
  • PostgreSQL(μ΄ν•˜ Postgres) λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΅¬μΆ•ν•©λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°κ²°ν•˜λŠ” ORM으둜써, Prisma λ₯Ό μ΄μš©ν•©λ‹ˆλ‹€.
  • κ΅¬ν˜„λœ Nest 및 Postgres λŠ” Docker Container 둜 μ‹€ν–‰, λ°°ν¬λ©λ‹ˆλ‹€.

TBD: Postgres λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€μ°°ν•˜κΈ° μœ„ν•œ μΌμ’…μ˜ PG Admin으둜써, Hasura (GraphQL Engine)λ₯Ό μ—°λ™ν•˜λŠ” 것에 λŒ€ν•œ λ¬Έμ„œκ°€ μ—…λ°μ΄νŠΈλ  μ˜ˆμ •μž…λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„μ€ 이 ν…œν”Œλ¦Ώμ„ 톡해, μ—¬λŸ¬λΆ„λ§Œμ˜ λ°±μ—”λ“œ μ‹œμŠ€ν…œμ„ 보닀 κ°„κ²°ν•˜κ³  μ‰½κ²Œ μ‹œμž‘, κ΅¬ν˜„, 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”© Background

λ³Έ 문단은 ν…œν”Œλ¦Ώμ„ κ΅¬μ„±ν•˜λŠ” Nest 와 Postgres 에 λŒ€ν•œ μ•½κ°„μ˜ 배경지식을 μ„€λͺ…ν•©λ‹ˆλ‹€. 이미 μ•Œκ³  μžˆλŠ” 지식이라면 κ±΄λ„ˆ 뛰어도 λ¬΄λ°©ν•©λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„μ΄ 개발자라면, λ°±μ—”λ“œλ₯Ό 처음 μ ‘ν•˜λ”λΌλ„, λ°±μ—”λ“œ μ‹œμŠ€ν…œμ˜ 졜초 ꡬ성인 API μ„œλ²„μ™€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ성을 μ•Œκ³  μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 이 ν…œν”Œλ¦Ώμ€ λ”± κ·Έ μˆ˜μ€€μ˜ λ°±μ—”λ“œ μ‹œμŠ€ν…œμ„ ꡬ성할 λ•Œ 도움을 μ£ΌκΈ° μœ„ν•΄ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이 ν…œν”Œλ¦Ώμ˜ λ°±μ—”λ“œ μ‹œμŠ€ν…œμ€ 크게 Nest μ„œλ²„μ™€ Postgres λ°μ΄ν„°λ² μ΄μŠ€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Postgres λ°μ΄ν„°λ² μ΄μŠ€λŠ” 영ꡬ적인(Persistent) 데이터λ₯Ό μ €μž₯ν•  수 μžˆλ„λ‘ ν•˜κ³ , Nest μ„œλ²„λŠ” μ™ΈλΆ€ μš”μ²­μ— λŒ€ν•˜μ—¬ μš°λ¦¬κ°€ μ›ν•˜λŠ” λ‘œμ§λ“€μ„ 톡해 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  κ΄€λ¦¬ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

NestJS

Nest λŠ” κΈ°μ‘΄ JavaScript둜 κ΅¬ν˜„ν•˜λŠ” Node.jsλ₯Ό, TypeScript μ„œλ²„λ‘œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ 개발된 ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. Type을 λͺ…μ‹œν•¨μœΌλ‘œμ¨ 쒀더 μ•ˆμ „ν•˜κ³  κ²¬κ³ ν•œ 코딩을 ν•  수 μžˆλ‹€λŠ” μž₯점뢀터, OOP (Object Oriented Programming), FP (Functional Programming) λ“±, κΈ°μ‘΄ λ°±μ—”λ“œ ν”„λ ˆμž„μ›Œν¬λ‘œ 유λͺ…ν•œ JAVA SpringBoot의 κΈ°λŠ₯듀을 μœ μ‚¬ν•˜κ²Œ κ΅¬ν˜„ν•œ μž₯점듀이 μ‘΄μž¬ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. Nest 에 λŒ€ν•˜μ—¬ 쒀더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄ κ³΅μ‹λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

이 ν…œν”Œλ¦Ώμ—μ„œ Nest λŠ” λ‹€μŒκ³Ό 같은 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • Nest μ„œλ²„λŠ” REST API μ„œλ²„λ‘œ κ΅¬ν˜„λ˜μ–΄, ν΄λΌμ΄μ–ΈνŠΈμ˜ μ™ΈλΆ€ μš”μ²­μ„ μˆ˜μ‹ ν•˜κ³  μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • Nest μ„œλ²„λŠ” μ—¬λŸ¬λΆ„μ˜ 데이터 도메인을 κ΄€λ¦¬ν•˜κ³  μ£Όμš” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ“€μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • Nest μ„œλ²„λŠ” JWT λ°œκΈ‰ 및 검증을 기반으둜, API에 λŒ€ν•œ μœ μ € κΆŒν•œ(Permission)을 μ œμ–΄ν•©λ‹ˆλ‹€.

Postgres

Postgres λŠ” μ˜€ν”ˆμ†ŒμŠ€ 기반의 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ(RDBMS: Relational Database Management System)μž…λ‹ˆλ‹€. λ¬Όλ‘ , μ—¬λŸ¬λΆ„μ΄ λ‹€λ£¨λŠ” μ‹œμŠ€ν…œμ΄λ‚˜ λͺ©μ , 상황에 따라 MySQLκ³Ό 같은 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ΄μš©ν•  μˆ˜λ„ μžˆμ§€λ§Œ, Postgres λ˜ν•œ μΆ©λΆ„νžˆ λ§Žμ€ μ˜ˆμ‹œλ“€μ΄ μ‘΄μž¬ν•˜κ³  λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€κ³Όμ˜ 연동 및 지원 μΈ‘λ©΄μ—μ„œ λ‹€μ–‘ν•œ μž₯점듀을 가지고 있기 λ•Œλ¬Έμ—, 이 ν…œν”Œλ¦Ώμ—μ„œλŠ” Postgres λ₯Ό μΆ”μ²œν•©λ‹ˆλ‹€. 특히, μ˜€ν”ˆμ†ŒμŠ€λ‘œ 인해 κΈ°μˆ μ— λŒ€ν•œ 지속적인 μ—…λ°μ΄νŠΈ 지원이 있고, λ°μ΄ν„°λ² μ΄μŠ€ 무결성과 신뒰성을 보μž₯ν•˜λŠ” ACID Compatibility, JSON 및 JSONB νƒ€μž… μ§€μ›μ˜ νŠΉμ„±λ“€μ΄ ν•„μš”ν•˜λ‹€λ©΄ Postgres 의 μ‚¬μš©μ„ 적극 ꢌμž₯ν•©λ‹ˆλ‹€. Postgres 에 λŒ€ν•˜μ—¬ 더 νŒŒμ•…ν•˜κ³  μ‹Άλ‹€λ©΄ κ³΅μ‹λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

이 ν…œν”Œλ¦Ώμ—μ„œ Postgres λŠ” λ‹€μŒκ³Ό 같은 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • Postgres λŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μž…λ‹ˆλ‹€.
  • Nest μ„œλ²„λŠ” Postgres λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•˜μ—¬ 데이터λ₯Ό μ €μž₯, μˆ˜μ •, 쑰회, μ‚­μ œν•©λ‹ˆλ‹€.

πŸ“ Skills

Key Point Use / Implementation / Connection
Framework NestJS
Language TypeScript
Package Manager yarn
Architecture Monolith, CQRS
Documentation Swagger
ORM Prisma
Database Postgres
Deployment Dockerlized

😎 Implementation Features

  • Architecture from CQRS Pattern (but, not event-driven)
  • Focusing on Code Sharing for Collaboration
  • Swagger Documentation
  • Health Checker & Throttler
  • Cache on Database
  • Custom Logging System
  • JWT Authentication
  • User/Auth Examples
  • Linting and CI test by Husky
  • Git version management by commitizen
  • Docker Versioning and Deployment

πŸš€ Start

1. Prerequisites

Docker 엔진을 이미 μ„€μΉ˜ν•˜μ˜€κ³  docker-compose λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λ©΄, 이 단계λ₯Ό μŠ€ν‚΅ν•˜μ„Έμš”.

μš°λ¦¬λŠ” Nest 와 Postgres μ„œλ²„λ₯Ό Docker Container 둜 배포 및 μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— docker λͺ…령어와 docker-compose λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

Docker λŠ” λ°μŠ€ν¬ν†± μ•± ν˜•νƒœλ‚˜ 엔진 ν˜•νƒœλ‘œ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ν•˜μ—¬ Docker λ₯Ό μ„€μΉ˜ν•  수 μžˆλŠ” λͺ‡κ°€μ§€ λͺ…λ Ήμ–΄λ₯Ό docker-installΒ λ¬Έμ„œμ— μž‘μ„±ν•΄ λ‘μ—ˆμŠ΅λ‹ˆλ‹€. Docker μ„€μΉ˜κ°€ μ™„λ£Œλ˜λ©΄ λŒ€λΆ€λΆ„μ˜ 경우 docker-compose λͺ…λ Ήμ–΄κ°€ ν•¨κ»˜ μ„€μΉ˜λ©λ‹ˆλ‹€. λ§Œμ•½ ν•¨κ»˜ μ„€μΉ˜λ˜μ§€ μ•Šμ•˜λ‹€λ©΄, λ³„λ„λ‘œ μ„€μΉ˜ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

2. Cloning

이 ν…œν”Œλ¦Ώ λ ˆν¬μ§€ν† λ¦¬λ₯Ό Cloning ν•©λ‹ˆλ‹€:

$ git clone https://github.com/hubts/moderate-nestjs.git

3. Environment Settings

Nest 와 Postgres μ„œλ²„λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ λͺ‡κ°€μ§€ μ„ΈνŒ…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 μ„ΈνŒ…μ€ λŒ€λΆ€λΆ„ .env 에 ν•΄λ‹Ήν•˜λŠ” ν™˜κ²½λ³€μˆ˜ νŒŒμΌμ„ μž‘μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. Postgres 디렉토리와 ν˜„μž¬ Nest μ†ŒμŠ€μ½”λ“œ 디렉토리 κ²½λ‘œμ—μ„œ 각각 μ˜ˆμ‹œ 파일 .env.example νŒŒμΌλ“€μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

3.1. Postgres Setting

PostgresΒ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό Docker Container 둜 λ°°ν¬ν•˜κΈ° μœ„ν•΄ ν•΄λ‹Ή λ””λ ‰ν† λ¦¬μ˜ λ¬Έμ„œλ₯Ό ν™•μΈν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€. ν•΄λ‹Ή λ¬Έμ„œμ˜ 단계λ₯Ό λ”°λ₯΄λ©΄, λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ μ„ΈνŒ…ν•œ λ’€ μ‹€ν–‰ν•  수 있게 λ©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‹€ν–‰ν•œ 정보λ₯Ό 기반으둜 Prisma λ₯Ό μœ„ν•œ μ•„λž˜ DATABASE_URL 을 κ΅¬μ„±ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

DATABASE_URL="postgresql://${username}:${password}@${localhost}:${5432}/${dbname}?schema=${schema}"

${λ³€μˆ˜λͺ…} 에 ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“  값듀을 μ‹€μ œ κ°’μœΌλ‘œ λŒ€μΉ˜ν•˜μ—¬ URL을 μ™„μ„±ν•©λ‹ˆλ‹€.

3.2. Nest Setting

Nest μ„œλ²„μ— λŒ€ν•œ μ„ΈνŒ…μ€ μ˜ˆμ‹œ ν™˜κ²½λ³€μˆ˜ .env.example νŒŒμΌμ„ λ³΅μ‚¬ν•˜μ—¬ .env νŒŒμΌμ„ μƒμ„±ν•œ λ’€, ν•„μš”ν•œ ν™˜κ²½λ³€μˆ˜λ“€μ„ μž‘μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ„€μ •ν•΄μ•Ό ν•˜λŠ” ν™˜κ²½λ³€μˆ˜λ“€μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€:

  • ENV : μ„œλ²„ ν™˜κ²½(둜컬, 개발, 운영 λ“±)을 κ²°μ •ν•©λ‹ˆλ‹€. μ΄λŠ” Logging 레벨 등에 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

  • PORT : μ„œλ²„ Listening ν¬νŠΈλ²ˆν˜Έμž…λ‹ˆλ‹€.

  • EXTERNAL_ENDPOINT : μ„œλ²„μ— μ ‘κ·Όν•˜κ²Œ λ˜λŠ” μ™ΈλΆ€ μ—”λ“œν¬μΈνŠΈλ₯Ό μ˜λ―Έν•˜λ©°, Swagger OpenAPI의 μ„œλ²„ URL둜 μ΄μš©λ©λ‹ˆλ‹€. NestJSμ—μ„œ μ œκ³΅ν•˜λŠ” ν™˜κ²½λ³€μˆ˜ λŒ€μΉ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ 적용되면 ${λ³€μˆ˜} 문법을 μ‚¬μš©ν•  수 μžˆμœΌλ‚˜, λ§Œμ•½ μ˜¬λ°”λ₯΄κ²Œ μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 직접 μž‘μ„±ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • DATABASE_URL* : Prisma κ°€ 연동할, μ‹€ν–‰λœ λ°μ΄ν„°λ² μ΄μŠ€μ˜ URL(μ—°κ²°μ£Όμ†Œ)λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.

  • THROTTLER_* : Throttler μ„€μ •μž…λ‹ˆλ‹€. 일정 μ‹œκ°„(TTL) 내에 ν—ˆμš©ν•˜λŠ” μ΅œλŒ€ μš”μ²­ 개수(Limit)λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

  • JWT_* : JWT μ„€μ •μž…λ‹ˆλ‹€ (μ΄μ–΄μ„œ μ„€λͺ…ν•©λ‹ˆλ‹€).

Nest μ„œλ²„λŠ” JWT Authentication(인증)을 톡해 μœ μ € κΆŒν•œ μ œμ–΄λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. Nest μ„œλ²„λŠ” μ ‘κ·Ό 토큰 (Access token)을 λ°œν–‰ν•˜κ³ , μ™ΈλΆ€ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— λ™λ΄‰λœ 토큰을 κ²€μ¦ν•©λ‹ˆλ‹€. 이 과정에 ν•„μš”ν•œ ν‚€ μŒμ„ ν™˜κ²½λ³€μˆ˜λ‘œ μž…λ ₯ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ³„λ„μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•΄λ„ λ˜μ§€λ§Œ, 이 ν…œν”Œλ¦Ώμ—μ„œλŠ” RSA256 을 ꢌμž₯ν•©λ‹ˆλ‹€. ν‚€ μŒμ„ μƒμ„±ν•˜κΈ° μœ„ν•΄ μ•„λž˜ 슀크립트λ₯Ό μ‹€ν–‰ν•˜μ„Έμš”:

$ ./script/util/jwt-key-generation.sh

μƒˆλ‘œμš΄ RSA ν‚€ 쌍이 μƒμ„±λ˜κ³  터미널에 좜λ ₯될 κ²ƒμž…λ‹ˆλ‹€. 좜λ ₯된 킀듀을 λ³΅μ‚¬ν•˜μ—¬ ν™˜κ²½λ³€μˆ˜ JWT_* 값듀에 μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.

4. Run

4.1. Run database

상기 문단을 톡해 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

4.2. Install dependencies

Nest μ„œλ²„ 싀행에 ν•„μš”ν•œ 쒅속성(νŒ¨ν‚€μ§€)듀을 μ„€μΉ˜ν•©λ‹ˆλ‹€:

$ yarn # or 'yarn install'

4.3. Prisma Sync

Nest μ„œλ²„ ν™˜κ²½λ³€μˆ˜ .env 파일의 DATABASE_URL ν™˜κ²½λ³€μˆ˜λ₯Ό μž‘μ„±ν•˜μ˜€κ³  쒅속성 μ„€μΉ˜λ₯Ό 톡해 prismaΒ νŒ¨ν‚€μ§€κ°€ μ„€μΉ˜ν•˜μ˜€λ‹€λ©΄, PrismaΒ λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

$ yarn prisma [command]

처음 λ°°ν¬ν•œ λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” λ³„λ„μ˜ Schema 및 Table 이 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μ„œλ²„μ—μ„œ λ‹€λ£¨κ²Œ 될 Schema λŠ” prisma/schema.prisma νŒŒμΌμ„ μ‹œμž‘μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€. 초기 λΉ„μ–΄μžˆλŠ” μƒνƒœμ—μ„œ ν•΄λ‹Ή Schema λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— λ™κΈ°ν™”μ‹œν‚€κΈ° μœ„ν•΄ μ•„λž˜ λͺ…λ Ήμ–΄ μ΄μš©ν•©λ‹ˆλ‹€:

$ yarn prisma:sync

ν•΄λ‹Ή λͺ…λ Ήμ–΄μ—λŠ” NestΒ μ„œλ²„κ°€ ν•΄λ‹Ή Schema λ₯Ό 기반으둜 Table 정보λ₯Ό Type 으둜 받아듀일 수 있게 λ˜λŠ”Β generate λͺ…령어와 λ°μ΄ν„°λ² μ΄μŠ€μ— ν•΄λ‹Ή Schema λ₯Ό λ°€μ–΄λ„£λŠ” db push λͺ…λ Ήμ–΄κ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

4.3. Run server

이제 μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό 톡해 Nest μ„œλ²„λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:

# Start
$ yarn start

# Start with watch mode (to debug)
$ yarn start:dev

Nest μ„œλ²„κ°€ μ‹€ν–‰λ˜κ³  각쒅 Log λ₯Ό 톡해 μ‹€ν–‰ κ²°κ³Όλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

4.4. Deployment

λ§Œμ•½ Docker Container 둜 Nest μ„œλ²„λ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•©λ‹ˆλ‹€:

$ yarn deploy

슀크립트λ₯Ό 톡해 μ„œλ²„μ˜ Docker Image λ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.

단, μ„œλ²„κ°€ Docker Container 둜 λ°°ν¬λ˜λŠ” 경우 ν™˜κ²½λ³€μˆ˜μ—μ„œ μ΄μš©ν–ˆλ˜ localhost κ°’ 등은 Container 간에 μ μš©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ 연동을 μœ„ν•˜μ—¬ μ™ΈλΆ€ Host μ£Όμ†Œλ₯Ό μ΄μš©ν•˜κ±°λ‚˜, Docker Container κ°„ Network λ₯Ό ν†΅μΌν•˜κ±°λ‚˜, host.docker.internal λ“± ContainerΒ μ£Όμ†Œ 연결을 μœ„ν•œ 섀정을 λ°˜λ“œμ‹œ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ’‘ Other Features

Git

이 ν…œν”Œλ¦Ώμ—λŠ” commitizen 을 μ΄μš©ν•˜μ—¬ ν˜•μƒκ΄€λ¦¬λ₯Ό ν•  수 μžˆλ„λ‘ 슀크립트 및 λͺ…λ Ήμ–΄κ°€ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

$ yarn git [version|patch|minor|major|...]

ν•΄λ‹Ή 슀크립트λ₯Ό ν™•μΈν•˜κ±°λ‚˜, μœ„ λͺ…λ Ήμ–΄λ₯Ό 톡해 ν˜•μƒκ΄€λ¦¬λ₯Ό 직접 μˆ˜ν–‰ν•΄ 보도둝 ν•©λ‹ˆλ‹€.

About

REST API Backend using NestJS, Prisma, PostgreSQL, and so on.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published