본문 바로가기

iOS

(30)
TCA(리덕스패턴)과 MVVM, 그리고 MVC [1] TCA로 만든 앱을 출시한 이후, RxSwift로 처음 프로젝트를 만들며 문득 든 두가지 생각이 있다. 1. Combine과 RxSwift를 이용한 MVVM 패턴도 데이터흐름을 이벤트 스트림으로 단방향으로 보내는 패턴인데...? 2. 그 코드의 양이 캡슐화로 인해 줄었을 뿐 MVVM과 TCA 아키텍쳐 또한 일종의 신호를 뷰에서 보내줘야 하는 것 아닌가...? 이 두 가지 질문에 대한 답을 공부하면서 MVC, MVVM, TCA에 대한 필자 나름대로 정리가 크게 되었다. 독자님들도 읽어보시면서 세가지 아키텍쳐 패턴에 대한 나름대로의 정립을 하셨으면 좋을 것 같다!! 먼저, 2번에 대한 답을 같이 알아보자! 그 코드의 양이 캡슐화로 인해 줄었을 뿐 MVVM과 TCA 아키텍쳐 또한 일종의 신호를 뷰에서 보내줘야..
소켓통신과 Sendbird swift와 RestAPI 글에서 마지막 부분에 etc.에 가볍게 socketAPI에 대해서 소개하였었다. 그리고 사실 그것은 전부 이 글을 쓰기위한 복선이었다! 전의 이미지 캐싱 글에서도 언급했듯이 프로젝트를 만들면서 공부할 목적으로 RxSwift와 RxCocoa를 이용하여 데이팅 앱을 만들고 있다. 그 중심 기능은 두 가지로 스와이프로 유저들을 like, pass 할 수 있고 채팅까지만 구현하는 간단한(사실 안 간단했다) 프로젝트를 기획했다. 사실 필자도 채팅 구현을 위해서는 소켓통신을 이용해야한다는 사실은 알고 있었지만, 그 이유가 서버와 클라이언트 사이에 양방향 통신이 가능하기 때문이라는 정도로만 알고 있고, 꼭 socket 통신을 이용해야만 하는건지, 다른 방식이 뭐가 있는 지에 대해서는 전혀 ..
이미지 캐싱? SDWebImage vs Kingfisher 1. 이미지 캐싱 UIKit Project로 샘플 데이팅앱(매칭 앱)을 만들어보았다. 데이팅 앱의 선조와도 같은 틴더에서 하듯이 스와이프하여 like와 pass를 할 수 있도록 구현하는데, 그 카드에 모든 유저의 정보가 다 담겨져 있다. 보통 이미지는 url의 형태로 저장되고 요청을 하게 되는데, 그 양이 많아질 수록 로딩시간이 오래걸리고, 같은 이미지를 다시 요청하면 작업을 한 번 더 반복하는 식이 되어버린다. 또, 그에 따라서 뷰가 버벅거리는 등 사용자 경험에도 안 좋은 영향을 미친다. 바로 이러한 경우 이미지 캐싱을 사용하여 이미지를 비동기적으로 부르는 방법을 선택한다. 캐시는 RestAPI 블로그 글에도 이야기 했듯이 임시 저장소 같은 곳인데, 이 곳에 저장을 해두고 비동기적으로 해당 이미지가 '..
Swift와 RestAPI - Rest? Api? 쉽게 좀 말해주세요... 코드작성에 어느정도 익숙해졌을 때 가장 경계해야 하는 마인드는 타성에 젖게되는 것이라고 생각한다. 처음에는 코드를 작성하기 위한 최소한의 이해만 하고 그렇게 고군분투하여 내가 원하는 것을 만들게 되면, 그 다음부터는 그 코드를 살짝 수정하여 재활용하거나 깃허브에서 서칭해서 내가 원하는 코드만 떼어오고, 그렇게 자연스럽게 작성하는 코드들의 정확한 작동을 잊어버리는 현상들이 일어나기 때문이다. 그래서 오늘은 아무리 코드를 밖에서 긁어오더라도 머리속에 자리잡혀 있어야 하는 RestAPI에 대한 최소한의 지식을 정리해보겠다. 그리고 다음으로는 Swift로 RestAPI 통신을 구현하기 위해 알아야할 지식들을 알아볼 것이다. *본 글은 컴퓨터과학적인 지식을 이해가 쉽도록 풀어서 쓰는 과정에서 다소 비약적인 비유가..
Swift Async - Await, Combine 원만한 합의 부탁드리겠습니다.(3 - 完) 이전의 글 발행 이후 세번째이자 마지막 글인 이 글을 쓰는 데에까지 시간이 오래 걸린 이유가 있다. 간단하고 쉬운 aysnc-await 쓰면되지 왜 굳이 어렵게 Combine을 쓰느냐에 대한 대답 자체는 간단했으나, 그에 대한 부가설명을 위해서 공부해야할 것이 정말 많았고, 공부한 것을 적용하며 이번에 출시한 SeoulSalam을 개발하고, 내 몸으로 느낀 것들에 대해서 쓰고 싶었기 때문이다. 그러면 지금부터 왜 Combine을 쓰는지, 그리고 그 이유들에 대한 부가설명을 시작하도록 하겠다. 1. Why Combine? 전에 알아봤던 대로 swift의 modern concurrency(async-await)는 정말 쉽고 간단하다. 그렇지만 Combine은 단순히 비동기 처리만을 위한 프레임 워크가 아니였..
WWDC2023 Swift Student Challenge에서 accepted 했으나 수상실패한 경험 회고 원래 목표가 accepted 였으니 내 목표는 달성했다. 하지만 막상 수상하지 못하니 아쉽긴 하다. 아무튼 내가 제출한 플레이 그라운드 앱을 소개하자면, Ho'oponopono 라는 명상 앱이고 같은 이름의 하와이의 명상법을 소개하는 앱이다. iPad앱의 HIG를 정리해놓은 글을 읽어보신 분이 있다면 위 이미지를 본 적이 있을것이다. 이는 내가 제출한 앱의 첫 화면이다. 앱은 부트캠프에 있을때 혼자서 재미삼아 많이 공부했던 swiftUI animation과 AVFoundation 이 두 가지만을 이용한 아주 간단한 앱이다. 사실 처음에 더 많은 기능들을 넣었었는데, 나의 패착이 하나 있었다. 처음 내가 챌린지의 요구사항들을 보았을 때, 나에게 든 생각은 음성인식이었다. iPad앱의 HIG를 정리해놓은 글..
TCA(The Composable Architecture) 아키텍쳐란? 해당 블로그 글은 구버전에서 작성된 소개글입니다. TCA 1.0 버전은 이 링크를 통해 학습하실 수 있습니다. 제가 직접 집필하였으며, 무료입니다. 이번에 출시한 앱 SeoulSalam에 적용된 아키텍쳐 프레임워크 TCA에 대해 공부한 내용을 공유해보도록 하겠습니다. https://www.pointfree.co/ Point-Free: A video series on functional programming and the Swift programming language. Point-Free is a video series exploring functional programming and Swift. www.pointfree.co TCA를 개발한 사람들의 공식 사이트이자, 이번에 공부하고 코드를 짤 때 제일..
fastlane을 통한 CI/CD 자동화 1. CI / CD? CI 는 Continuous Integration의 약자로 말 그대로 코드의 변경 사항들이 테스트 혹은 빌드 되어 레포에 지속적으로 통합되는 것을 의미한다. CD 는 Continuous Delivery로 CI가 끝난 시점에서 구축된 어플리케이션을 지속적으로 제공하는 것을 의미한다. CI/CD 파이프라인은 Code - Build - Test - Release - Deploy 로 구성이 되는데, 이 글에선 Test Release Deploy의 과정을 담아보도록 하겠다. 드림코딩에서 위 내용을 조금 더 세세하게 정리해놨으니 체크하면 좋을 것 같다. 2. Fastlane 이를 관리하는 여러가지 툴이 있는데, 이번에 출시하기로 하는 앱은 fastlane을 써보기로 했다. fastlane은 프..