반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

개키우는개발자 : )

스프링 부트의 자동 구성과 테스트로 전환 본문

토비의 스프링 부트 - 이해와 원리/섹션11 - 스프링 부트 자세히 살펴보기

스프링 부트의 자동 구성과 테스트로 전환

DOGvelopers 2025. 1. 4. 00:41
반응형

요약 및 핵심 개념

이 문서는 직접 작성했던 스프링 부트 코드와 스프링 부트의 자동 구성 기능이 실제로 동일하게 동작하는지 검증하는 과정을 설명합니다. 또한, 스프링 부트의 테스트 프레임워크를 활용해 자동 구성 및 테스트 코드를 간소화하고, 자동 구성의 원리를 이해하는 데 중점을 둡니다.


핵심 내용

1. 직접 작성한 코드와 스프링 부트 자동 구성 비교

  • 자동 구성 코드 삭제:
    • 이전에 작성한 모든 수동 구성 코드(데이터 소스, JDBC 템플릿, 서블릿 컨테이너 등)를 삭제.
    • 스프링 부트의 기본 자동 구성을 통해 동일한 기능을 구현 가능 여부 확인.
  • 스프링 부트의 동작 방식 확인:
    • @SpringBootApplication에 포함된 @EnableAutoConfiguration 및 @ComponentScan 애노테이션을 통해 자동 구성 원리를 이해.

2. 테스트 환경에서 스프링 부트 활용

  • 프로퍼티 설정:
    • 스프링 부트의 자동 구성이 요구하는 표준 프로퍼티 이름(spring.datasource.driverClassName, spring.datasource.url, spring.datasource.username, 등)으로 수정.
    • 기존의 간단한 프로퍼티를 스프링 부트 스타일에 맞게 변경.
  • 테스트 코드 변경:
    • 스프링 부트가 제공하는 테스트 유틸리티(@SpringBootTest, @JdbcTest)로 전환.
    • 테스트 수행 시 임베디드 데이터베이스를 활용하여 빠른 수행 및 독립성 유지.

3. 스프링 부트의 테스트 도구 활용

  • @JdbcTest 활용:
    • JDBC 관련 빈만 로딩하여 데이터 소스 및 템플릿 관련 테스트를 빠르게 수행.
    • 임베디드 데이터베이스를 사용하여 빠른 테스트 환경 제공.
  • @SpringBootTest 활용:
    • 애플리케이션 컨텍스트를 전체적으로 로드하여 통합 테스트 수행.
    • 웹 환경을 포함하거나 제외하는 옵션(webEnvironment)을 설정하여 테스트 환경을 구성.

4. 테스트 시 주요 이슈와 해결

  • 트랜잭션 롤백 문제:
    • @Transactional 애노테이션이 없을 경우, DB 변경 사항이 테스트 간 영향을 미칠 수 있음.
    • 테스트에서 데이터 독립성을 유지하기 위해 롤백 설정 필요.
  • 임베디드 DB 교체:
    • 테스트 시 운영용 DB 대신 임베디드 DB를 사용하여 속도와 효율성 향상.
    • 자동으로 설정된 임베디드 DB가 테스트 코드에 적합한지 확인.
  • 서버 띄우기 테스트:
    • webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT를 사용하여 실제 톰캣 서버를 지정된 포트로 실행.
    • API 레벨에서의 동작을 확인하는 통합 테스트 수행.

5. API 테스트 및 자동 구성 검증

  • API 동작 검증:
    • 수동 테스트와 API 테스트를 통해 HelloService의 카운트 기능이 제대로 동작하는지 확인.
    • 톰캣 서버를 실행하지 않고도 테스트 환경에서 API 호출 가능.
  • 자동 구성의 동일성 확인:
    • 직접 작성한 코드와 스프링 부트의 자동 구성이 동일하게 동작하는지 확인.
    • 자동 구성 클래스가 적절히 작동하여 서블릿 컨테이너, 데이터 소스, JDBC 템플릿 등이 정상적으로 초기화됨을 검증.

결론

  1. 스프링 부트의 자동 구성 검증:
    • 직접 작성한 코드와 스프링 부트 자동 구성이 동일한 결과를 제공함을 확인.
    • 표준화된 프로퍼티 설정과 자동 구성 클래스의 동작을 확인.
  2. 테스트 환경 개선:
    • 스프링 부트 테스트 유틸리티(@SpringBootTest, @JdbcTest)를 활용하여 빠르고 독립적인 테스트 환경 구성.
    • 트랜잭션 롤백을 설정하여 테스트 간 데이터 간섭 방지.
  3. API 및 통합 테스트:
    • API 호출 테스트와 통합 테스트를 통해 실제 서비스 및 데이터베이스의 동작을 검증.
  4. 다음 단계:
    • 스프링 부트의 다양한 자동 구성 기능(JPA, Redis, 클라우드 서비스 등)을 활용하는 방법을 학습.
    • 자동 구성 동작 원리와 커스터마이징 전략을 탐구하여 효과적으로 제어하는 방법을 배울 예정.

스프링 부트의 기본 원리와 자동 구성 동작을 깊이 이해한 이 과정을 기반으로, 다음 단계에서는 더 복잡한 기능을 다룰 수 있는 준비를 마쳤습니다.

반응형
Comments