본문 바로가기

TIL

(41)
[TIL] Swift Concurrency 등장 배경 GCD vs Swift ConcurrencyGCD현재 Swift에서 동시성 프로그래밍에 가장 많이 사용되고 있는 API입니다. 이 GCD에는 크게 한 번에 하나의 테스크를 순차실행하는 Serial DispatchQueue와 많은 작업을 동시에(concurrent) 실행하게 해주는 Concurrent DispatchQueue라는 두 가지가 존재합니다. Queue라는 이름에서 유추할 수 있듯이 실행되는 순서는 선입선출(First-In First-Out)입니다.Swift ConcurrencyAsync/Await를 필두로 주로 클로저로 이루어저 있는 GCD의 코드 가독성을 향상시키고, 휴먼 에러로 발생할 수 있는 에러 처리를 컴파일 타임(compile time)에 처리하여 에러 처리에 대한 휴먼 에러를 미연에 ..
[TIL] Alamofire을 이용한 Token 갱신 적용 오늘은 Alamofire를 이용한 토큰(Token) 갱신에 대해 작성해보고자 합니다. RequestInterceptorAlamofire을 이용하여 토큰 갱신에 대해 구글링해보면 항상 등장하는 키워드는 RequestInterceptor입니다.Alamofire 공식 문서에 따르면 RequestInterceptor는 RequestAdapter 프로토콜과 RequestRetrier 프로토콜로 이루어진 프로토콜로 Session별 및 Request별 기능을 제공한다고 정의하고 있습니다. 이와 더불어 RequestInterceptor 프로토콜은 모든 네트워크 요청에 ​​공통 헤더가 추가되고 인증(Authentication) 이 만료되면 요청이 재시도되는 인증 시스템이 포함된다고 합니다. 여기서 RequestAdapt..
[TIL] TikTok 피드 구현 과정 소개본격적인 프로젝트에 들어가기 앞서 이번에 TikTok 피드처럼 UI를 구성하기 위해 따로 프로젝트를 만들어 미리 테스트 해본 과정을 소개하는 내용입니다. 참고 강의TikTok UI 에 대한 자료는 아래 강의를 기반으로 진행하였습니다.https://www.youtube.com/watch?v=j1w6Ed5-3tA 구현 과정위 강의 구현한 TikTok 피트 UI는 CollectionView를 이용하였습니다. 이는 CollectionView의 Cell이 TableView Cell보다 Size를 CollectionView Layout 설정을 통해 좀 더 명시적으로 지정해줄 수 있기 때문이라고 생각됩니다. 따라서 기본적으로 CollectionView를 구성해줍니다.  아래 코드는 Collection View를 ..
[TIL] Single에 대한 간단 내용 정리 RxSwift로 네트워크 코드 구성 Single에 대한 설명을 하기 앞서 우선 RxSwift스럽게 구성한 네트워크 통신 코드에 대해 이야기 하고자 합니다. 왜냐하면 이 코드를 기준으로 Single에 대해 설명할 예정이기 때문이죠. 다음 코드 스니핏은 RxSwift 스럽게 구성한 네트워크 코드입니다. static func fetchJoke() -> Observable { return Observable.create { observer -> Disposable in // 네트워크 통신에 관한 코드 작성.. return Disposables.create() } } 위 코드는 네트워크 통신을 위해 새로운 Observable을 생성하고, 또 네트워크 통신 결과로 Joke 타입의 인스턴스를 외부로 반환해 주고 있습..
[TIL] 스트림 공유 스트림 공유 스트림 공유란 말 그대로 스트림을 공유한다는 의미입니다. bind()의 스트림 공유 테스트 아래와 같이 코드를 구성 후 빌드를 해보겠습니다. let tap = signInButton.rx.tap .map { "안녕 \(Int.random(in: 1...100))"} tap .bind(to: emailTextField.rx.text) .disposed(by: disposeBag) tap .bind(to: passwordTextField.rx.text) .disposed(by: disposeBag) tap .bind(to: nicknameTextField.rx.text) .disposed(by: disposeBag) 그러면 빌드 결과로 아래와 같이 서로 다른 결과가 도출되는 것을 알 수 있습니다..
[TIL] RxSwift 간단 요약 정리 Observable VS Observer Observable 이벤트를 생성 및 방출 Observer 이벤트를 처리 Subscribe Observable과 Observer 사이를 연결하여 Stream(데이터 흐름)을 생성 Subject 등장 배경 Observable은 이벤트 방출만 할 수 있고, 이벤트에 대한 처리를 하지 못함 따라서 Observable과 Observer 역할을 모두 수행할 수 있는 Subject가 등장 종류 PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject 이중 PublishSubject, BehaviorSubject가 주로 사용된다. PublishSubject 초기값이 없는 빈 상태로 시작 구독(Subcribe) 이후 시점부터 ..
[TIL] RxSwift, TableView Cell에서 Tap 이벤트 발생 시 반드시 고려해야할 점 iOS 에서의 UI Cell 재활용 iOS에서는 UITableViewCell과 UICollectionViewCell을 사용할 때, 보여줘야할 Cell들을 모두 새롭게 생성하는 것이 아니라 화면에 보이는 부분만 생성하고 재활용하는 로직을 수행한다.(메모리 효율성 고려) 이때 일반적으로 Cell이 재활용되기 전에 초기화해야하는 설정들은 prepareForReuse() 메서드에서 처리해준다. RxSwift와 함께 사용되는 Cell RxSwift와 Cell을 함께 사용하는 경우, Cell이 재활용되는 시점 전에 구독(Subscribe)를 끊지 않으면 재활용시 구독이 그대로 남아있게 되어 예기치 못한 동작을 일으킬 수도 있다. 아래 예시를 들어보자 아래 예시는 Cell 내부의 어떤 버튼을 탭했을 때 다른 VC로 ..
[TIL] ATS에 대하여 경험한 이슈앱 출시를 위한 공공데이터포털 API 연결 중 아래와 같은 오류 문구를 만나게 되었습니다.아래 오류 내용을 살펴보면 SSL 에러가 발생했고, 서버에 안전한 연결을 할 수 없다고 나와있는데요.API는 단순히 연결만 하면되지! 라고만 생각했었던 저는 뜻하지 않은 오류를 만나게 되어 약간 당황했었습니다.하!지!만! 또 이 처음 만난 오류에 대해 포스팅을 해보는 것도 괜찮겠다 싶어 블로그에 포스팅을 남기게 되었습니다.sessionTaskFailed(error: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made."ATS란?갑작스런 주제에..