# NestJS에서 DB를 연동한 단위 테스트 환경 구축 공유 (Sociable Test)

> Clean Markdown view of GeekNews topic #19906. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19906](https://news.hada.io/topic?id=19906)
- GeekNews Markdown: [https://news.hada.io/topic/19906.md](https://news.hada.io/topic/19906.md)
- Type: news
- Author: [tothefullest08](https://news.hada.io/@tothefullest08)
- Published: 2025-03-23T11:06:48+09:00
- Updated: 2025-03-23T11:06:48+09:00
- Original source: [borntodare.me](https://www.borntodare.me/unit_test_improvement_nest_2)
- Points: 7
- Comments: 0

## Summary

Sociable Test는 실제 DB와 연동하여 테스트를 수행함으로써 신뢰성을 높이고, TypeORM의 타입 안전성 문제를 해결할 수 있습니다. Solitary Test는 의존성을 Mock으로 대체하여 빠르게 테스트할 수 있지만, 실제 환경과의 차이로 인해 한계가 존재합니다. NestJS에서 MySQL을 이용한 테스트 DB 설정과 트랜잭션을 활용한 데이터 격리 테스트를 통해 ORM 관련 문제를 조기에 발견할 수 있습니다.

## Topic Body

##### **1. 개요**  
- Sociable Test(실제 DB 연동) 방식의 단위 테스트 구축 방법 공유  
- TypeORM 같은 ORM은 타입 안전성 문제가 있어, 실제 DB를 사용한 테스트가 필요함  
  
##### **2. Solitary Test vs Sociable Test**  
- 비교  
   - Solitary Test 는 의존성을 Mock으로 대체하여 독립적으로 테스트 (빠르지만 실제 환경과 차이가 발생할 수 있음)  
   - Sociable Test 는 실제 외부 의존성(DB)과 함께 테스트하여 신뢰성 확보 가능 (속도가 느리지만 현실적인 문제를 조기에 발견)  
- Solitary Test의 한계  
   - 모킹으로는 실제 DB와의 상호작용 문제를 완벽히 발견하기 어려움  
   - TypeORM의 타입 체크 문제로 인해 런타임 에러가 발생할 수 있음  
- Sociable Test 필요성  
   - 실제 DB와의 연동을 통해 복잡한 쿼리, 트랜잭션, 관계 설정 문제를 검증할 수 있음  
   - 테스트 데이터베이스를 설정하여 트랜잭션 방식으로 데이터 격리 테스트 수행  
- DB Sociable Test의 장점과 주의점  
   - 장점: 신뢰성 높은 테스트, ORM 관련 문제 조기 발견, 스키마 불일치 확인  
   - 주의점: 테스트 속도 저하, 환경 설정 복잡, 트랜잭션 관리 필요  
  
##### **3. NestJS에서 DB 연동 테스트 구현**  
- 설정  
   - MySQL을 이용한 테스트 DB 연결 설정  
   - 트랜잭션을 활용하여 각 테스트의 변경 사항을 롤백 처리  
- Jest 테스트 프레임워크의 라이프사이클 활용  
   - beforeAll / beforeEach / afterEach / afterAll 를 이용  
   -  DB 초기화 및 연결, 트랜잭션 시작 및 종료 설정  
  
##### **4. 결론**  
- 단위 테스트 작성시 Solitary Test와 Sociable Test를 적절히 조합하여 사용하면 좋음  
- ORM 관련 문제를 방지하기 위해 Sociable Test는 큰 도움이 될 수 있음

## Comments



_No public comments on this page._
