Inflearn brand logo image

인프런 커뮤니티 질문&답변

denia park님의 프로필 이미지
denia park

작성한 질문수

Spring Boot TDD - 입문부터 실전까지 정확하게

테스트 실행 범위

프로젝트 규모가 큰 경우 @SpringBootTest 실행 속도 문제

해결된 질문

작성

·

1.3K

·

수정됨

2

안녕하세요, 강사님.

저는 백엔드 1년 차 주니어 개발자입니다.

 

강사님 덕분에 TDD 학습을 차근차근 진행하고 있는데, 한 가지 궁금증이 생겨 질문드립니다.

 

현재 강의에서는 매번 API 기능을 구현할 때마다 @SpringBootTest 를 사용하여 테스트하고 계신데요.

 

만약 프로젝트 규모가 엄청 커져서 컨텍스트 로딩 시간이 5초 이상이 소요되는 경우,

테스트 결과를 기다리느라 “개발 흐름이 끊기는” 문제가 발생할 것 같은데요.

 

현업에서는 이 부분을 어떻게 관리하시는지 궁금합니다.

 

  1. 매번 @SpringBootTest를 그대로 사용하며 시간을 감수하시는지

  2. 특정 테스트만 빠르게 실행하는 슬라이스 테스트(@WebMvcTest 등)를 병행하시는지

  3. 그 외 다른 최적화 기법이 있는지

     

 

조언 부탁드립니다. 😊

답변 1

4

이규원님의 프로필 이미지
이규원
지식공유자

답변이 간단하지 않은 시기인 것 같습니다.

 

우선 강의 범위에서 얘기해 보면요, 이 강의에서는 Spring Boot 앱을 TDD로 개발하는 기본적인 방법을 단단히 다지는 것이 목적이라서 모든 테스트에 @SpringBootTest를 사용합니다. 실습 마지막에 테스트 실행 성능을 개선하는데 Spring 컨텍스트 준비에는 긴 시간이 소비되지 않는다는 것을 알 수 있습니다. 대량 400~700 밀리초 정도 소요되는 것 같습니다.

 

또 그것이 큰 문제가 되지 않는 이유는 Spring 컨텍스트 구성이 CommerceApiApp_specs에서 사용되는 구성과 @CommerceApiTest에서 사용되는 구성 2개 밖에 없다는 점입니다. Spring 테스트 프레임워크는 서로 다른 컨텍스트 구성마다 새로운 Spring 컨텍스트를 준비합니다. 그러니까 강의에서 100개 이상의 테스트가 실행되는 과정에서 Spring 컨텍스트는 2개만 준비되어 재사용됩니다.

 

Spring 컨텍스트 사용이 문제가 되는 경우는 테스트 대역을 적극적으로 사용해서 테스트 클래스 마다 테스트 대역 설정 때문에 컨텍스트 구성이 계속 달라질 때입니다. 이런 경우 Spring 테스트 프레임워크는 새로운 Spring 컨텍스트를 계속 준비하기 때문에 실행시간이 길어지게 됩니다. 과도한 테스트 대역 사용이 일으킬 수 있는 문제 중 하나죠.

범위 상 이번 강의에서 테스트 대역을 다루지는 않았지만 테스트 대역을 사용하면서도 Spring 컨텍스트를 재사용할 수 있는 방법도 있기는 합니다.


 

저는 얼마전까지 현업에서는 @SpringBootTestSpring 컨텍스트를 사용한 테스트는 10~20% 정도를 하고 나머지는 Spring 독립적인 순수한 모델 영역의 범위를 크게 만들어서 이 부분을 대상으로 80~90% 정도 테스트를 했습니다. 그러면 Spring 컨텍스트 준비 시간이 방해가 되는 일이 많지는 않았습니다.

 

물론 그렇다고 하더라도 Spring 컨텍스트 준비 시간이 길어지는 것은 여러모로 좋지 않기 때문에 Spring 컨텍스트 준비 시간을 관리하긴 합니다.

 

그렇게 준비 시간이 너무 길어지지 않는다고 하면 이제는 Spring 컨텍스트를 사용하는 테스트가 가진 단점의 영향이 얼마나 될지 고민이 됩니다. 항상 코딩 AI 에이전트와 협업하기 때문인데요. 직접 코딩하는 시간 대비 AI에게 지시할 업무를 계획하는 시간이 점점 늘어나다 보니까 테스트 실행 성능에 대해서 과거보다 점점 관대해 지는 것 같습니다.

 

실행 시간을 견딜 수 있다면 외부 인터페이스 대상 테스트가 가진 장점의 효과가 더 커져서, 요즘 바이브 코딩을 연습하면서 테스트 실행 시간에 대한 생각이 다시 정립되는 느낌입니다.

 

실용적인 방법을 찾으시는 데 도움이 됐으면 좋겠습니다.

denia park님의 프로필 이미지
denia park
질문자

빠른 답변 정말 감사합니다!!

 

강사님께서 해주신 말씀을 통해 저는 아래와 같이 이해를 했습니다.

 

  1. 현업에서도 Spring 컨텍스트를 사용한 테스트를 주로 사용하며, 다만 전체 테스트에서 차지하는 비율을 낮게 하여 전체 테스트 시간을 관리한다.

  2. Spring 컨텍스트를 사용한 테스트에서 Spring 컨텍스트가 최대한 재사용될 수 있게 구성을 해야 테스트 시간을 줄일 수 있다. (-> 과도한 테스트 대역은 지양한다.)

  3. Spring 컨텍스트를 사용한 테스트가 전체 테스트에서 차지하는 비율이 낮더라도 Spring 컨텍스트 준비 시간을 관리해야 한다. (효율적인 테스트를 위해)

  4. AI 에이전트와 협업으로 코딩을 하다보니, 테스트 시간에 대해서는 조금 더 관대해졌고 Spring 컨텍스트를 사용한 테스트의 장점이 더 커졌다고 생각한다.

 

정말 감사합니다!!

이규원님의 프로필 이미지
이규원
지식공유자

정확한 요약입니다. :)

denia park님의 프로필 이미지
denia park

작성한 질문수

질문하기