NestJS 초기 세팅(mysql& Neo4j)

Jeong Choi(최현정)·2023년 9월 11일
0

1. Nest 프로젝트를 생성해보자

1) 가장 먼저, nest 프로젝트를 만들기 위해서는
npm i -g @nestjs/cli 명령어를 터미널 창에 입력해주세요.
명령어가 먹히지 않을 경우, 맨 앞에 sudo를 붙여주세요.
이제 프로젝트를 생성 할 준비가 다 되었습니다!

2) 자신이 작업할 디렉토리에 이동하여 nest new를 터미널에 입력합니다.

➜  Nest nest new
⚡  We will scaffold your app in a few seconds..

3) 명령어를 입력하면 What name would you like to use for the new project? 가 뜨는데
자신이 원하는 프로젝트명을 입력합니다. 저는 AndYou_Backend 라고 하겠습니다.
➜ ? What name would you like to use for the new project? AndYou_Backend

4) 프로젝트명을 입력하면 Which package manager would you ❤️ to use?
가 뜨면서 어떤 패키지매니저를 사용할꺼나고 묻는데, 저는 npm으로 프로젝트를 진행하겠습니다.

➜ ? Which package manager would you ❤️  to use? npm
CREATE and-you_backend/.eslintrc.js (663 bytes)
CREATE and-you_backend/.prettierrc (51 bytes)
CREATE and-you_backend/README.md (3340 bytes)
CREATE and-you_backend/nest-cli.json (171 bytes)
CREATE and-you_backend/package.json (1956 bytes)
CREATE and-you_backend/tsconfig.build.json (97 bytes)
CREATE and-you_backend/tsconfig.json (546 bytes)
CREATE and-you_backend/src/app.controller.spec.ts (617 bytes)
CREATE and-you_backend/src/app.controller.ts (274 bytes)
CREATE and-you_backend/src/app.module.ts (249 bytes)
CREATE and-you_backend/src/app.service.ts (142 bytes)
CREATE and-you_backend/src/main.ts (208 bytes)
CREATE and-you_backend/test/app.e2e-spec.ts (630 bytes)
CREATE and-you_backend/test/jest-e2e.json (183 bytes)

▹▹▸▹▹ Installation in progress... ☕
Thanks for installing Nest 🙏

위의 과정을 잘 따라오셨다면 nest 프로젝트의 기본 설치까지 완료된 상황입니다!

프로젝트가 있는 디렉토리 터미널에 code . 을 하시면 vscode가 열리게 됩니다.

이제 본격적으로 나머지 세팅을 시작해보겠습니다.

2. 프로젝트에 필요한 의존성들을 설치해보자

1) DB는 Mysql을 사용합니다. TypeORM도 사용하기 위해서 아래와 같은 명령어를 터미널 창에 입력해주세요.
npm install @nestjs/typeorm typeorm mysql2 (설치가 안되면 sudo를 붙여주세요!)
mysql2, TypeORM이 설치되었습니다.

❓ mysql vs mysql2

여기서 의문점이 듭니다. mysql과 mysql2이 뭐가 다르길래 2버전을 설치하지 라는 생각이 들 수 있습니다.
가장 중요한 차이는 바로 async/await 구문입니다.
mysql은 기본적으로 async/await 구문이 지원되지 않아 따로 모듈을 설치해야 하지만,
mysql2async/await 인터페이스가 내장되어 있어서 편리하게 사용할 수 있습니다.

3. Docker로 nest서버와 Mysql, Neo4j를 띄워보자(feat.Nodemon)

1) Dockerfile을 생성합니다. (루트경로)

FROM node:15 

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

RUN npm install -g nodemon

COPY . .

EXPOSE 8080

CMD ["nodemon", "src/main.ts"]

// node 15버전을 사용했습니다.

2) 환경변수를 담을 .env 파일을 작성합니다. (루트경로)

🗣️ .env 파일은 꼭 gitIgnore 파일에 추가해주세요! 외부로 노출되면 곤란합니다

DB_HOST=
DB_PORT=
DB_USER=
DB_PASSWORD=
DB_NAME=
MYSQL_ROOT_PASSWORD=
NEO4J_AUTH=

// 비밀입니다^^

3) docker-compose.yml 파일을 작성합니다. (루트경로)

version: '3'

services:
  nest:
    container_name: And-You-Backend
    image: nest
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - db
      - neo4j
    environment:
      - DB_HOST=${DB_HOST}
      - DB_PORT=${DB_PORT}
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_NAME=${DB_NAME}
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules

  db:
    container_name: mysql
    image: mysql:8.0
    env_file:
      - .env
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    volumes:
      - db-data:/var/lib/mysql
    ports:
      - 3306:3306

  neo4j:
    container_name: neo4j
    image: neo4j
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=${NEO4J_AUTH}
    volumes:
      - neo4j-data:/data
      - neo4j-logs:/logs
      - neo4j-import:/var/lib/neo4j/import
      - neo4j-plugins:/plugins

volumes:
  db-data:
  neo4j-data:
  neo4j-logs:
  neo4j-import:
  neo4j-plugins:

이제 docker-compose up —build 를 터미널에 입력하시면

docker로 Nest서버와 Mysql, Neo4j를 실행시킬 수 있습니다.

참고로, nest서버는 기본적으로 포트 3000번으로 되어있기때문에 8080포트로 바꾸실려면 아래 사진처럼 main.ts에서 app.listen(3000)을 app.listen(8080)으로 바꾸셔야 합니다.

profile
Node와 DB를 사랑하는 백엔드 개발자입니다:)

0개의 댓글