본문 바로가기
Storify

STORIFY (0219) - 테스트 코드

by Peter.JH 2024. 2. 19.
728x90

마지막 주가 시작되었다.

이번주 목표: 모든 테스트 코드 작성, 좋아요 알림 성공 테스트

 

 

 

테스트 코드를 대충 만들어 보고 의문점이 몇 개 들었다.

 

1. 모든 레이어에 대해 테스트 코드를 작성해야하는가?

 

이런 생각이 들었던 이유는 보통 복잡한 로직이 많은 service, repository에서만 테스트 코드를 작성하고 복잡한 로직이 없는 controller는 테스트 코드를 작성하지 않으면 비용을 절약할 수 있다고 생각했다. 

 

우선 각 레이어 테스트에 대해 설명해보면 
- Controller 테스트: Controller는 HTTP 요청을 받아 적절한 서비스 메소드를 호출하고, 그 결과를 HTTP 응답으로 변환하는 역할을 한다. 따라서 Controller 테스트는 HTTP 요청/응답의 형태, 상태 코드 등을 검증하는데 중점을 둘 수 있다. 여기서 Service는 Mock 객체를 사용하여, 실제 로직의 실행 없이 예상되는 결과를 반환하도록 한다.

 

- Service 테스트: Service 레이어는 비즈니스 로직을 수행하는 주요한 부분이다. 따라서 이 레이어의 테스트는 비즈니스 로직이 정확하게 수행되는지, 예외 상황이 적절히 처리되는지 등을 검증한다. Repository는 Mock을 사용하여 데이터베이스와의 실제 상호작용 없이 예상되는 결과를 반환하도록 한다.

 

- Repository 테스트: Repository는 데이터베이스와의 인터페이스 역할을 한다. 따라서 이 레이어의 테스트는 데이터베이스 쿼리가 정확하게 수행되는지를 검증한다. 이런 방식으로 각 레이어의 테스트를 구성하면, 각 레이어가 자신의 역할을 잘 수행하는지 확인할 수 있다.

 

따라서 모든 레이어에 대한 테스트 코드를 작성하는 것이 중요하다.

 

Controller , Service , Repository 각각 역할을 분리 시켜놓았기 때문에 각 레이어가 자신의 역할을 잘 수행하고 있는지 확인하기 위해 테스트 코드를 작성해야 한다. 예를 들어 Controller 테스트 코드를 작성한다고 생각해 보자. Service를 주입받아 사용하고 있지만 Controller 테스트 코드에서는 Service의 구체적인 동작에 대해서는 테스트하지 않아야 한다. mock를 사용해 정답을 넣어두고 테스트해야 Controller 가 제 기능을 수행하는지 테스트할 수 있다.

 

 

 

2. CRUD 중 Create, Update에 대해서만 테스트 코드를 작성하면 되지 않을까?

 

Create와 Update 연산은 보통 사용자 입력을 받아 데이터를 생성하거나 수정하는 기능을 담당하므로, 많은 변수를 다루게 된다. 이러한 연산은 입력값의 유효성 검사, 에러 처리, 데이터 변환 등 복잡한 로직을 포함할 가능성이 높다. 따라서 이러한 연산에 대한 테스트 코드 작성은 중요하며, 다양한 시나리오와 예외 상황을 고려해야 한다.

 

그러나, Read와 Delete 연산 또한 중요한 역할을 수행한다. Read 연산은 특정 조건에 따라 데이터를 조회하며, 필터링, 정렬, 페이징 등 다양한 요구사항을 처리해야 할 수 있다. Delete 연산은 데이터를 삭제하는 것 외에도, 관련된 데이터를 함께 처리하거나 삭제 플래그를 설정하는 등의 로직을 포함할 수 있다. 따라서, 각 연산의 성격에 따라 테스트의 중점이 달라질 수 있지만, CRUD의 모든 연산에 대한 테스트를 작성하는 것이 좋다. 이를 통해 각 기능이 정상적으로 동작하고, 예외 상황을 적절히 처리하는지 확인할 수 있을 것이다.

 

main.ts에 아래 코드를 추가해 메모리 사용 확인

  console.log('Memory usage at the start:', process.memoryUsage());
  console.log('Memory usage at the end:', process.memoryUsage());
Memory usage at the start: {
  rss: 148983808,
  heapTotal: 88330240,
  heapUsed: 63877920,
  external: 20904898,
  arrayBuffers: 18276429
}

.
.
.

Memory usage at the end: {
  rss: 154726400,
  heapTotal: 90583040,
  heapUsed: 65784928,
  external: 20943877,
  arrayBuffers: 18315348
}

 

- `rss`: Resident Set Size, 전체 메모리 사용량을 의미합니다. 이 값이 너무 크면 메모리 누수가 의심될 수 있습니다. - `heapTotal`: 사용 가능한 힙 메모리의 총량입니다.

 

- `heapUsed`: 실제 사용 중인 힙 메모리의 양입니다.

 

- `external`: Node.js 프로세스 외부에서 사용되는 메모리 양입니다. (예: C++ 플러그인이나 다른 네이티브 구조체 등)

 

- `arrayBuffers`: ArrayBuffer 및 SharedArrayBuffer 인스턴스에 사용되는 메모리 양입니다. 위 결과에서 애플리케이션 실행 동안 메모리 사용량이 얼마나 증가했는지를 확인할 수 있습니다. 

 

 heapdump 추가

728x90