세션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