• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

테스트 코드에서 @BeforeEach가 아니라 sql 사용하시는 이유 문의드립니다.

24.02.16 21:14 작성 24.02.18 11:30 수정 조회수 237

0

안녕하세요!

실무에서 테스트 코드 적용을 위해 강의를 열심히 듣고 있는 중 궁금한 부분이 있습니다.

 

테스트코드 사용 시 @BeforeEach를 사용하는 경우도 있는데, sql로 초기 데이터 추가를 사용하시는 이유가 궁금합니다.

 

작은 서비스가 아니고 복잡한 서비스의 경우 sql로 넣는게 편할것 같기는 한데, 상태에 따라 id값이 필요한 경우도 있고, sql로 작성 시 테스트 마다 데이터가 적용이 동일하지 않을 것 같기도 해서 실제 복잡한 프로젝트에서 어떻게 사용하시는지 궁금해서 문의드립니다.

@BeforeEach가 한눈에 들어오지 않아서 잘 사용하지 않으신다고 설명해 주시기는 했지만, SQL로 사용 시 조회 등의 테스트에서는 특정 상태의 데이터 id를 알아야 하고, 그럼 SQL에서 해당 데이터의 id값과 상태값을 다시 확인해야 하는 형태는 동일하게 한눈에 안 들어올 것 같아서 고민이 되더라고요.

 

저도 SQL로 초기 데이터를 추가하는 형태로 사용하다가 이후에 테스트 코드의 유지보수가 쉽지 않은 경험이 있어서 강사님께서는 복잡한 비즈니스의 실무에서는 어떻게 사용하시는 궁금합니다.

 

감사합니다.

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.17

안녕하세요, 인프런 AI 인턴입니다.
wony님, 테스트 코드에서 @BeforeEach 대신 SQL을 사용하여 초기 데이터를 설정하는 경우, 각각의 방법에 대한 장단점과 프로젝트의 성격에 따라 선택이 달라질 수 있습니다.

SQL을 사용하여 데이터베이스를 초기화하는 방식은 복잡한 서비스에서 자주 사용됩니다. 이러한 방식의 주요 장점은 데이터 상태를 명확하게 제어할 수 있다는 것입니다. 예를 들어, 테이블 스키마와 데이터 셋을 정확하게 정의하고자 할 때 SQL로 초기화하는 것이 유리합니다.

반면, @BeforeEach를 사용하는 방식은 상태를 기반으로 하는 간단한 초기화에 유용합니다. 특히 스프링 부트에서 제공하는 @DataJpaTest와 같은 테스트 어노테이션을 사용할 때 @BeforeEach와 함께 사용하면 테스트 환경을 빠르고 쉽게 설정할 수 있습니다. @BeforeEach는 각 테스트 실행 전에 전처리를 수행하기 때문에, 동일한 상태의 기반 데이터를 필요로 하는 테스트의 경우 유용합니다.

실제 복잡한 프로젝트에서는 테스트의 목적과 요구 사항에 맞추어 적절한 초기화 방법을 선택해야 합니다. 예를 들어, @AutoConfigureTestDatabase 애노테이션을 사용하여 테스트용 데이터베이스 설정을 자동으로 구성할 수 있으며, 실제 데이터베이스를 대상으로 테스트를 수행하고자 한다면 Replace.NONE 옵션을 사용하여 실제 데이터베이스를 이용하도록 설정할 수 있습니다.

본질적으로, 테스트를 위한 데이터베이스 초기화 방법은 프로젝트의 요구와 테스트 작성자의 선호도에 따라 결정됩니다. 명확한 출처가 필요한 경우, “Spring Boot Reference Documentation v3.1.5”의 18.9절 “Database Initialization” 및 7.8.3절 “Auto-configured Data JPA Tests”에 관한 가이드를 참조하실 수 있습니다.

참고 URL:
- 데이터베이스 초기화: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.data-initialization
- 자동 구성된 Spring Data JPA 테스트: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.testing.spring-boot-applications.autoconfigured-spring-data-jpa

도움이 되셨길 바랍니다.