Interceptor란?
서버에 요청을 보내기 전에, 중간에 가로채서 어떤 작업을 한 뒤 다시 서버로 보내는 역할
Alamofire를 사용하면 RequestIntercepter 프로토콜을 준수한 클래스의 인스턴스를 request에 실어서 보내면 동작.
- adapt(): API 호출 전에 urlRequest에 관한 처리를 가로채서 적용하는 메서드
- retry(): API 호출 결과가 Error인 경우, Error가 발생한 API를 다시 호출한것인지를 적용하는 메서드
참고: https://ios-development.tistory.com/730?category=899471
Interceptor 사용 예시
사용자가 access Token을 이용해 API통신을 할 때 401 에러가 발생하는 경우가 있다.
(401에러는 요청된 리소스에 대한 유효한 인증 자격이 없기 때문에 발생하는 에러이다.)
사용자가 잘못된 사용자 이름 또는 비밀번호를 입력했을 경우에 401에러가 발생할 수 있지만,
이외에도 토큰이 만료되는 경우에도 401 에러가 발생할 수 있다.
만약 인터셉터를 사용하지 않는 경우 일반적으로 자동 로그인을 설정한 사용자가 앱을 실행시켰을 때 자동으로 로그인되게 된다.
그러나 이 사용자의 토큰이 만료되는 경우 401에러를 발생시키며 자동으로 로그인을 할 수 없게 될 것이다.
이 상황에서 만약 인터셉터를 사용하게 된다면 토큰이 만료되어 401 에러를 발생하는 것은 동일하지만 retry() (메서드 안에 토큰을 갱신시키는 로직을 짜둔다면)를 활용해 다시 한 번 로그인을 시도하게 될 것이고, 이 때는 다른 오류가 없다면 정상적으로 자동 로그인이 실행되게 될 것이다.
그렇다면 access token 만료일이 없는 앱의 경우에는 인터셉터는 필요가 없는 것일까?
결론부터 말하면 Access Token 갱신이 가장 일반적인 예시일 뿐 다른 곳에서도 인터셉터를 활용할 수 있다.
Interceptor의 사용 사례
- Access Token 갱신: 가장 일반적인 사용 사례는 access token의 만료 기간을 감지하고, 갱신을 위해 자동으로 refresh token을 사용하는 것이다. 이렇게 하면 사용자는 로그인 상태를 계속 유지하면서, 애플리케이션이 서버에 새로운 access token을 요청할 수 있다.
- 인증 헤더 추가: 모든 네트워크 요청에 인증 정보를 추가하려면 interceptor가 유용하다. 이는 토큰을 헤더에 추가하거나, 다른 인증 정보를 처리하는 데 사용될 수 있다.
- 에러 처리 및 리다이렉션: 서버에서 오는 에러를 처리하거나, 특정 조건에 따라 리다이렉션을 수행하는 등의 작업도 interceptor에서 처리할 수 있다.
- 요청 및 응답 로깅: interceptor를 사용하여 네트워크 요청과 응답을 로깅하는 것은 디버깅 및 모니터링을 위해 유용하다.
- 캐시 처리: 요청이나 응답을 캐시하거나, 캐시된 데이터를 사용하려면 interceptor를 사용할 수 있다.
'iOS 개발' 카테고리의 다른 글
[iOS 개발] iOS 앱 용량 줄이기 (4) | 2025.02.15 |
---|---|
[iOS 개발] 브랜치 전략 세우기 (0) | 2023.11.17 |
[iOS 개발] OAuth 2.0이란? (3) | 2023.11.15 |
[iOS 개발] UserDefaults, KeyChain이란? (0) | 2023.11.10 |
[iOS 개발] Face ID, Touch ID 기능 개발 (2) | 2023.11.07 |