시스템이 확장됨에 따라, 테스트의 중요성은 강조된다.
이미 개발한 내역이 많기 때문에, 현재 개발중인 내역으로 인해 전파 이슈가 발생하면 안되기 때문인데,
그렇다고 내가 개발한 내용은 1주일 정도량인데, 현재까지 개발된 내용이 2년 치라면?
2년+1주일 분량전체를 테스트 할 것인가?
여기서 시스템의 안정성을 높이고, 개발 테스트 소요시간을 단축할 수 있는 방안이 바로
테스트 코드 이다.
(단위테스트, 통합테스트, e2e 테스트 등)
다만, 여기서 테스트 수행 시 DB가 항상 접속이 되어있어야 할까?는 다소 의문스러운 영역이긴하다
왜? 독립적인 구성에서의 테스트가 이루어 져야하기 때문이다.
예를 들면, Kafka 를 도입해서 사용중인데, Kafka 가 항상 있어야만 테스트를 돌릴수 있는가?
라는 상황이면, github action 내에서 push 시점에서 테스트코드를 돌리기가 힘들것이다.
(물론, 배포 후 cypress 등을 이용한 e2e테스트는 다를 수 있다.)
그럼 테스트 DB를 만들어서 붙이는 방법은?
이것 또한, 매번 테스트 한 내용이 DB에 반영되어 있고, 동시에 여러명이 테스트를 진행할 경우,
다른 사람의 테스트코드 실행으로, 내가 실행중인 테스트 코드결과에 영향을 미칠 수 있다.
(테스트가 끝나고 Data 정리의 번거로움도 문제!)
결론적으로는 B/E 단에서 독립적인 테스트 환경이 컨테이너 기반으로 보장되냐 안되냐가 중요한 것이다.
(서론이 다소 길었다.)
자, 그럼 독립적인 환경보장을 하기위해서는?
어떻게 해야할까??
Test Container 를 사용하는 것이다.
사용법은 의외로 간단하다.
Nest js 기반, Mysql, ORM 으로는 typeORM 을 사용하고 있다고 가정하자,
(Nest 사용법은 필요한 내용은 함께 담았다)
첫번째로
npm install --save @nestjs/typeorm typeorm mysql2
typeORM 기반의 mysql 부터 설치해주자(이미 설치되어있으면 패스~)
https://docs.nestjs.com/techniques/database
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea
docs.nestjs.com
두번째로
npm install --save-dev testcontainers @testcontainers/mysql
Test Container 를 설치하는 것이다!!
(주의! dev 용 dependency 로 잡아야 한다. 왜? 실 운영에 참조되는 라이브러리가 아니니깐!)
repository 도 추가를 해야겠지?
import { TestEntity } from './entities/Test.entity';
import { Inject, Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
@Injectable()
export class TestRepository {
constructor(
@Inject('TEST_REPOSITORY')
private testRepository: Repository<TestEntity>,
) {}
async findAll(): Promise<TestEntity[]> {
return this.testRepository.find();
}
}
통합 테스트 코드는?
package.json 도 수정을...
//아랫부분만 추가해보자!
"globalSetup": "./test/it/setup.ts",
"globalTeardown": "./test/it/testcode.ts",
테스트 코드를 작성해보자!
그럼 다음 테스트 실행도 추가해서 실행 실행하면!! 끝!
"test:it": "jest --config ./test/it/it.jest.json"
yarn test:it
'Node js > Nest js 강의 내용' 카테고리의 다른 글
(다음과정 미리보기) 리펙토링 (관심사 분리 및 보완 패턴 적용) (0) | 2025.02.01 |
---|---|
(다음과정 미리보기) Test Container 개발 with Prisma and Mysql (0) | 2025.01.27 |
(다음과정 미리보기) Graphql 사용하기 (0) | 2025.01.27 |
9. Kafka 설명 & 연동 (한방에 해결하자) (0) | 2025.01.27 |
8. Redis 연동 (장바구니 리펙토링) (0) | 2025.01.27 |