세션9. 예상하지 못한 테스트 실패

1. 내부 설계에 의존하는 테스트

클라이언트 대상 출력이 없는 비기능 요구사항 (ex, 비밀번호 암호화)

  • 때때로 비기능 요구사항은 클라이언트 대상 출력이 존재하지 않는다.

  • 비밀번호 암호화는 예상하지 못하게 데이터가 유출된 상황에 대비하기 위한 비기능 요구사항으로, 암호화된 비밀번호는 어떤 클라이언트를 대상으로도 직접 출력되지 않는다.

  • 이런 경우 테스트는 예외적으로 내부 설계에 접근한다.

판매자 비밀번호 암호화 테스트의 내부 설계 의존

PasswordEncoder 인터페이스

  • Spring Security Crypto 모듈이 제공합니다.

    • org.springframework.boot:spring-boot-starter-security 의존성으로 설치할 수 있습니다.

  • String encode(CharSequence rawPassword)

    • 원본 비밀번호를 암호화합니다.

  • boolean matches(CharSequence rawPassword, String encodedPassword)

    • 암호화된 비밀번호가 원본 비밀번호와 일치하는지 확인합니다.

2. Spring 빈 등록

PasswordEncoder Spring 빈

  • PasswordEncoder 인터페이스는 비밀번호를 암호화하는 기능을 정의하지만, 그 구현은 제공하지 않습니다.

  • 비밀번호 암호화에 사용할 방법을 결정하고 적절한 구현체를 Spring 빈으로 등록해야만 Spring 컨테이너가 PasswordEncoder 빈을 제공할 수 있습니다.

Pbkdf2PasswordEncoder 클래스

  • PBKDF2(Password-Based Key Derivation Function 2) 알고리듬을 사용하는 PasswordEncoder 구현체입니다.

  • Spring Security Crypto 모듈이 제공합니다.

코드 구현

  • 하지만 기대와 다르게 모든 테스트가 실패한다.

  • 이는 Spring Security 의존성을 추가하면서부터 모든 테스트에 영향을 미치기 시작했다.

3. 원래 잘 되던 건데요?

소프트웨어 회귀 (software regression)

  • 소프트웨어 회귀는 이전에 작동했던 기능이 작동을 멈추는 소프트웨어 버그의 한 유형이다.

  • 이는 새로운 기능 추가 및 버그 수정을 포함하여 소프트웨어 소스 코드에 변경 사항이 적용된 후에 발생할 수 있다.

  • 스프링 프로젝트에서는 의존성을 추가하는 시점에 소프트웨어 회귀가 잘 일어난다.

코스 수정

  • DefaultSecurityFilterChain 의존성을 추가하고 테스트 실행 시 소프트웨어 회귀가 해소된 것을 볼 수 있다.

  • 이를 통해 판매자 등록 API 개발을 완료헀다.

Last updated