본문 바로가기

전체 글

(43)
[TIL] JSON으로 받은 에러 코드 통합 극복기(feat. RawRepresentable) 요즘 토큰 갱신 로직 구현을 위해 네트워크 요청 로직을 통합하고 있는데요. 이 와중에 열거형으로 정의된 에러 타입을 통합 정의하는데 큰 어려움 있어서 오늘 포스팅은 이를 극복했던 일에 대해 작성해 보고자 합니다. 문제 상황아래 코드는 네트워크 요청하는 메서드인데요. 아래 코드를 보시면 에러 타입을 Error 프로토콜을 준수하는 제너릭으로 구현되어 있습니다. 그리고 아래 코드를 보시면 Error 프로토콜을 준수하는 제너릭 타입 ErrorType은 initializer가 없다는 경고창이 뜹니다. 제가 위와 코드와 같이 에러 객체를 생성하려고 했던 이유는 아래 코드에서 아실 수 있듯이 모든 에러 타입이 원시값(Raw Value)을 가진 열거형으로 정의되어 있어 이 원시값을 가지고 어떤 네트워크 에러가 발생했는..
[TIL] 결제 기능 구현 지난 포스팅에서 결제 시스템 구조에 관해 간단히 정리해보았는데요. 오늘은 이 결제 기능을 직접 한번 구현해보는 과정에 대해 작성해볼까합니다.  포트원(PortOne)우리가 요즘 흔히 온라인 결제로 이용하는 간편 결제인 카카오페이, 네이페이 등이 있는데요. 각각의 결제 기능을 사용해주기 위해선 각 SDK 개별적으로 연결해주어야 합니다. 하지만 유저가 어떤 간편 결제를 사용할지 정해지지 않은 상태에서 이 수많은 간편 결제 SDK를 개별적으로 연결하는 것은 개발자 입장에서 아주 비효율적이라는 생각이 듭니다. 따라서 이러한 불편함을 극복하기 위해 등장한 것이 바로 포트원(PortOne) SDK입니다.포트원 SDK는 네이티브에서 결제 개발을 간편하게 구현할 수 있도록 도와주는 SDK로, 여러 PG 및 간편 결제를..
[TIL] 결제 시스템 구조 간단 정리(개념 정리) 오늘은 결제 기능 구현에 앞서 결제 시스템의 구조에 대해 간단히 정리해 볼까 합니다. VAN와 PG, 그리고 간편 결제결제시 시스템에서 가장 주요한 주체들인 VAN와 PG사에 대한 개념에 대해 간단히 알아보겠습니다.VANVAN(Value Added Network)은 오프라인 결제의 핵심으로, 한국말로는 부가가치통신망으로 불리며, 가맹점과 카드사를 이어주는 통신망입니다. 우리 생활에서 실례로 들어보자면 우리가 상점에서 제품을 구해하기 위해 카드를 긁거나 꽂아서 결제하게 되는 과정 중 발생하는 통신을 연결해 주는 통신망이 바로 VAN입니다. 이 VAN사로는 NHN한국사이버결제, 나이스정보통신 등이 있습니다.VAN 탄생배경과거 상점별로 취급하는 카드사가 달라 손님이 해당 상점에서 취급하는 카드를 가지고 있지 ..
[TIL] 열거형 Equatable 프로토콜 준수로 대소 비교 구현(feat. Alert 문제 해결) 현재 Alert 창을 열거형으로 정의하여 구분지어 구현중에 있는데요. 그러던 중 기존 Alert 열거형 값과 다른 연관값(Associated Value)으로 열거형 case를 정의하여 다른 연관값이 없는 Alert 열거형의 case들과 비교해야하는 상황을 마주하여 이를 해결한 방법에 대해 서술해 볼까 합니다.문제사항아래 이미지에서 보시는 바와 같이 Alert 구성 시 Alert Type이 비교가 안되는 오류를 마주하였습니다. 문제 원인 파악원인을 파악해보니 AlertType 정의가 연관케이스가 정의되어 있기 때문에 서로 대소 비교가 불가했던 것이었습니다.  해결방법AlertType이 Equtable 프로토콜을 준수하여 대소 비교가 가능하도록 구현하여 문제를 해결하였습니다. 마치며여기까지 읽어주셔서 정말 ..
[TIL] Redux 패턴 간단 정리 Redux 패턴 도입 배경이전 프로젝트에서 단방향 흐름인 MVI 패턴으로 구현하여 오류 발생 시 디버깅에 큰 장점을 누릴 수 있었지만 View별로 정의된 State 정의로 인해 State 간 상태 공유 관리가 생각보다 까다롭게 느껴졌습니다. 이에 단방향의 흐름을 유지하면서 한 곳에서 상태를 관리해줄 수 있는 방법이 없을까 하는 생각에 구글링을 하던 중 React 진영에서 상태를 한 곳(Store)에서 관리해주는 아키텍처인 Redux가 Swift에서도 구현가능하다는 정보를 접하여 이번에 새로 시작하려는 프로젝트부터 Redux 패턴을 도입하게 되었습니다.상태(State)란?우선 Redux에 대해 알아보기 전에 State란 무엇인지부터 살펴보겠습니다.Redux 공식문서를 확인해보시면 State의 정의는 다음과..
[TIL] SwiftUI에서 네트워크 단절 대응 구현기 오늘 포스팅은 SwiftUI에서 네트워크 단절 대응 기능을 구현하였던 과정에 대해 서술해 볼까 합니다. 네트워크 연결 모니터링 클래스 NWPathMonitorSwift에서 네트워크 단절 대응이라는 키워드를 구글링하면 나오는 키워드는 NWPathMonitor  클래스입니다. 이 클래스의 특징은 이름에서도 유추할 수 있다시피 네트워크 연결에 대해 실시간으로 모니터링해주는 클래스입니다.이 기능은 iOS12이후 버전부터 사용 가능하다고 합니다. 네트워크 모니터링 구현자 이제 그럼 네트워크 연결을 담당하는 클래스를 만들어 보겠습니다.네트워크 모니터링 클래스 선언 우선 NWPathMonitor 클래스의 인스턴스를 선언해줍니다.그리고 나서 네트워크 모니터링을 담당할 DispatchQueue를 선언해줍니다.외부로 네트..
[TIL] @AppStorage Custom Property Wrapper로 전환기 적용 동기아래 사진에서 빨간 박스로 표시되어 있는 것처럼 앱 로그인 시 프로필 이미지를 @AppStorage 프로퍼티 래퍼를 통해 UserDefaults에 저장하고 있습니다. 하지만 프로필 이미지도 유저의 개인정보로 취급될 수 있다고 생각하여 Token과 마찬가지로 Keychain에 저장해보기로 하였습니다. Property Wrapper란?Custom Property Wrapper를 만들기 앞서 Property Wrapper에 대해 간단히 알아보겠습니다. Property Wrapper란 Swift 5.1부터 도입된 개념이며,  Swift Programming Language Guide에 따르는 정의는 다음과 같다고 합니다.A property wrapper adds a layer of separation ..
[TIL] 여러 Destination이 있을 때 화면 관리법 배경아래 사진들을 보시면 프로필 화면에서 각각 닉네임 화면과 연락처 화면으로 이동하는 것을 알 수 있습니다.이처럼 오늘은 한 화면에서 여러 화면으로 이동하려고 할 때 어떻게 관리해주면 될지 알아보도록 하겠습니다. 구현 방법구현 방법은 아주 간단합니다. 바로 NavigationLink의 tag와 selection을 이용하면 되는데요. 구현 코드는 아래와 같습니다.struct ContentView: View { @State private var selection: String? = nil var body: some View { NavigationView { List { NavigationLink("1", t..