| 2022.04 ~ 2022.09 (6개월) | 국비지원 교육 수료 (JAVA, Spring & Kotlin 기초 프로젝트 진행) |
|---|---|
| 2022.09 ~ 2024.04 (1년 6개월) | ㈜리안 개발자 ios 기반 서비스 개발 및 유지보수) |
| 2024.04 ~ 현재 (2년차) | iOS 앱 개발 및 배포, 업데이트 (총 5개 앱 App Store 등록) |
SwiftUI,UIKit,RxSwift, RestfulAPI, Swift Concurrency, Web Socket노드 겹침 문제
서버에서 수신한 노드를 랜덤 배치하는 과정에서 기존 노드와 겹치는 문제 발생.
→ CGRect 배열로 배치 후보 영역 추적 후, intersects 및 contains(where:) 로 충돌 여부를 판별하여 안전한 위치에 배치.
'Cannot find 'present' in scope' 오류
U특정 노드를 탭했을 때 UIView인 상세 화면을 present로 나타내는 과정에서 오류 발생.
→ ViewController 인스턴스를 UIView 참조로 전달 후 viewController?.present() 형태로 호출.
(‣)
서버 응답 JSON 제네릭 타입 디코딩 문제
서버 응답을 제네릭 타입으로 디코딩하는 과정에서 Swift의 Decodable 제약으로 인해 타입 추론 오류 발생.
→ 데이터 모델을 명시적으로 작성하여 디코딩이 가능하도록 수정하였고 서버에서도 데이터 모델 구조에 맞추어 재구조화하여 응답.
(‣ )
테스트 불가능한 구조 문제
ViewModel 내부에서 API 호출과 로컬 데이터 접근을 모두 처리하며 단위 테스트 불가능한 구조였음.
→ 클린 아키텍처 기반으로 UseCase, Repository, DataSource 계층을 분리하여 책임을 명확히 나누고 모든 계층이 의존성 주입 기반으로 설계되도록 구조를 리팩토링함.
MVVM + 클린 아키텍처 도입을 통한 코드 리팩토링
View와 로직 간 결합도가 높아 테스트가 어려웠고, 재사용성 확보를 위해 MVVM 구조로 리팩토링.
이후 UseCase를 도입해 도메인 로직을 명확히 분리했고, Repository 프로토콜을 통해 의존성도 제거함.
RepositoryImpl에서 Local/RemoteDataSource를 조합하고, 각각은 테스트 가능한 인터페이스로 분리
→ 구조 분리로 인해 API 로직 테스트, 캐싱 로직 교체 등 모든 기능 단위 테스트가 가능해짐
Divider 커스텀뷰를 자체 라이브러리 제작.
→ Divider 커스텀 뷰를 자체 라이브러리로 제작하여 GitHub에 공개하고, 이를 SwifterSwift 오픈소스에도 기여함.
초기에는 앱 실행 시마다 서버에 데이터를 요청하는 구조로 인해 과도한 API 호출과 느린 초기 로딩 문제가 발생함.
→ 응답된 데이터를 JSONEncoder + FileManager로 캐싱, 변경 여부가 있을 때만 서버에서 다시 요청하는 로직으로 개선.
API 호출량을 60% 감소시키고 UX 품질을 향상시킴. (Xcode Instruments 기준 2.3초 → 1.2초)
View 진입 시 체감 속도 개선
→ Core Animation을 적용하여 화면 전환 체감 속도 30% 향상.
시각적 복잡성 부정적 피드백 대응
앱 소개글에 68%의 유저가 시각적으로 복잡하다는 피드백.
→ 관계선의 색상과 굵기를 조절하여 시각적 부담을 줄이고 가독성 개선.
UIKit, RxSwfit, Core Animation, SnapKit, URLSessionMVVM, 클린 아키텍처Notion APINode.js + Express