피드로 돌아가기
Making OAuth Testable: Rethinking OIDC Clients in JavaScript
Dev.toDev.to
Security

Mock 제거를 위한 Functional Core-Adapter 분리로 OIDC 테스트 신뢰성 확보

Making OAuth Testable: Rethinking OIDC Clients in JavaScript

Eugene Yakhnenko2026년 5월 3일10intermediate

Context

기존 OIDC 라이브러리는 프로토콜 로직, HTTP 통신, 스토리지 제어, 프레임워크 상태 관리를 하나의 추상화 계층에 통합함. 이로 인한 강한 결합도가 테스트 시 과도한 Mocking을 유발하며, 실제 프로토콜 동작이 아닌 Mock 구현체만을 검증하는 타우톨로지(Tautology) 문제 발생.

Technical Solution

  • 프로토콜 로직을 Pure Computation으로 정의하여 I/O 의존성이 없는 Functional Core 계층으로 분리
  • Framework-specific I/O 및 상태 관리를 담당하는 얇은 Adapter 계층을 설계하여 Core와 런타임 간 결합도 제거
  • Core 계층의 입출력 기반 Unit Test를 통해 HTTP 서버나 브라우저 없이 프로토콜 정확성 검증
  • Autentico 기반의 Disposable Identity Provider를 도입하여 테스트 케이스별 독립된 서버 환경 구축
  • State-free 테스트 환경 구성을 통해 테스트 간 간섭을 제거하고 실제 HTTP 교환을 통한 Integration Test 수행

- 외부 프로토콜 연동 로직에서 Side Effect(Fetch, Storage)를 제거하고 순수 함수 형태로 추출했는가? - 프레임워크 종속적인 코드와 도메인 로직이 단일 클래스/훅에 혼재되어 Mocking 비용이 증가하지 않았는가? - Integration Test 시 공유 상태를 가진 공용 서버 대신, 컨테이너나 바이너리 기반의 독립적인 Disposable 환경을 사용할 수 있는가?

원문 읽기