API로 데이터를 불러올 때 반드시 Network Manager를 사용해야하는 것은 아니지만 사용하므로서 이점은
- 코드 재사용 - 여러 곳에서 네트워크요청을 할 때 중복코드 감소
- 일관성 - 한 곳에서 관리하므로 일관된 방식으로 처리가능
- 유지보수 - 변경이 필요할 때 쉽게 수정가능하다
- 중앙화된 에러처리로직 구현하기 쉽다
- 인터셉터 추가 - 요청/응답을 가로채서 공통 작업 (로깅,인증...)을 수행하기 쉽다.
간단한 앱이라면 URLSession을 직접 사용해도 충분할 수 있지만 확장가능성을 염두해둔다면 Network Manager로 관리하는 것이 좋다.
Network manager를 작성할때 포함되어야 하는 주요 항목
HTTP 메서드 지원
- GET, POST, PUT, DELETE 등의 기본적인 HTTP 메서드를 지원해야 합니다.
URL 구성
- 기본 URL과 엔드포인트를 조합하는 기능이 필요합니다.
파라미터 처리
- URL 쿼리 파라미터와 body 파라미터를 처리할 수 있어야 합니다.
헤더 설정
공통 헤더와 요청별 커스텀 헤더를 설정할 수 있어야 합니다.
응답 파싱
- JSON 등의 데이터를 Swift 객체로 변환하는 기능이 필요합니다.
에러 처리
- 네트워크 오류, HTTP 상태 코드 처리 등의 에러 핸들링 메커니즘이 필요합니다.
비동기 처리
- 요청의 비동기 처리를 위해 completion handler나 async/await 지원이 필요합니다.
인증 관리
- 토큰 기반 인증 등 필요한 인증 매커니즘을 처리할 수 있어야 합니다.
재시도 메커니즘
- 네트워크 오류 시 자동 재시도 기능을 구현할 수 있습니다.
로깅
- 디버깅을 위한 요청/응답 로깅 기능이 유용합니다.
캐싱 (선택적)
- 필요에 따라 응답 데이터의 캐싱 기능을 구현할 수 있습니다.