본문 바로가기

전체 글

(193)
[Clean Architecture] 책 읽기 7장 ~ 11장 3부 설계 원칙 좋은 소프트웨어 시스템은 깔끔한 코드로부터 시작한다. 좋은 아키텍처를 정의하는 원칙을 SOLID 라고 하고 이 원칙을 준수해서 작성하는 코드는 좋은 아키텍처를 만들 수 있다. SOLID 원칙은 클래스를 만들고 결합하는 방법에 대해 설명해준다. (여기서 클래스는 단순히 함수와 데이터를 결합한 집합의 의미) SOLID 원칙의 목적은? 중간 수준의 소프트웨어 구조가 1. 변경에 유연하고 2. 이해하기 쉽고 3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 될 수 있도록 만드는 것이 목적이다. (중간 수준의 소프트웨어는 모듈 수준이라고 이해하면 된다. 코드 레벨의 상위) 이 책의 설명 순서는 다음과 같다. SOLID -> 컴포넌트 세계의 SOLID를 대응하는 원칙 -> 고수준 아키..
UI업데이트를 메인스레드에서 해야하는 이유 with 데드락 문제 ㅇㅅㅇ 카테고리를 선택해서 필터링 된 리스트를 보여주는 화면에서 문제가 발생했다. 1. 앱이 튕기거나 2. 화면이 멈춰서 아무런 동작을 할 수 없었다. (앱은 돌아가지만 화면 터치가 막힌 상태) 자세히 살펴보면 데드락이 발생했고, outstanding async updates (비동기적으로 업데이트가 발생한 상태에서 해당 업데이트가 완료되기 전에 다른 업데이트가 추가로 발생하는 것) 가 있는 메인큐에서 이 메서드를 호출하는 것은 허용되지 않는다고 한다. 문제가 됐던 코드 원인이 되는 코드를 찾아 스레드를 거슬러 올라가보니 컬렉션 뷰의 데이터를 업데이트하는 코드를 찾을 수 있었다. 이 문제가 되는 코드를 빠르게 찾을 수 없었던 이유가.. 어째서인지 문제 발생한 코드는 단순히 subscribe를 하고 ..
[Clean Architecture] 책 읽기 1장 ~ 6장 분명 책은 1년 전에 샀지만 그때 당시에는 함수형 프로그래밍? 그게ㅔ뭔ㄷ.. 시절이라 흥미가 가지 않던 책이었는데 iOS에서 클린 아키텍처를 직접 프로젝트에 적용해보니 개발시간이 단축되는 느낌이나 편리한 느낌이 있었다.. 근데 왜 편리한지, 왜 객체 지향 설계 원칙을 준수하면서 아키텍처를 만들었는지, 근본적인 물음이 해결되지는 않았기 때문에 책을 읽으면서 생각을 정리해보려고 한돠,, 1장. 설계와 아키텍처란? 제대로 된 소프트웨어를 만들면 아주 적은 인력만으로도 새로운 기능을 추가하거나 유지보수할 수 있다. 변경은 단순해지고 빠르게 반영할 수 있다. 결함은 적어지고 잦아든다. 최소한의 노력으로 기능과 유연성을 최대화할 수 있다. 이런 일을 가능하게 해주는 것이 아키텍처라고 한다. 여기서 중요한 말은 유연..
Figma-export로 color, icon, image, typography를 자동으로 export 해보기 결론부터 말하자면 다 하고보니 피그마 유료버전만 사용 가능해서 결국은 사용하지 못했지만.. 추후에 다시 사용할 때를 대비하여 멤모멤모 Figma color 일일이 asset 추가 + SwiftGen 지난 프로젝트에서 Figma로 디자인 시스템을 간단히 만들고 asset에 추가했는데 이때 color picker로 light, dark 모드 컬러를 하나하나 찍으면서 추가했어서 정말 오래걸리고 부정적인 경험이었다ㅠ 가끔 멍때리다가 잘못 찍으면 이렇게 추가하고는 SwiftGen 이라는 오픈소스를 사용해서 assets에 있는 컬러들을 자동으로 코드로 변환해주도록 사용했었다. https://github.com/SwiftGen/SwiftGen 이 부분에선 자동으로 생성해주니 편안했는데 color를 추가하거나 변경할때..
[두깃] 1.0.1 업데이트 하면서 배운 것 다시 취준을 하게되었고 두깃을 쓰면서 위젯 기능도 추가해보고 싶어 간단하게 업데이트를 하기로 했다. 오랜만에 코드를 보았는데 컨벤션이 엉망이었다. 나름 컨벤션을 지키면서 코드를 짰다고 생각했는데 버캠 팀원들이랑 컨벤션을 꼼꼼하게 정하고 다시 보니 도대체 무슨 기준으로 코드를 짰던 거지 일단 보이는 부분만 수정하니 모든 파일을 수정하는 대작업을 할 수 있었다.. 버저닝 출시 직후는 1.0 버전인데 이후에는 어떻게 버저닝을 할지 찾아보았다. major.minor.etc major : 호환이 안되는 변경, 프레임워크 변경, 함수 삭제, 이름 변경 등 구조 자체가 변화하는 커다란 변경사항이 있을 때 minor : 호환이 가능한 변경, 기능 추가, 컴포넌트 추가, 클래스 추가, 함수 추가 등 변경사항이 추가될 때..
[burstcamp] Remote PushNotification 도입 2편 - 어디서나 푸시알림 받아서 디테일 화면 띄우기 https://luen.tistory.com/211 [burstcamp] 백엔드 개발자 없이.. Remote PushNotification 도입 1편 - Firebase Functions 푸시알림 왜 썼나? burstcamp는 캠퍼들의 블로그 글들을 모아서 보여주는 앱인데, 앱을 들어오지 않고도 글을 추천해서 보여줄 수 있도록 푸시알림을 도입하게 되었습니다. 어떤 푸시알림? 로컬에 luen.tistory.com 1편에서 푸시알림을 보내고 이제 앱에서 푸시알림을 받을 수 있게 되었습니다! 앱에서 처리해야 할 일은 이제 푸시알림을 탭했을 때 디테일화면을 띄워주는 일이 남았네요. 두가지의 경우를 처리해줘야 합니다. - 백그라운드에서 알림을 받았을 때 - 포그라운드에서 알림을 받았을 때 백그라운드와 포그라운드에..
[burstcamp] 백엔드 개발자 없이.. Remote PushNotification 도입 1편 - Firebase Functions 푸시알림 왜 썼나? burstcamp는 캠퍼들의 블로그 글들을 모아서 보여주는 앱인데, 앱을 들어오지 않고도 글을 추천해서 보여줄 수 있도록 푸시알림을 도입하게 되었습니다. 어떤 푸시알림? 로컬에서 보낼까, 서버에서 보낼까 캠퍼들에게 하루에 한 번 12시 16분에 최신 글을 추천해주는 푸시알림을 도입하기로 했기 때문에 로컬에서 보내는 푸시알림은 사용할 수 없었고, RSS 피드를 긁어오기 위해 Firebase Functions를 사용하고 있었기 때문에 Firebase Functions를 사용하여 푸시알림을 보내기로 하였습니다. 앱에 푸시알림을 추가하자 저희는 p8 방식을 사용하여 파이어베이스에 등록하였습니다. 과정은 참조글에 있는 글을 참조하였습니다. 더보기 참조 글 https://gyuios.tistor..
[burstcamp] 이미지 캐시 개선하기 (NSCache Limit, DownSampling) 처음 Image Cache를 구현했을 때 사용한 방식은 다음과 같습니다. 프로필 사진의 경우 1. memory cache (NSCache) 2. disk cache (File Manager) 3. Network 요청 후 memory, disk cache 저장 피드 이미지의 경우 1. memory cache (NSCache) 2. Network 요청 후 memory, disk cache 저장 개선점 1. NSCache Limit NSCache는 메모리를 많이 사용할 때 자동삭제 정책을 지원하지만, limit을 지정해주지 않으면 다 쓸 때까지 써버리는? 문제가 있었습니다. 위의 사진처럼 사용하면 할수록 올라가는 메모리.. var countLimit: Int var totalCostLimit: Int 최대 몇..