iOS 앱 개발자로 소프트웨어 개발자 커리어를 시작한 지 벌써 4년이 지났습니다.
사람이 보기에 좋은 코드를 작성하는 것이 팀과 개인의 업무 효율성을 높여준다고 믿습니다.
주요한 업무 외에도 개선할 점을 찾아 고치는 것을 좋아합니다.
팀원들과 빠르고 쉽게 커뮤니케이션하며 일할 수 있는 환경을 좋아합니다.
- Sr. Mobile Engineer | 2022.4. ~ 현재
- Mobile Engineer | 2020.2. ~ 2022.3.
쿠팡 iOS 애플리케이션의 기능 개발 및 유지보수를 담당합니다.
iOS와 관련된 기능 개선 및 유지보수 업무를 진행했습니다.
앱 시작 시간 개선
- 쿠팡 앱의 시작 시간이 경쟁사 대비 오래 걸리는 것으로 조사되어 개선 작업을 진행함
- Instruments를 사용하여 앱 실행부터 초기 화면이 노출되기까지 실행되는 코드들의 실행 시간을 파악, 오래 걸리는 코드들을 개선함
- 도메인 레벨에서 모듈화된 모듈들을 Dynamic Framework에서 Static Library로 전환함. 이 때 xib와 같은 리소스를 포함하는 경우 리소스 제거 작업도 함께 함
- 앱 시작 시간에 0.x초를 줄임
리스트 스크롤 성능 개선
- 사내 성능 측정 툴을 통해 특정 페이지에서 리스트 스크롤 성능이 매우 좋지 않음을 발견함
- Instruments를 통해 메인 쓰레드를 많이 사용하는 지점을 찾아냄
- 메인 쓰레드를 사용하지 않아도 되는 지점에서 백그라운드 쓰레드를 사용하게 하는 것으로 스크롤 성능을 크게 개선함
Push Notification 수신 로깅 구현
- Notification Service Extension을 경유해 들어오는 Push Notification의 경우 앱이 종료된 상태에서도 코드를 실행시킬 수 있다는 것을 활용, 이러한 Push Notification의 수신 여부를 로깅하는 기능을 구현함
- 현재 시스템에서 로깅에 필요한 값을 App Extension에 공유하여 App Extension에서 로깅하는 것에 문제가 없게 함
- Push Notification 관련 서비스의 안정성을 확인할 수 있는 데이터를 수집할 수 있게 됨
- 연구 내용을 사내 다른 iOS 개발팀에도 공유함
초기 디자인 시스템 구축 프로젝트에 참여하여 iOS 환경에서 사용할 수 있는 UI 라이브러리를 만들고 유지보수 하였으며, 쿠팡 iOS 애플리케이션에 적용했습니다.
리스트에서 상품을 보여주는 컴포넌트 개발 및 마이그레이션
- 기존에 리스트에서 상품을 보여주는 컴포넌트는 공통화되지 않았고, 오랜 기간 동안 규칙 없이 다양한 요구사항을 만족하기 위해 유지보수되면서 코드의 양과 복잡도가 증가함
- 컴포넌트의 불변 영역과 가변 영역을 UX 팀과 사전에 정의하여, 유연성과 개발 난이도 간 트레이드오프를 고려하여 디자인함
- 기존에 비즈니스와 연관된 기능일지라도 비즈니스 코드에 의존하지 않게 개발하여 공통 UI 컴포넌트로서 기능할 수 있게 함
- 정의된 규칙 안에서 요구사항을 구현할 수 있게 되어, 피쳐 개발을 위해 수정해야 하는 지점을 쉽게 알 수 있게 되는 등, 엔지니어의 생산성을 높임
샘플 앱 개발에 특화된 DSL 개발 및 적용
- UI 개발이 주를 이루는 작업의 특성을 고려하여 UI를 선언적으로 작성할 수 있게 하는 DSL을 도입하려고 함
- SwiftUI의 API와 Swift의 Result Builder와 같은 기능을 적용하여 iOS 엔지니어에게 친숙한 인터페이스를 제공함
- 선언형 UI의 이점을 갖게 되어 더 이해하기 쉬운 코드 구조를 가지면서도 더 효율적인 개발 및 유지보수가 가능해짐
디자인 시스템 클라이언트들과의 커뮤니케이션 및 지원
- 주요한 PoC 역할을 주도적으로 수행함
- 관련 문의를 기민하게 처리하여 엔지니어들의 생산성 향상에 기여함
- 온보딩 세션을 진행하고 위키를 만들어 러닝 커브를 최소화하고 성공적인 온보딩에 기여함
- 인턴 | 2019.4. ~ 2019.5.
LINE 가계부 서비스의 API를 사용하여 위치 기반 가계부 애플리케이션을 만드는 과제를 수행했습니다.
- 수입 및 지출을 기록하는 가계부 기능 개발
- 지출이 발생한 위치를 기록하여 지도상에서 '소비 지도'를 볼 수 있는 기능 개발
- SDK를 래핑하여 Swift스러운 코드로 필요한 기능만 사용할 수 있도록 함
- Profiling을 통해 메모리 누수 문제 해결
- 메신저를 사용하는 것보다 얼굴을 맞대고 대화하는 것을 선호합니다.
- 메모장을 곁에 두고 그림 등을 활용하여 생각하는 것을 명확하게 표현하기 위해 노력합니다.
- 모르는 것이 있으면 완벽하게 알 때까지 파고들며, 알게 된 것을 잘 정리하여 공유합니다.
- 단언할 수 있는 상황이라면 모호한 표현을 피하고 단언하는 표현을 사용합니다. '~인 것 같다'라고 말했다면 '~이다'라고 바꾸어 말합니다.
- 투명하게 커뮤니케이션합니다. DM보다는 모두가 함께 있는 채널에서 커뮤니케이션합니다. 잘한 것은 잘했다고, 잘못한 것은 잘못했다고 솔직하게 말합니다.
- Swift를 사용하여 생각하는 것을 막힘 없이 작성합니다.
- Swift Style Guidelines를 준수하여 코드를 작성합니다.
- Generics, Protocol Oriented Programming 등을 이해하고 있습니다.
- ARC를 이해하고, Reference Cycle을 피하는 코드를 작성할 수 있습니다.
- Swift의 업데이트 소식을 따라잡기 위해 노력합니다.
- Swift가 내부적으로 어떻게 동작하는지 이해하고 있고, Memory Debugger 및 Swift Intermediate Language를 통해 직접 확인해 보았습니다.
- UIKit을 사용하여 다양한 커스텀 뷰를 개발할 수 있습니다.
- SnapKit, FSPagerView 등 UI 개발에 도움을 주는 다양한 라이브러리를 사용한 경험이 있으며, 기반 기술도 이해하고 있습니다.
- MVC, MVVM, ReactorKit 등의 아키텍쳐 패턴을 사용한 경험이 있으며, 기반 기술도 이해하고 있습니다.
- Reactive Programming을 이해하고, RxSwift나 ReactiveSwift와 같은 라이브러리를 사용한 경험이 있습니다.
- SwiftUI, Combine 등을 적용하여 애플리케이션을 개발한 경험이 있습니다.
- Instruments를 사용한 Profiling을 통해 성능 개선점을 찾고 해결할 수 있습니다.
- Terminal과 Sourcetree를 사용하여 Git을 활용합니다.
- GitHub를 활용한 Pull Request 및 Code Review에 익숙합니다.
- Slack, Zoom, Jira 등의 툴에 익숙합니다.