일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- multicall
- 오블완
- git rebase
- SBT표준
- ethers typescript
- 스마트컨트렉트프록시
- Vue
- 머신러닝기초
- Vue.js
- ethers type
- ethers
- ethers websocket
- ambiguous function description
- rust 기초
- chainlink 설명
- 스마트 컨트렉트 함수이름 중복
- 프록시배포구조
- 컨트렉트 배포 자동화
- 스마트컨트렉트 함수이름 중복 호출
- 러스트 기초
- 티스토리챌린지
- nest.js설명
- 러스트기초
- 체인의정석
- vue기초
- 컨트렉트 동일한 함수이름 호출
- 스마트컨트렉트 예약어 함수이름 중복
- ethers v6
- 러스트 기초 학습
- 스마트컨트렉트테스트
- Today
- Total
체인의정석
Nest.js) Database 연동하기 본문
이제 nest.js 와 database를 연동하는 부분을 만들어 보도록 하겠다.
Database
Nest는 데이터베이스에 구애받지 않으므로 모든 SQL 또는 NoSQL 데이터베이스와 쉽게 통합할 수 있습니다. 선호도에 따라 다양한 옵션을 사용할 수 있습니다. 가장 일반적인 수준에서 Nest를 데이터베이스에 연결하는 것은 Express 또는 Fastify에서와 마찬가지로 데이터베이스에 적합한 Node.js 드라이버를 로드하기만 하면됩니다.
편의를 위해 Nest는 현재 장에서 다룰 @nestjs/typeorm 및 @nestjs/sequelize 패키지를 사용하여 TypeORM 및 Sequelize와 기본적으로 긴밀한 통합을 제공하며, Mongoose는 @nestjs/mongoose, 이 장에서 다룹니다. 이러한 통합은 모델/리포지토리 삽입, 테스트 가능성 및 비동기 구성과 같은 추가 NestJS 관련 기능을 제공하여 선택한 데이터베이스에 더욱 쉽게 액세스할 수 있도록 합니다.
ypeORM Integration
SQL 및 NoSQL 데이터베이스와의 통합을 위해 Nest는 @nestjs/typeorm 패키지를 제공합니다. Nest는 TypeScript에 사용할 수 있는 가장 성숙된 ORM(Object Relational Mapper)이기 때문에 TypeORM을 사용합니다. TypeScript로 작성되었으므로 Nest 프레임워크와 잘 통합됩니다.
사용을 시작하려면 먼저 필요한 종속성을 설치합니다. 이 장에서는 널리 사용되는 MySQL 관계형 DBMS를 사용하는 방법을 설명하지만 TypeORM은 PostgreSQL, Oracle, Microsoft SQL Server, SQLite, MongoDB와 같은 NoSQL 데이터베이스도 있습니다. 이 장에서 설명하는 절차는 TypeORM에서 지원하는 모든 데이터베이스에 대해 동일합니다. 선택한 데이터베이스에 연결된 클라이언트 API 라이브러리를 설치하기만 하면 됩니다
요약 =>
설명을 읽어보니 nestjs 에서는 typeorm을 사용하는것을 추천하고 있다.
모든 종류의 db와 typeORM이 연동 되기 때문에 이 또한 편리할 것 같다.
나온 설명 정차에 따라서 데이터베이스 연동작업을 시작하였다.
$ npm install --save @nestjs/typeorm typeorm mysql2
설치 후
app.modules.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
다음과 같이 db 정보를 넣어야 한다.
근데 db 정보는 민감하기 때문에 환경 변수를 설정하는 파일을 따로 만들어야 한다.
이 부분은 여기 환경 변수를 설정하는 부분을 읽고 한번 만들어 보겠다.
전에 많이 써봤던 cross-env를 쓰는 방법이다.
https://docs.nestjs.kr/techniques/configuration
이 부분도 같이 참고하였다.
두 부분은 서로 다른 설정 값으로 넣어주어야 한다. cross-env 와 type orm은 이와 같이 분리되기 때문에 아래 블로그를 참고하여 구성하도록 한다.
https://popawaw.tistory.com/170
그 결과 아래와 같은 코드가 작성되었다.
app.module.ts
import { Module } from '@nestjs/common';
import { AddressesModule } from './addresses/addresses.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
// import Joi from 'joi';
@Module({
imports: [AddressesModule],
})
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV == 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
// validationSchema: Joi.object({
// NODE_ENV: Joi.string().valid('dev', 'prod').required(),
// DB_HOST: Joi.string().required(),
// DB_PORT: Joi.string().required(),
// DB_USERNAME: Joi.string().required(),
// DB_PASSWORD: Joi.string().required(),
// DB_NAME: Joi.string().required(),
// }),
// 비어있는 값을 막기 위한 모듈로 나중에 수정 예정
}),
TypeOrmModule.forRoot({
type: 'mysql',
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
synchronize: true,
logging: true,
entities: [],
}),
AddressesModule
],
})
export class AppModule {}
joi는 유용해 보이지만 지금 시간에 쫓기고 있으므로 나중에 고도화 때 하려고 주석으로 남겨두었다.
npm run start:dev 를 실행하면
"start:dev": "cross-env NODE_ENV=dev nest start --watch",
이렇게 환경 변수대로 값을 입력해주므로, db 정보값 노출 없이 깃허브에 올릴 수 있게 되었다.
나중에 다 뜯어고치겠지만, 초안은 완성되어 가고 있다.
이제 typeORM으로 조회를 직접 해보는 일이 남았다.
'개발 > backend' 카테고리의 다른 글
Nest.js) 정의한 entities 적용하기 service 부분 코드 수정 (0) | 2021.10.18 |
---|---|
Nest.js) type ORM , entities 정의하기 (0) | 2021.10.18 |
Nest.js ) Modules (0) | 2021.10.15 |
Nest.js ) Providers (0) | 2021.10.15 |
Nest.js ) - Controllers (0) | 2021.10.15 |