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가 열리게 됩니다.
이제 본격적으로 나머지 세팅을 시작해보겠습니다.
1) DB는 Mysql을 사용합니다. TypeORM도 사용하기 위해서 아래와 같은 명령어를 터미널 창에 입력해주세요.
➜ npm install @nestjs/typeorm typeorm mysql2 (설치가 안되면 sudo를 붙여주세요!)
mysql2, TypeORM이 설치되었습니다.
여기서 의문점이 듭니다. mysql과 mysql2이 뭐가 다르길래 2버전을 설치하지 라는 생각이 들 수 있습니다.
가장 중요한 차이는 바로 async/await 구문입니다.
mysql은 기본적으로 async/await 구문이 지원되지 않아 따로 모듈을 설치해야 하지만,
mysql2는 async/await 인터페이스가 내장되어 있어서 편리하게 사용할 수 있습니다.
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)으로 바꾸셔야 합니다.