-
Notifications
You must be signed in to change notification settings - Fork 1
ASNetworkKit
Sangwon edited this page Dec 1, 2024
·
1 revision
- 네트워크 동작을 관리하는 객체
struct ASNetworkManager: ASNetworkManagerProtocol {
private let urlSession: URLSessionProtocol
private let cacheManager: CacheManagerProtocol
}
- http 요청의 url 구성요소를 정의하고 속성을 안전하게 업데이트하는 프로토콜
public protocol Endpoint<Path> {
associatedtype Path: CustomStringConvertible
var scheme: String { get }
var host: String { get }
var path: Path { get set }
var method: HTTPMethod { get set }
var headers: [String: String] { get set }
var body: Data? { get set }
var queryItems: [URLQueryItem]? { get set }
var url: URL? { get }
func update<T>(_: WritableKeyPath<Self, T>, with _: T) -> Self
}
- endpoint에게 type(get, post 등)의 요청을 보내는 함수
- body를 넣을 수 있으며
- option으로 캐싱 유무를 전달
func sendRequest(
to endpoint: any Endpoint,
type: HTTPContentType,
body: Data? = nil,
option: CacheOption = .both
) async throws -> Data
- HTTP 요청의 Content-Type을 정의하고, 해당 타입에 맞는 헤더와 바디를 생성하는 기능 제공
enum HTTPContentType {
case none
case json
case multipart
func header(_ boundary: String) -> [String: String] {}
func body(_ boundary: String, with data: Data?) -> Data? {}
}
- 📒 기획의 과정과 의도
- 📒 swift6 도입기 ‐ @unchecked Sendable을 사용해야만 했던 이유
- 📒 WaveForm(파형) 제작기
- 📒 프로젝트 구조와 이유
- 📒 화면 전환(Game NavigationController)
- 📒 DIContainer를 사용한 계기
- 📒 AudioHelper 제작기
- 📒 음악 플레이어의 compact 버전 제작기
- 📒 Combine을 이용한 데이터 전달
- 📒 파이어베이스를 쓰며 있었던 일
- 📒 캐싱 모듈 구현과 문제점
- 📒 로그 시스템 제작기
- ❗ Data 끼리의 비교
- ❗ 프레임워크 Reference 안잡히는 문제
- ❗ actor 안에서 timer가 실행되지 않는 문제
- ❗ NSLayoutConstraint 옵셔널 문제
- ❗ 테이블 뷰가 보고 있는 배열과 bind하고 있는 배열 간의 race condition 문제
- ❗ 테스트끼리의 독립성
- ❗ 네트워크 테스팅 시 Error 핸들링
- ❗ 여러 클라이언트가 서버에 동시 요청시, 데이터가 반영이 안되는 이슈 해결
- ❗ 의존성 framework 추가시 불러오지 못하는 문제
- ❗ Timer를 6초 설정해도 더 실행되는 문제
- ❗ Music Kit Data Request 에러
- ❗ DI Container 에서 생성한 인스턴스가 동시에 존재 하는 이슈