-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
개요
- 옵션 설정이 가능한 APIClient 만들기
문제 상황
- 이전 APIClient 구현은 옵션 설정이 어려운 단일 shared 객체를 제공했습니다.
- 그러나 각각의 요청들은 인터셉터가 필요없는 경우도 있고, timeout의 조정이 필요한 경우가 있는 등 주어야 할 옵션이 다른 경우가 있습니다.
- 현재 구조로는 이러한 상황에 대응하기 어려워 APIClient 구조의 변경이 필요합니다.
고민 과정
Session 주입받기
- 이러한 설정들은 보통 Session 생성 시 설정해줄 수 있습니다.
- 한 번 생성된 Session에 대한 설정 변경은 반영되지 않기 때문에 필요한 설정마다 Session을 초기화해 제공해야 합니다.
- 하나의 APIClient를 유지하며 필요한 상황마다 세션을 바꿔끼워주는 방법은 요청이 진행중이던 이전 세션이 사라지기 때문에 좋은 방법이 아닙니다.
- 따라서 APIClient 초기화 시 Session을 초기화해 주입하는 방식을 사용해볼 수 있겠습니다.
- 그런데 Session을 초기화해 주입하는 방식은 APIClient의 사용 방식을 외부에 의존하게 되고, Session에 대한 관리를 사용자에게 맡기게 됩니다.
- 이러한 방식은 사용하는 쪽에서 Session을 알아야 해서 Alamofire까지 import해야 하는 단점이 있습니다.
- 또한 중복되는 세션을 여러 번 생성하는 등의 나쁜 사용 사례가 발생할 가능성을 모듈 차원에서 차단하기 어렵다는 단점도 있습니다.
Request에 옵션 주기
- 인터셉터는 Session이 아닌 Request에 대해서도 지정할 수 있습니다. 인터셉터
- Timeout은 Session에 설정되어 있는 Timeout보다 더 적은 숫자로 Request에 대해 지정 가능합니다. 타임아웃
- 따라서 Session은 건드리지 않아도 Request에 옵션을 주는 것 만으로 원하는 요청 수행이 가능합니다.
- Timeout이 길어야 하는 경우엔 기본 Timeout 설정값이 긴 Session을 APIClient에서 제공하도록 구현할 수 있습니다.
- 각 Request마다 옵션을 주는 방식이 Session에 비해 유연성이 높고 사용성이 좋다고 생각됩니다.
해결 방안 제시
- 따라서 저는 세션 주입에서 Request에 옵션 주입으로 방식을 바꾸면 저희가 취하고 싶은 장점들을 모두 취할 수 있다고 생각합니다.
- 이 접근 방식에서 간과한 부분이 있는지, 추가로 고려해야 할 점이 있을지 여러분의 의견이 궁금합니다!
Reactions are currently unavailable