개발 환경 설정
[Nest.js] 개발 환경 설정(Mac)
섹션 제목: “[Nest.js] 개발 환경 설정(Mac)” author: Onejay createdAt: 2022-12-15 updatedAt: 2022-12-151. Nest.js
섹션 제목: “1. Nest.js”1-1) Nest.js 설치
섹션 제목: “1-1) Nest.js 설치”-
Install nest.js
Terminal window $ npm i -g @nestjs/cli -
version
Terminal window $ nest -v8.2.6
1-2) Nest.js 프로젝트 생성
섹션 제목: “1-2) Nest.js 프로젝트 생성”-
아래의 명령어를 실행하면 testApp 이란 디렉토리에 Nest.js 프로젝트가 생성된다.
Terminal window $ nest new testApp -
실행 결과
Terminal window $ nest new ${PROJECT_NAME}⚡ We will scaffold your app in a few seconds..CREATE ${PROJECT_NAME}/.eslintrc.js (665 bytes)CREATE ${PROJECT_NAME}/.prettierrc (51 bytes)CREATE ${PROJECT_NAME}/README.md (3340 bytes)CREATE ${PROJECT_NAME}/nest-cli.json (118 bytes)CREATE ${PROJECT_NAME}/package.json (2005 bytes)CREATE ${PROJECT_NAME}/tsconfig.build.json (97 bytes)CREATE ${PROJECT_NAME}/tsconfig.json (546 bytes)CREATE ${PROJECT_NAME}/src/app.controller.spec.ts (617 bytes)CREATE ${PROJECT_NAME}/src/app.controller.ts (274 bytes)CREATE ${PROJECT_NAME}/src/app.module.ts (249 bytes)CREATE ${PROJECT_NAME}/src/app.service.ts (142 bytes)CREATE ${PROJECT_NAME}/src/main.ts (208 bytes)CREATE ${PROJECT_NAME}/test/app.e2e-spec.ts (630 bytes)CREATE ${PROJECT_NAME}/test/jest-e2e.json (183 bytes)# 자신이 사용하는 패키지 관리 프로그램(npm, yarn, ... etc)을 선택? Which package manager would you ❤️ to use? npm✔ Installation in progress... ☕🚀 Successfully created project ${PROJECT_NAME}👉 Get started with the following commands:$ cd ${PROJECT_NAME}$ npm run startThanks for installing Nest 🙏Please consider donating to our open collectiveto help us maintain this package.🍷 Donate: https://opencollective.com/nest
1-3) Nest.js 프로젝트 앱 실행
섹션 제목: “1-3) Nest.js 프로젝트 앱 실행”-
프로젝트 디렉토리로 이동하여 run
localhost:3000으로 접속하면 Hello World! 가 웹페이지에 나온다
Terminal window # move project directory$ cd ${PROJECT_NAME}# run project app$ npm run start> ${PROJECT_NAME}@0.0.1 start> nest start[Nest] 12705 - 2022. 05. 28. 오후 9:11:55 LOG [NestFactory] Starting Nest application...[Nest] 12705 - 2022. 05. 28. 오후 9:11:55 LOG [InstanceLoader] AppModule dependencies initialized +162ms[Nest] 12705 - 2022. 05. 28. 오후 9:11:55 LOG [RoutesResolver] AppController {/}: +5ms[Nest] 12705 - 2022. 05. 28. 오후 9:11:55 LOG [RouterExplorer] Mapped {/, GET} route +4ms[Nest] 12705 - 2022. 05. 28. 오후 9:11:55 LOG [NestApplication] Nest application successfully started +3ms
2. PostgreSQL
섹션 제목: “2. PostgreSQL”Docker 를 이용해 PostreSQL 을 사용하도록 설정
2-1) Docker-Compose 파일 작성
섹션 제목: “2-1) Docker-Compose 파일 작성”-
프로젝트의 Root 위치에
docker-compose.yaml파일을 생성하여 아래의 내용을 작성version: '3'services:db:image: postgres:14ports:- '5433:5432'restart: alwaysenvironment:POSTGRES_USER: DB_유저명POSTGRES_PASSWORD: DB_비밀번호POSTGRES_DB: DB이름container_name: postgres-dbvolumes:- ./docker/pgdata:/var/lib/postgresql/datavolumes:pgdata:
2-2) Docker Build
섹션 제목: “2-2) Docker Build”-
Docker Desktop 를 실행한 뒤, 아래의 명령어를 실행한다.
-
yaml에 정의된 컨테이너 빌드 및 실행
Terminal window $ docker-compose up --build -
참고: 그 외의 실행 옵션
Terminal window # Docker 로그를 보면서 실행$ docker-compose up# 백그라운드에서 실행$ docker-compose up -d -
동작 확인
섹션 제목: “동작 확인”- Docker Desktop 의 [Containers/Apps] 메뉴에서 yaml 파일의 container_name 이 실행되는 지 확인
- 프로젝트의 Root 위치에 docker/pgdata 라는 디렉토리가 생성되었는지 확인
.gitignore파일에 등록
- DB에 접속이 되는지 확인
- DBeaver 등의 DB Client 를 사용하는 경우
- Database:
services.db.POSTGRES_DB의 값 - Username:
services.db.POSTGRES_USER의 값 - Password:
services.db.POSTGRES_PASSWORD의 값 - Port: 5433. (
services.db.ports값)
- Database:
- DBeaver 등의 DB Client 를 사용하는 경우
-
Docker Desktop: [Containers/Apps] 메뉴에서 정지
-
Terminal:
ctrl + cordocker stop ${CONTANINER_NAME}Terminal window # 현재 실행 중인 Container 확인$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3fd4fds3fs31 postgres:14 "docker-entrypoint…" About an hour ago Up 9 seconds 0.0.0.0:5433->5432/tcp postgres-db# Container Name 으로 종료$ docker stop postgres-db# Container Id 로 종료할 경우$ docker stop 3fd4fds3fs31
3. NoSQL
섹션 제목: “3. NoSQL”Docker 를 이용해 DynamoDB or Redis 를 로컬에서 실행할 수 있도록 한다.
Dynamodb-local
섹션 제목: “Dynamodb-local”- AWS에서 제공하는 Dynamodb의 로컬 버전 Docker Container
docker-compose.yaml 파일 수정
섹션 제목: “docker-compose.yaml 파일 수정”- services 에
dynamodb-local을 추가
version: '3' services: db: image: postgres:14 ... (중략) ... dynamodb-local: command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" image: "amazon/dynamodb-local:latest" container_name: dynamodb-local ports: - "8000:8000" volumes: - "./docker/dynamodb:/home/dynamodblocal/data" working_dir: /home/dynamodblocal-
Docker Container 를 실행
Terminal window $ docker-compose up -dStarting dynamodb-local ... doneCreating postgres-db ... done
동작 확인
섹션 제목: “동작 확인”-
프로젝트 Root 위치에 docker/dynamodb 디렉토리가 생성되었는지 확인
-
아래의 명령어를 실행하여 결과가 출력되는지 확인
Terminal window # dynamodb table 리스트 확인$ aws dynamodb list-tables --endpoint-url http://localhost:8000-
정상 연결 된 경우
{"TableNames": []} -
연결되지 않은 경우
Could not connect to the endpoint URL: "http://localhost:8000/"
-
Dynamodb-admin
섹션 제목: “Dynamodb-admin”- AWS Dynamodb-local 을 데이터를 GUI 로 사용할 수 있는 어플리케이션
docker-compose.yaml 파일 수정
섹션 제목: “docker-compose.yaml 파일 수정”- services 에
dynamodb-local-admin을 추가- Access key id, Secret access key, region 등은 더미값을 넣거나 삭제
version: '3' services: db: image: postgres:14 ... (중략) ... dynamodb-local: command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" image: "amazon/dynamodb-local:latest" ... (중략) ... dynamodb-local-admin: image: 'aaronshaf/dynamodb-admin:latest' container_name: 'dynamodb-local-admin' ports: - '8001:8001' environment: DYNAMO_ENDPOINT: dynamodb-local:8000 AWS_ACCESS_KEY_ID: 'DUMMYIDEXAMPLE' AWS_SECRET_ACCESS_KEY: 'DUMMYEXAMPLEKEY' REGION: 'eu-west-1' depends_on: - dynamodb-local-
Docker Container 를 실행
Terminal window $ docker-compose up -dStarting dynamodb-local ... doneStarting postgres-db ... doneCreating dynamodb-local-admin ... done
동작 확인
섹션 제목: “동작 확인”- 웹브라우저 주소창에
localhost:8001을 입력- Tables 정보를 확인할 수 있는 화면이 나오는지 확인