Skip to content

[BE] 도커 생성부터 테스트까지 스크립트 하나로 해결해보기

JIN edited this page Jan 14, 2025 · 1 revision
⚙️ Web BE
김진
2025.01.08. 작성

📖 도커 생성부터 테스트까지 스크립트 하나로 해결해보기

터미널로 도커 띄우기부터 테스트 수행까지 하려면.. 아래 명령어들을 입력해야 한다.

// Redis Container 실행
docker-compose up -d

// 테스트 실행
npx jest drawing.gateway.integration.spec.ts

// 테스트 종료 후 Docker Container 삭제
docker-compose down

물론 웹스톰을 사용 중이라 docker-compose up -d 를 한 후 아래 Run 버튼을 클릭만 하면 두 번째 명령어는 필요없긴 하다!

image

그렇지만 docker-compose down 코드를 입력해야 하는 건 마찬가지고..

차라리 스크립트를 만들어서 저 동작을 다 하게 한다면 어떨까?

스크립트 작성하기

#!/bin/bash

# Redis Container 실행
docker-compose up -d

# Redis 내 데이터 초기화
docker exec redis_test redis-cli FLUSHALL

# 테스트 실행
npx jest drawing.gateway.integration.spec.ts

# 테스트 종료 후 Docker Container 삭제
docker-compose down

이왕 스크립트를 작성해보기로 한 거 하나만 더 추가했다. Redis 내부에 혹시 모를 값이 들어있을 수도 있으니 Container가 실행된 이후에 바로 FLUSHALL 할 수 있도록 했다.

이때까지 내가 계속 무의식적으로 Ctrl+C 해서 몰랐는데 테스트가 종료되어도 테스트에서 벗어나지 못하고 있었다!

image

Ctrl+C 를 누르면 docker-compose down 이 정상적으로 동작하는 걸 볼 수 있다.

image

실패 사례와 해결 과정

경고 메시지가 뜬 대로 --detectOpenHandles 옵션을 추가해서 확인해보기로 했다.

근데 웬걸, 아무 것도 뜨지 않는다! 뭔가 문제가 있어서 그런 것 같지는 않고 실행 종료가 되지 않는 것이 있어서 그런 것 같다.

image

gpt에게 빠르게 물어보니 Redis의 연결 종료가 제대로 되었는지 확인하고, 그 밑에는 --detectOpenHandles 을 확인해보고.. 뭐 그런 이야기가 나와서 Redis 연결 종료 부분만 추가해주기로 했다.

image

quit() 이 안전하게 연결을 끊는 방법이라고 해서 quit() 을 추가하고 수행해보기로 했다.

  // 테스트가 종료되면 Redis를 종료
  afterAll(() => {
    redisService.quit();
  });

전체 코드 및 결과

#!/bin/bash

# Redis Container 실행
docker-compose up -d

# Redis 내 데이터 초기화
docker exec redis_test redis-cli FLUSHALL

# 테스트 실행
npx jest drawing.gateway.integration.spec.ts

# 테스트 종료 후 Docker Container 삭제
docker-compose down

image

이제 스크립트만 실행하면 Redis Container가 실행되고, 테스트까지 수행된다! 스크립트 종료 후 docker ps 로 확인했을 때 정상적으로 종료된 것까지 확인이 가능했다.

지금은 내가 만든 테스트에 대해서만 돌아가게 되어있지만, 테스트 실행 부분 코드만 전체 테스트에 대해서 할 수 있게 변경하면 편하게 테스트를 수행할 수 있을 것이다!

🔗 참고 사이트

Clone this wiki locally