본문 바로가기

분류 전체보기

(35)
[iOS] 나만의 이미지 캐싱 SDK만들기(다운샘플링, 디스크 & 메모리 캐싱) 저번글에서 이미지 캐싱에 대해 다뤘던 적이 있습니다. 추가적으로 학습을 하다보니 제가한 설계한 객체가 다소 객체지향에 어긋나고, 이미지 최적화에 있어 다소 미흡함을 알게되었습니다.  그래서 추가적인 학습을 통해 객체지향적 설계를 확립하고 다운샘플링 기술을 적용한 나만의 SDK를 만들어보자고 결정했습니다.   우선 앞선 iOS환경에서 바이너리 정보가 어떻게 이미지로 표출되는 지 이해할 필요가 있었습니다.  iOS의 이미지 프로세싱 우선 인터넷 서비스를 통해 혹은 로컬 저장소에서 불러온 이미지 정보는 모두 단순히 이진 데이터입니다. 해당 데이터들이 디코딩을 통해서 iOS내에서 시각화할 수 있는 이미지 버퍼(UIImage)로 변환되게됩니다. 최종적으로 시각화 형태의 데이터만이 지속적으로 메모리에 남게됩니다. ..
[iOS] Fun하지 않은 정적/동적 라이브러리와 Symbol 빌드세팅의 Mach-O 타입을 설정하여 빌드할 타겟이 어떤 결과물이 될 것인지 설정할 수 있다.  그중 가장 대표적인 형식이 정적/동적 라이브러리이다.  여러 기술블로그들을 통해 "정적라이브러리는 리소스를 가지지 않는다." 같은 내용은 많이 봐왔다.  하지만 이러한 내용은 실제개발시 발생한 문제를 해결하는데 별로 도움이 되지 않았다.  아래 사진과 같이 복잡한 모듈 구조에 대해 각각의 모듈들이 어떤 형식을 가져야 최적화 될 수 있을까? Tuist를 사용하여도 빌드시 코드가 중복될 수 있고, 심볼 충돌이 발생할 수 있다. 이를 어떻게 해결할 수 있을까?  이번글이 모든 문제를 해결하는 해결책은 아니지만, 개발을 하며 알아낸 사항들에 대해 다뤄 보려고한다.  빌드결과물빌드의 가장 작은 단위는 Swift파일이..
[iOS] 케어밋 프로젝트 기술회고2: 재사용가능한 UI에 대해서 저번편에 이어 케어밋 프로젝트 회고를 마저 작성해보려고 한다.  GitHub - 3IDLES/idle-iOS: SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋. Contribute to 3IDLES/idle-iOS development by creating an account on GitHub.github.com   의도를 잘 못 파악한 MVVM패턴 사용 🙃 해당 프로젝트는 MVVM패턴을 사용하여 UI와 데이터와 로직 각기다른 객체로 분리했다. UI는 말그대로 User Interface로써 데이터를 기반으로 시각화 정보 및 유저로부터 액션을 전달받는다. 데이터와 로직은 시각화할 정보와 특정..
[iOS] 케어밋 프로젝트 기술회고1: 클린아키텍처 근 3개월간 진행한 케어밋 프로젝트에 대한 기술적 회고를 진행해 보려고 한다. 기술의 진정한 의의를 알지 못한 채로 사용한 기술이 많아 회고를 통해 해당기술에 대한 장단점을 논해보려고한다. 우선 프로젝트의 깃허브 링크는 아래와 같다.   GitHub - 3IDLES/idle-iOS: SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋. Contribute to 3IDLES/idle-iOS development by creating an account on GitHub.github.com 4편에 걸쳐 회고하려는 주제는 다음과 같다. 뭔가 모바일 개발자가 한번쯤은 생각해볼 만한 주제라고 생각해서 글..
[iOS] 첫 어플리케이션 배포 심사 회고 첫번째 어플리케이션 배포를 앞두고  심사를 통과했다는 메일 받은 직후 심사과정을 회고해 보려고 합니다.  HIG와 배포 심사 애플은 일명 HIG라는 디자인 가이드라인을 제공합니다. HIG를 읽어보신 분들은 아시겠지만, HIG는 어떻게 해야하며 어떤 것이 잘 들어나야 한다 등 구체적인 부분을 강조합니다. 저도 HIG를 읽고 적용하려고 노력하지만, 그 양이 방대하고 모든 UI에 대한 규율을 하나하나 기억하는 것인 상당히 어렵다고 생각합니다. 따라서 HIG를 인자하돼 UI개발시 시중에 출시된 앱의 래퍼런스를 많이 참고하였습니다. (당근마켓, 토스) 레퍼런스를 바탕으로 어플리케이션의 현재 상태에 대해 유저에게 직관적으로 인지시키는 것을 가장 높은 우선순위로 하였습니다.    해당 마인드셋을 지향한 결과 총 50..
[Swift] 이미지 캐싱을 통한 로딩속도 최적화 안녕하세요 최근 프로젝트에 적용한 이미지 캐싱방법에 대해 회고해 보려고합니다. 우선 문제는 다음과 같았습니다. 크기가 큰 이미지의 경우 로딩속도가 생각보다 오래걸렸습니다. 화면상에 존재하는 이미지는 하나뿐이지만, 사용자가 리스트 형태로 주어지는 경우 반복적인 로딩은 유저경험을 크게 저하시킬 것이 분명했습니다. 따라서 이미지를 캐싱하기로 했습니다.  아래영상은 이미지 로딩 속도입니다.  KingFisher를 사용하지 않은 이유 이미지 캐싱을 위해 KingFisher라이브러리를 많이 사용합니다.   현재 개발중인 서비스는 iOS와 AOS에서 모두 동작합니다.  따라서 두 플랫폼에서 업로드한 이미지를 플랫폼에 상관없이 보여주기위해 파일 포맷을 통일하기로 했습니다.(iOS에 가장 최적화된 형식인 HEIC타입의 ..
[UIKit] UIViewController, modal 화면표시에 대해서(+커스텀) UIViewController를 Modal로 표시하는 것이 대해 글을 작성해 보려고 합니다.  "modal로 화면을 띄운다,,, modal로 표시를한다" 등 모달이라는 말이 화면과 관련된 말임은 알고 있었습니다.  하지만 정확히 어떤 목적을 의미하는 지는 생각하지 못했던 것 같습니다.  "modal로 띄운다는 진행중이던 흐름을 잠시 뭠추고, 새로운 작업이 생기며 그것을 해결해야 이전 플로우로 돌아갈 수 있다"  이 정도로 이해할 수 있습니다.  이렇게 이해하면 Alert를 왜 Modal로 방식으로 화면에 표시하는지 이해가됩니다.  진행중인 플로우를 끊고 잠시 Alert창을 유저가 확인해야하기 때문이죠.  UIVIewController의 present함수를 사용하면 Modal로 화면을 띄울 수 있습니다. ..
[아키텍처 패턴] MVP에서 VIPER까지 안녕하세요 오늘은 모바일 엔지니어링에 사용되는 아키텍처 패턴에 대해  경험을 통해 얻은 제 생각과 느낀점을 정리해 보려고 합니다.  MVC, MVP, MVVM, VIPER  이렇게 4가지에 대해 다뤄보려고 합니다.  아키텍처 패턴은 왜 사용하는가? 아키텍처 패턴은 시스템의 구조와 그 시스템을 구성하는 요소들 간의 상호작용 방식을 정의하는 패턴입니다.  정형화된 패턴은 작업을 진행하는 사람이 다수인 경우 가독성을 증가시킬 수 있는 장점이 있습니다.  만약, 작업을 하던 사람이 바뀌게 되어도 작업을 그대로 이어나갈 수 있게 됩니다.  또한, 기능에 대한 역할을 각영역에 분배하여 문제가 발생시 빠르게 그 원인을 찾을 수 있습니다.  종합적으로 보았을 때, 아키텍처 패턴은 시스템이 끊임없이 안정적으로 구동하는데..