401 에러, 로그인 화면으로 보내지 마세요!
401 에러(Unauthorized) 발생 시, 사용자 입력 데이터 손실을 유발하는 로그인 페이지 리다이렉션 문제를 지적하며 사용자 경험 저해(Poor User Experience)를 비판
액세스 토큰(Access Token) 만료 시, 리다이렉션 대신 백그라운드 토큰 갱신 또는 재인증 요청을 통해 데이터 손실 방지(Data Loss Prevention)를 강조
Playwright를 활용하여 토큰 만료 상황을 시뮬레이션하고, 401 에러 처리 로직(401 Error Handling Logic)을 검증하는 테스트 자동화 방법 제시
네트워크 오류 및 토큰 만료를 회복 가능한 오류(Recoverable Error)로 처리하여, 사용자에게 안정적인 서비스 제공(Stable Service Delivery)의 중요성을 강조
401 에러(Unauthorized) 처리의 문제점
일반적으로 액세스 토큰(Access Token) 만료 시, 401 에러(Unauthorized)를 반환받고 즉시 로그인 페이지로 리다이렉션하는 방식은 사용자 경험을 심각하게 저해한다.
데이터 손실: 미완료된 폼(Unsaved Form), 댓글, 설정 등이 초기화되어 사용자는 모든 작업을 다시 해야 함
보안 vs 편의성: 개발자들은 보안을 이유로 이 방식을 고수하지만, 사용자 편의성(User Convenience)을 희생하는 트레이드오프(Trade-off) 발생
해결책: 401 에러를 회복 가능한 오류(Recoverable Error)로 간주하고, 백그라운드 토큰 갱신 또는 재인증을 시도해야 한다.
결과적으로, 401 에러는 단순히 세션 만료가 아닌, 애플리케이션의 복구 메커니즘(Recovery Mechanism)을 작동시키는 트리거(Trigger)로 간주해야 한다.
토큰 갱신(Token Refresh) 및 재시도 로직
401 에러 발생 시, 리다이렉션 대신 토큰 갱신(Token Refresh) 및 재시도 로직을 구현하여 사용자 경험을 개선할 수 있다.
인터셉트(Intercept): axios 인터셉터(axios Interceptor)를 사용하여 401 에러를 감지
큐잉(Queue): 실패한 요청을 큐에 넣고, 토큰 갱신(Token Refresh)을 시도하는 동안 요청 일시 중지
갱신(Refresh): 리프레시 토큰(Refresh Token)을 사용하여 백그라운드에서 새로운 액세스 토큰 획득
재시도(Retry): 새로운 토큰으로 원래 요청을 다시 시도
이러한 과정을 통해 사용자는 페이지 리로드(Page Reload) 없이 작업을 계속할 수 있으며, 폼 데이터 손실을 방지할 수 있다.
Playwright를 활용한 401 에러 테스트 자동화
Playwright를 사용하면 토큰 만료 시나리오를 시뮬레이션하여 401 에러 처리 로직(401 Error Handling Logic)을 효과적으로 테스트할 수 있다.
카오스(Chaos) 테스트: 요청 인터셉션(Request Interception)을 통해, 특정 요청의 Authorization 헤더(Authorization Header)를 제거하여 401 에러 강제 발생
테스트 시나리오: 로그인, 폼 채우기, 저장 시도, 401 에러 발생, 토큰 갱신, 저장 성공 여부 확인
코드 분석: Python/Playwright 코드를 통해, 테스트 케이스(Test Case)의 구조와 Playwright API 사용법을 이해
Playwright를 활용하면, 수동 테스트(Manual Testing)의 번거로움을 줄이고, 지속적인 테스트(Continuous Testing)를 통해 애플리케이션의 안정성을 확보할 수 있다.
실제 프로덕션 환경에서의 고려 사항
실제 프로덕션 환경에서는 다양한 요소를 고려하여 401 에러 처리 로직을 구현해야 한다.
모바일 환경: Playwright를 사용할 수 없는 환경에서는 카오스 프록시(Chaos Proxy)를 사용하여 네트워크 레벨에서 헤더 조작
예외 처리: 토큰 갱신 실패, 네트워크 오류 등 예외 상황에 대한 적절한 에러 처리(Error Handling) 및 사용자 피드백 제공
보안: 리프레시 토큰(Refresh Token)의 안전한 저장 및 관리, CSRF(Cross-Site Request Forgery) 공격 방지를 위한 추가적인 보안 조치
결과적으로, 401 에러 처리는 단순히 기술적인 문제가 아니라, 사용자 경험(User Experience), 보안(Security), 시스템 안정성(System Stability)을 모두 고려해야 하는 중요한 설계 결정이다.