-
Notifications
You must be signed in to change notification settings - Fork 2
[BE] 도커 생성부터 테스트까지 스크립트 하나로 해결해보기
⚙️ 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
버튼을 클릭만 하면 두 번째 명령어는 필요없긴 하다!
그렇지만 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
해서 몰랐는데 테스트가 종료되어도 테스트에서 벗어나지 못하고 있었다!
Ctrl+C
를 누르면 docker-compose down
이 정상적으로 동작하는 걸 볼 수 있다.
경고 메시지가 뜬 대로 --detectOpenHandles
옵션을 추가해서 확인해보기로 했다.
근데 웬걸, 아무 것도 뜨지 않는다! 뭔가 문제가 있어서 그런 것 같지는 않고 실행 종료가 되지 않는 것이 있어서 그런 것 같다.
gpt에게 빠르게 물어보니 Redis의 연결 종료가 제대로 되었는지 확인하고, 그 밑에는 --detectOpenHandles
을 확인해보고.. 뭐 그런 이야기가 나와서 Redis 연결 종료 부분만 추가해주기로 했다.
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
이제 스크립트만 실행하면 Redis Container가 실행되고, 테스트까지 수행된다! 스크립트 종료 후 docker ps
로 확인했을 때 정상적으로 종료된 것까지 확인이 가능했다.
지금은 내가 만든 테스트에 대해서만 돌아가게 되어있지만, 테스트 실행 부분 코드만 전체 테스트에 대해서 할 수 있게 변경하면 편하게 테스트를 수행할 수 있을 것이다!