Wayne's World A long term memory storage https://mildwhale.github.io/ 코드 리뷰하기 좋은 PR 만들기 효율적인 협업을 위한 커밋과 브랜치 전략 - 두 달 뒤면 카카오스타일 입사 2주년이 됩니다. 그동안 iOS 개발자가 계속 늘었는데, 동료가 많아지는 만큼 리뷰해야 하는 PR도 점점 늘어났습니다. 하루 종일 코드 리뷰만 하는 날도 있었고, 종종 너무 큰 PR은 적당히 마무리했던 적도 있습니다 🥹 이번 글에는 더 나은 코드 리뷰 문화를 만들기 위해, 제 나름대로 노력하고 있는 방법을... Fri, 01 Apr 2022 00:00:00 +0900 https://mildwhale.github.io/2022-04-01-commit-and-pr/ https://mildwhale.github.io/2022-04-01-commit-and-pr/ 2021년 돌아보기 회고를 가장한 1년치 일기(or 반성문) - 연말연시가 되면 다양한 커뮤니티에서 회고록을 볼 수 있다. 다른 사람의 회고를 보던 중에 ‘나는 2021년을 어떻게 보냈을까?’라는 의문이 들어, 그동안 있었던 일들을 큼직하게 짚어보기로 했다. 재택근무 🏡 코로나19가 심해지면서 시작된 재택근무.. 처음엔 마냥 좋았지만, 시간이 지날수록 재택근무는 정말 어려웠다. 특히 워라밸을 챙기는 것이 가장 어려웠다. 출퇴근을 하면 어쨌든 회사를 떠나왔기... Sat, 22 Jan 2022 00:00:00 +0900 https://mildwhale.github.io/2022-01-22-remind-on-2021/ https://mildwhale.github.io/2022-01-22-remind-on-2021/ Github Actions의 Self-hosted runner 사용기 M1 맥미니를 빌드 머신으로 만들어보자 - 크로키닷컴의 앱 챕터는 Cloud 기반 CI/CD 솔루션인 비트라이즈(Bitrise)를 사용하여, 유닛 테스트와 빌드 배포를 수행하고 있었습니다. 그러던 어느 날, 몇 시간이 지나도 테스트용 빌드가 배포되지 않아 빌드 대기열을 확인했더니, 수많은 테스트와 빌드들이 자신의 차례를 기다리고 있는 것을 목격했습니다. 배포가 제때 되지 않으니, 개발자 개인 맥북으로 배포하는 상황도 종종 발생했고, 테스트 일정에... Sat, 24 Apr 2021 00:00:00 +0900 https://mildwhale.github.io/2021-04-24-build-machine-with-m1-macmini/ https://mildwhale.github.io/2021-04-24-build-machine-with-m1-macmini/ [iOS] 이미지 리사이징을 활용한 메모리 최적화 UIGraphicsImageRenderer & Image I/O - 최근, 앨범에서 가져온 사진을 인코딩 후에 업로드하는 기능의 리팩토링을 진행했습니다. 기능 분석 중 메모리가 튀는 현상을 발견했고, 이를 해결하기 위해 사용한 방법과 경험을 기록하기 위해 이 글을 작성하게 됐습니다. 아래 그림은 리팩토링 전/후의 메모리 그래프입니다. 대충 봐도 오른쪽의 그래프가 안정적으로 보이죠? (같은 코드를 가지고 테스트 앱을 만들어 측정했습니다) 그럼 이제부터... Sun, 12 Jul 2020 00:00:00 +0900 https://mildwhale.github.io/2020-07-12-reduce-memory-usage-with-downsampling/ https://mildwhale.github.io/2020-07-12-reduce-memory-usage-with-downsampling/ [iOS] gRPC의 사용법 알아보기 gRPC를 Xcode에서 사용하는 방법 - 이 글은 gRPC를 Xcode에서 사용하기 위해 겪었던 삽질을 기록하고 공유하기 위해 작성되었습니다. gRPC의 이론적인 내용은 따로 소개하지 않을 것이니 궁금하신 분은 gRPC.io를 참고해주세요. 컴파일러와 플러그인 설치 gRPC는 Google ProtoBuffer를 사용하여 proto파일에 기능을 정의하고, 원하는 언어로 변환하여 사용합니다. 하나의 proto를 사용하기 때문에 플랫폼이 다르더라도 동일한 인터페이스로 통신할 수 있는 장점이 있습니다.... Fri, 01 May 2020 00:00:00 +0900 https://mildwhale.github.io/2020-05-01-grpc-with-xcode/ https://mildwhale.github.io/2020-05-01-grpc-with-xcode/ [iOS][RxSwift] Input과 Output을 사용한 MVVM 아키텍처 Kickstarter의 MVVM 응용편 - 뤼이드에서 신규 서비스의 iOS 앱 개발을 담당하게 되어, 아키텍처에 대한 고민을 하게 되었습니다. 협업을 위해서는 어느 정도 대중적인 아키텍처가 필요했는데, 익숙함이 가장 큰 무기인 MVC(Massive View Controller)는 유지보수와 확장성을 생각했을 때, 미래에 큰 고통을 받을 것이 분명하여 제외했습니다. 팀원과의 긴 논의를 통해 MVVM 아키텍처를 선택하게 되었고, 다양한 구현 패턴을 보며... Thu, 16 Apr 2020 00:00:00 +0900 https://mildwhale.github.io/2020-04-16-mvvm-with-input-output/ https://mildwhale.github.io/2020-04-16-mvvm-with-input-output/ [SwiftUI] UIKit과 인터페이스 연결하기 - 2/2 SwiftUI에서 UIPageControl 사용하기 - 이번 글에서는 UIKit의 UIPageControl을 SwiftUI에서 사용하는 방법에 대해 알아볼 것입니다. 이전 글과 이어지는 내용이기 때문에, 이전 글을 먼저 보고 오셔야 합니다. 😎 이 글은 Swift Tutorials의 Interfacing with UIKit을 기반으로 작성되었습니다. State와 Binding으로 Page 추적하기 UIPageControl을 사용하여 지금 보고있는 페이지가 몇 번째인지 알기 위해서는, UIPageViewController가 제공하는 정보를 사용해야 합니다. 그리고,... Mon, 16 Mar 2020 00:00:00 +0900 https://mildwhale.github.io/2020-03-16-Interfacing-with-UIKit-2/ https://mildwhale.github.io/2020-03-16-Interfacing-with-UIKit-2/ [SwiftUI] UIKit과 인터페이스 연결하기 - 1/2 SwiftUI에서 UIPageViewController로 페이징 구현하기 - SwiftUI는 모든 Apple 플랫폼의 기존 UI 프레임워크들과 함께 완벽하게 동작합니다. 예를 들어, UIKit의 뷰와 뷰 컨트롤러들을 SwiftUI의 뷰 안에 배치할 수 있고, 그 반대도 가능합니다. – from Interfacing with UIKit 이번 시리즈에서는 페이징을 지원하는 SwiftUI View를 만들어 볼 것입니다. UIPageViewController와 UIPageControl을 사용할 예정이고, @State와 @Binding으로 데이터를 업데이트하는 방법에 대해서도 알아볼... Thu, 12 Mar 2020 00:00:00 +0900 https://mildwhale.github.io/2020-03-12-Interfacing-with-UIKit-1/ https://mildwhale.github.io/2020-03-12-Interfacing-with-UIKit-1/ Moya의 사용법을 알아봅시다 Moya를 사용하여 쉽고 간편하게 네트워킹 구현하기 - 이번 글에서는 iOS의 네트워크 추상화 프레임워크인 Moya에 대해 알아볼것 입니다. Moya의 사용법을 소개하기 전에 현재 우리가 어떤 방식으로 네트워킹을 구현하고, 어떤 특징이 있는지 알아보는 편이 좋겠죠? (바쁘신 분은 스크롤을 내리셔도 됩니다 🥺) URLSession & Alamofire 우리는 보통 URLSession 또는 조금 더 간편한 Alamofire를 사용하여 네트워킹을 구현하고 있으며, 높은 확률로 APIManager... Sat, 07 Mar 2020 00:00:00 +0900 https://mildwhale.github.io/2020-03-07-getting-started-with-moya/ https://mildwhale.github.io/2020-03-07-getting-started-with-moya/ [번역] Increasing Performance by Reducing Dynamic Dispatch 동적 디스패치를 줄여 성능을 향상시키는 방법 - 다른 많은 언어들과 같이, Swift는 클래스가 슈퍼 클래스에 선언된 메서드와 프로퍼티를 재정의 할 수 있도록 허용하고 있습니다. 이는 프로그램이 런타임에 어떤 메서드나 프로퍼티를 참조해야 하는지 결정하고, 간접적인 호출 또는 간접적인 접근을 해야한다는 것을 의미합니다. 동적 디스패치(dynamic dispatch)라고 하는 이 기술은 일정한 양의 런타임 오버헤드를 대가로 언어의 표현력을 향상 시킵니다. 이러한... Fri, 31 Jan 2020 00:00:00 +0900 https://mildwhale.github.io/2020-01-31-increasing-performance-by-reducing-dynamic-dispatch/ https://mildwhale.github.io/2020-01-31-increasing-performance-by-reducing-dynamic-dispatch/ iOS 13에서 다크 모드 지원하기 (Supporting Dark Mode) 아직도 다크 모드 지원을 안 한 앱이 있다고요? - 네 다크 모드 지원을 아직 안 한 앱이 여기 있었습니다. 불과 3주 전까지만 해도 말이죠. 🤭 Implementing Dark Mode on iOS 세션을 본 iOS 엔지니어라면 한번쯤은 내 앱에도 적용해보고 싶다는 생각을 했을 것 입니다. 하지만 곧 거대한 레거시 프로젝트의 장벽과 밀린 업무에 가로막히게 되고, 길을 잃은 다크 모드는 머릿속 어딘가에서... Fri, 27 Dec 2019 00:00:00 +0900 https://mildwhale.github.io/2019-12-27-iOS-supporting-dark-mode/ https://mildwhale.github.io/2019-12-27-iOS-supporting-dark-mode/ [iOS] Xcode를 이용한 UI 테스트 - 4 Tip & Tricks for UI Testing - UI 테스트용 환경을 구성하려면 어떻게 해야 할까요? 그리고, XCUIElement를 조금 더 쉽고 효율적으로 찾을 수 있는 방법은 없을까요? 이번에는 UI 테스트에서 활용할 수 있는 팁을 소개하려 합니다. 드디어 Xcode를 활용한 UI 테스트 시리즈의 마지막 포스트네요, 마지막 글도 재미있게 봐주세요. 😃 이전글 보기 1. 테스트 프로젝트와 시나리오 소개 2. 테스트 케이스... Thu, 26 Dec 2019 00:00:00 +0900 https://mildwhale.github.io/2019-12-26-uitesting-tip-and-tricks/ https://mildwhale.github.io/2019-12-26-uitesting-tip-and-tricks/ [iOS] SwiftUI와 UIKit 함께 사용하기 SwiftUI와 UIKit을 함께 사용하는 방법에 대해 소개합니다. - SwiftUI가 등장하면서 기존에 사용하던 UIKit은 어떻게 해야 하는지 고민했던 적이 있습니다. UIKit으로 만들어진 앱에 SwiftUI를 사용하거나, SwiftUI로 만들어진 앱에 UIKit 프레임워크를 사용하려면 어떻게 해야 할까요? 다행히도 Apple은 두 프레임워크의 상호 호환을 지원합니다. 이번 글에서는 두 프레임워크를 함께 사용하는 방법에 대해 알아보겠습니다. SwiftUI to UIkit iOS 13에서 추가된 UIHostingController를 사용하면, SwiftUI... Tue, 10 Dec 2019 00:00:00 +0900 https://mildwhale.github.io/2019-12-10-hosting-uikit-to-swiftui/ https://mildwhale.github.io/2019-12-10-hosting-uikit-to-swiftui/ [iOS] Parallel UI Testing UI 테스트 시간을 단축할 수 있는 방법을 소개합니다 - 뤼이드의 iOS 챕터는 ‘산타토익’ iOS 앱을 배포하기 전에 사용자가 주로 사용하는 기능 위주로 문제가 없는지 확인하는 체크리스트가 있습니다. 이 체크리스트는 기본적으로 사람이 하나하나 확인해야 하지만, iOS 챕터에서는 체크리스트 테스트를 자동화하여 개발자의 리소스를 확보하고, 다른 일에 더 투자할 수 있는 환경을 만들기 위해 노력하고 있습니다. 지금까지 20개의 UI 테스트를 만들었으며, 이... Wed, 04 Dec 2019 00:00:00 +0900 https://mildwhale.github.io/2019-12-04-iOS-parallel-ui-testing/ https://mildwhale.github.io/2019-12-04-iOS-parallel-ui-testing/ [iOS] Xcode를 이용한 UI 테스트 - 3 마우스로 테스트 코드를 만들어보자 - 이번 글은 UI 테스트 코드를 조금 더 쉽게 작성할 수 있는 방법인 UI Recording에 대해 알아보려 합니다. 테스트에 사용한 프로젝트는 Github에서 다운받으실 수 있습니다. UI Recording? UI Recording은 사용자의 기기, 시뮬레이터, macOS의 유저 인터렉션을 코드로 생성해주는 기능을 지원합니다. 이 기능을 활용하면 UI 테스트를 위한 테스트 코드를 만들거나, 기존의 테스트를 확장하는... Tue, 03 Dec 2019 00:00:00 +0900 https://mildwhale.github.io/2019-12-03-uitest-3-record/ https://mildwhale.github.io/2019-12-03-uitest-3-record/ [iOS] Xcode를 이용한 UI 테스트 - 2 테스트 케이스 작성해보기 - 이번 글에서는 iOS 앱의 UI 테스트 케이스를 어떻게 작성하는지 알아보려 합니다. 이전 글과 이어지는 내용이므로 아직 이전 글을 보지 않으셨다면 아래 링크를 눌러 이전 글을 먼저 보는 것을 추천합니다. [iOS] Xcode를 이용한 UI 테스트 - 1 이제 미리 준비된 프로젝트를 살펴보고, 테스트 케이스 작성 전에 알아두면 좋은 기본기 소개부터 시작하겠습니다.... Sun, 01 Dec 2019 00:00:00 +0900 https://mildwhale.github.io/2019-12-01-uitest-2-testcase/ https://mildwhale.github.io/2019-12-01-uitest-2-testcase/ [iOS] Xcode를 이용한 UI 테스트 - 1 테스트 프로젝트 소개와 테스트 시나리오 작성하기 - 개발을 하다 보면 테스트의 중요성에 대해 많이 듣게 됩니다. 잘 작성된 테스트 코드는 서비스의 확장성과 안정성을 확보할 수 있고, 나아가 유지 보수도 쉬워진다는 매우 큰 장점이 있습니다. 하지만, 테스트 코드를 작성해보려니 어렵고 복잡할 것 같아 망설였던 적도 있고, 눈에 보이는 결과물을 먼저 만들어야 하는 업무 환경 때문에 테스트 코드 작성은... Sat, 30 Nov 2019 00:00:00 +0900 https://mildwhale.github.io/2019-11-30-uitest-1-beginning/ https://mildwhale.github.io/2019-11-30-uitest-1-beginning/ [iOS] Xcode에서 비동기 작업 테스트하기 비동기 API를 테스트 하기 위한 방법을 소개합니다 - Xcode를 이용한 Test(Unit, UI)를 구현할 때, 비동기 작업이 완료될 때까지 기다려야 하는 상황이 있습니다. 특히, 네트워크 통신이 필요한 요즘의 앱에서는 필수적이죠. 예를 들면, 서버에서 데이터를 받아오는 것을 테스트한다거나, 받아온 데이터를 가공하고 다음 동작을 테스트를 하는 케이스가 있을 것입니다. 이번 글에서는 비동기 API를 테스트하는 방법과, Property의 값 변화를 기다렸다가 처리하는 방법에... Fri, 22 Nov 2019 00:00:00 +0900 https://mildwhale.github.io/2019-11-22-async-test/ https://mildwhale.github.io/2019-11-22-async-test/ [iOS] Automatic Reference Counting (ARC) ARC는 어떻게 동작하는지 알아봅니다. - Xcode 4와 동시에 등장한 ARC(Automatic Reference Counting) 덕분에, iOS 개발자들은 레퍼런스 카운트 관리에서 해방될 수 있었습니다. 그렇다면 ARC는 어떻게 동작하기에 개발자들의 수고를 덜어주고 있을까요? 이번 글에서는 ARC가 어떤 역할을 하며, 어떻게 동작하는지 알아보려 합니다. 이전에 작성했던 레퍼런스 카운팅과 MRR에 대한 글을 읽고 나면, 이 글을 이해하는데 도움이 됩니다. ARC (Automatic... Tue, 05 Nov 2019 00:00:00 +0900 https://mildwhale.github.io/2019-11-05-arc/ https://mildwhale.github.io/2019-11-05-arc/ [iOS] Manual Retain Release (MRR) 레퍼런스 카운트를 관리하는 원리 - Xcode 4와 동시에 등장한 ARC(Automatic Reference Counting) 덕분에, iOS 개발자들은 메모리 관리에서 어느정도 해방될 수 있었습니다. 그럼 ARC가 도입되기 전에는 어떤 방식으로 메모리를 관리했을까요? 이번 글과 다음 글에서는 ‘레퍼런스 카운팅’을 활용한 메모리 관리 방법에 대해 알아보려고 합니다. 레퍼런스 카운팅에 대한 내용이 궁금하다면 이전 글을 참고해주세요. MRR (Manual Retain Release) ?... Fri, 01 Nov 2019 00:00:00 +0900 https://mildwhale.github.io/2019-11-01-mrr/ https://mildwhale.github.io/2019-11-01-mrr/