일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스마트컨트렉트프록시
- 오블완
- 컨트렉트 동일한 함수이름 호출
- 러스트기초
- chainlink 설명
- ethers typescript
- 체인의정석
- rust 기초
- 프록시배포구조
- 러스트 기초 학습
- multicall
- vue기초
- Vue.js
- 스마트컨트렉트테스트
- 러스트 기초
- 티스토리챌린지
- 컨트렉트 배포 자동화
- ethers websocket
- 스마트컨트렉트 함수이름 중복 호출
- ethers
- nest.js설명
- Vue
- git rebase
- ambiguous function description
- 스마트 컨트렉트 함수이름 중복
- ethers v6
- 머신러닝기초
- SBT표준
- 스마트컨트렉트 예약어 함수이름 중복
- ethers type
Archives
- Today
- Total
체인의정석
Nest.js & Cassandra 로 백엔드 세팅해보기 본문
728x90
반응형
1. Nest.js 설치코드
1. Nest 설치
npm install -g @nestjs/cli
2. 설치확인
nest --version
3. netst new "프로젝트이름"
해당 명령어를 쓰게 되면 express generator 처럼 알아서 기본 틀이 만들어지게 된다.
nest new cassandra-server
⚡ We will scaffold your app in a few seconds..
? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpm
생성된 파일구조는 다음과 같음을 확인할 수 있었다.
- src/: 소스 코드가 위치하는 주 디렉토리.
- app.controller.ts: 애플리케이션의 컨트롤러. 요청을 처리하고 응답을 반환합니다.
- app.controller.spec.ts: 컨트롤러의 단위 테스트 파일.
- app.module.ts: 애플리케이션의 루트 모듈. NestJS는 모듈 기반 구조를 가지고 있습니다.
- app.service.ts: 애플리케이션의 서비스 레이어. 비즈니스 로직을 처리합니다.
- main.ts: 애플리케이션의 엔트리 포인트. NestJS 애플리케이션을 부트스트랩합니다.
- test/: 테스트 파일들이 위치하는 디렉토리.
- nest-cli.json: Nest CLI 구성 파일.
- package.json 및 package-lock.json: npm 의존성과 스크립트를 정의하는 파일들.
- tsconfig.json: TypeScript 컴파일러 설정 파일.
- tsconfig.build.json: 빌드용 TypeScript 설정 파일.
해당 구조에서 챗 지피티를 통해 카산드라 DB가 포함된 구조로 다시 설계시켜 보았다.
Cassandra DB를 포함한 구조 설계하기
your-project-name/
│
├── src/
│ ├── cassandra/
│ │ ├── cassandra.module.ts # Cassandra 모듈
│ │ └── cassandra.service.ts # Cassandra 서비스
│ │
│ ├── message/
│ │ ├── dto/ # 데이터 전송 객체 (Data Transfer Objects)
│ │ │ └── create-message.dto.ts # 메시지 생성 DTO
│ │ ├── message.controller.ts # 메시지 관련 컨트롤러
│ │ ├── message.module.ts # 메시지 모듈
│ │ └── message.service.ts # 메시지 관련 서비스
│ │
│ ├── app.controller.ts # 앱 기본 컨트롤러
│ ├── app.service.ts # 앱 기본 서비스
│ └── app.module.ts # 앱 루트 모듈
│
├── test/ # 테스트 파일
│
├── nest-cli.json # Nest CLI 구성 파일
├── package.json # npm 의존성 및 스크립트
├── tsconfig.json # TypeScript 컴파일러 설정
└── tsconfig.build.json # 빌드용 TypeScript 설정
- cassandra.module.ts: Cassandra와 관련된 서비스를 모아놓은 모듈입니다. 필요한 의존성을 주입하는 데 사용됩니다.
- cassandra.service.ts: Cassandra 데이터베이스와의 상호작용을 관리하는 서비스입니다. 데이터베이스 연결 및 쿼리 실행 등을 담당합니다.
- message.module.ts: 메시지 관련 기능을 모아놓은 모듈입니다. 메시지 관련 컨트롤러와 서비스를 포함합니다.
- message.controller.ts: 메시지 관련 HTTP 요청을 처리하는 컨트롤러입니다. POST 요청을 받아 메시지를 저장하는 기능을 포함합니다.
- message.service.ts: 메시지 관련 비즈니스 로직을 처리하는 서비스입니다. 이 서비스는 Cassandra 서비스를 사용하여 데이터를 저장합니다.
- create-message.dto.ts: 클라이언트로부터 받는 메시지 데이터의 구조를 정의하는 DTO입니다.
모듈 구조의 중요성
NestJS는 모듈 기반 구조를 채택하고 있으므로, 각 기능별로 모듈을 분리하여 관리하는 것이 좋습니다. 이렇게 하면 각 기능의 관심사를 분리하고, 의존성을 관리하기 쉬워집니다.
- Cassandra 모듈: 데이터베이스 관련 로직을 캡슐화합니다.
- Message 모듈: 메시지 관련 기능을 캡슐화하고, Cassandra 모듈과의 상호작용을 관리합니다.
이러한 구조는 프로젝트의 확장성과 유지보수성을 향상시키는 데 도움이 됩니다.
카산드라와 Nest를 접목한 코드
cassandra.module.ts
// src/cassandra/cassandra.module.ts
import { Module } from '@nestjs/common';
import { CassandraService } from './cassandra.service';
@Module({
providers: [CassandraService],
exports: [CassandraService], // 다른 모듈에서도 사용할 수 있도록 서비스를 export 합니다.
})
export class CassandraModule {}
Cassandra 모듈은 Cassandra와의 상호작용을 관리합니다. 이 모듈은 Cassandra 서비스를 제공합니다.
cassandra.service.ts
// src/cassandra/cassandra.service.ts
import { Injectable } from '@nestjs/common';
import { Client } from 'cassandra-driver';
@Injectable()
export class CassandraService {
private client: Client;
constructor() {
this.client = new Client({
contactPoints: ['127.0.0.1'],
localDataCenter: 'datacenter1',
keyspace: 'your_keyspace',
});
}
// 예시 함수: Cassandra 데이터베이스에 데이터를 저장합니다.
async save(data: any): Promise<void> {
const query = 'INSERT INTO your_table (id, data) VALUES (uuid(), ?)';
await this.client.execute(query, [data], { prepare: true });
}
// 기타 필요한 Cassandra 상호작용 메서드를 추가합니다.
}
Cassandra 서비스는 Cassandra 데이터베이스와의 실제 상호작용을 처리합니다.
2. Message 모듈
message.module.ts
// src/message/message.module.ts
import { Module } from '@nestjs/common';
import { MessageService } from './message.service';
import { MessageController } from './message.controller';
import { CassandraModule } from '../cassandra/cassandra.module';
@Module({
imports: [CassandraModule], // Cassandra 모듈을 import합니다.
controllers: [MessageController],
providers: [MessageService],
})
export class MessageModule {}
Message 모듈은 메시지와 관련된 기능을 관리합니다. 이 모듈은 메시지 관련 서비스와 컨트롤러를 포함합니다.
Message 서비스는 메시지와 관련된 비즈니스 로직을 처리합니다.
message.service.ts
Message 서비스는 메시지와 관련된 비즈니스 로직을 처리합니다.
// src/message/message.service.ts
import { Injectable } from '@nestjs/common';
import { CassandraService } from '../cassandra/cassandra.service';
@Injectable()
export class MessageService {
constructor(private cassandraService: CassandraService) {}
async saveMessage(message: string): Promise<void> {
// Cassandra 서비스를 사용하여 메시지를 저장합니다.
await this.cassandraService.save(message);
}
}
message.controller.ts
// src/message/message.service.ts
import { Injectable } from '@nestjs/common';
import { CassandraService } from '../cassandra/cassandra.service';
@Injectable()
export class MessageService {
constructor(private cassandraService: CassandraService) {}
async saveMessage(message: string): Promise<void> {
// Cassandra 서비스를 사용하여 메시지를 저장합니다.
await this.cassandraService.save(message);
}
}
Message 컨트롤러는 클라이언트로부터 메시지와 관련된 요청을 받고, 응답을 반환합니다.
*출처 : 챗지피티
728x90
반응형
'개발 > database' 카테고리의 다른 글
MySQL) You are using safe update mode 에러 (1) | 2024.11.14 |
---|---|
카산드라 DB mac에서 사용해보기 (0) | 2023.11.13 |
DB에서 인덱싱하는 법과 Sequalize에서 테이블 정의 시 index 넣는 방법 (0) | 2023.09.15 |
Sequalize와 raw query를 통하여 updated at, created at 만들기 (0) | 2023.08.25 |
MYSQL에서 Insert와 update 하나의 구문으로 처리하기 (ON DUPLICATE KEY UPDATE, UPSERT, sequalize) (0) | 2023.08.21 |
Comments