-
iOS 앱에서 Core Data를 사용한 데이터 마이그레이션(Migration)에 대해 설명해주세요.
- 앱의 데이터 모델이 시간이 지나면서 발전하고 변경될 수 있으므로, Core Data 스키마의 버전을 업데이트해야함
- 경량 마이그레이션(Lightweight Migration)과 무거운 마이그레이션(Heavyweight Migration)의 차이점은 무엇인가요?
- 자동화 여부
- 경량 마이그레이션: Core Data에 의해 자동으로 처리
- 무거운 마이그레이션: 개발자가 직접 매핑 모델과 마이그레이션 코드 작성
- 적용 가능한 변경 범위
- 경량 마이그레이션: 간단한 모델 변경에 적용
- 무거운 마이그레이션: 복잡한 변경
- 구현 복잡도
- 경량 마이그레이션: 구현이 간단함
- 무거운 마이그레이션: 구현이 복잡하며 더 많은 개발 노력이 필요함
- 매핑 모델(Mapping Model)을 사용하여 데이터를 마이그레이션하는 방법을 설명해주세요.
- 매핑 모델 생성
- 매핑 로직 정의
- 엔티티 매핑
- 엔티티 매핑을 선택하고 소스 엔티티와 대상 엔티티를 설정
- 매핑된 엔티티간에 데이터가 어떻게 이동할지 정의
- 속성 매핑
- 각 속성에 대한 소스 속성과 대상 속성을 설정
- 변환이 필요한 경우 ‘value expression’을 사용하여 변환 로직을 정의할 수 있음
- 관계 매핑
- 관계 매핑과 속성 매핑과 유사하게 소스 관계와 대상 관계를 설정
- 관계가 어떻게 변환되는지에 대한 로직을 정의
- 마이그레이션 프로세스
- 데이터 마이그레이션 중 발생할 수 있는 문제와 해결 방법은 무엇인가요?
- 데이터 손실
- 문제
- 필드 삭제, 데이터 타입변경, 잘못된 매핑 로직으로 인한 데이터 손실
- 해결 방법
- 마이그레이션을 수행하기 전 데이터 백업
- 개발 환경에서 충분한 테스트를 진행하여 마이그레이션 프로세스 검증
- 데이터 변환 시, 데이터 손실을 방지하기 위한 매핑 로직 신중하게 설계
- 성능
- 문제
- 대규모 데이터 세트에 대한 마이그레이션은 성능 저하를 일으킬 수 있으며, 사용자 경험에 부정적인 영향을 줄 수 있음
- 해결 방법
- 마이그레이션 작업을 백그라운드 스레드에서 진행
- 가능한 경우, 데이터를 배치로 나누어 점진적 마이그레이션
- 마이그레이션 로직을 최적화 하여 불필요한 연산 최소화
- 사용자 인터페이스(UI) 동결
- 문제
- 마이그레이션 중 대규모 데이터 처리로 인해 UI가 동결되거나 반응이 없을 수도 있음
- 해결 방법
- 마이그레이션 작업을 백그라운드에서 비동기적으로 수행
- 사용자에게 마이그레이션 진행 상황을 알리는 진행 상태 표시기 제공
- 로깅과 오류 처리
- 문제
- 마이그레이션 중 발생하는 예상치 못한 오류를 추적하기 어려울 수 있음
- 해결 방법
- 로깅 시스템을 구현하여 마이그레이션 과정에서 발생하는 모든 중요한 이벤트와 오류를 기록
- 마이그레이션 중 발생할 수 있는 예외를 적절히 처리하고, 필요한 경우 사용자에게 오류 메세지 표시
-
iOS 앱의 낮은 메모리 상황 대응 방안과 관련 API에 대해 설명해주세요.
-
didReceiveMemoryWarning 메서드 활용
UIViewController에 있는 시스템 메모리 경고 받았을 때 호출되는 메서드. 오버라이드해서 더이상 사용하지 않는 이미지나 객체같은 메모리를 해제하는 코드를 작성할 수 있다
-
메모리 경고 옵저버 등록
UIApplication.didReceiveMemoryWarningNotification 에 대한 옵저버를 등록 할 수 있음
-
캐시 데이터 관리
자주 사용되는 데이터는 캐싱하여 성능을 향상 시킬 수 있지만 메모리 사용량도 증가시키기에 NSCache 클래스를 사용하면 메모리가 부족할 때 자동으로 객체를 제거해줌
-
autoreleasepool 사용
해당 블록 내에서 생성된 객체들은 블록이 종료될 때 해제되어, 메모리 사용량을 최적화
-
앱 상태 변화 감지
UIApplicationDelegate 프로토콜의 메서드를 구현하여, 앱이 백그라운드로 전환되거나 재활성화 될 때 메모리 정리와 같은 작업을 수행할 수 있음
-
Image Asset 최적화
가능하면 이미지 크기를 화면에 표시되는 크기에 맞게 조정하고, 압축을 사용해 앱의 이미지 리소스가 차지하는 메모리 양을 최소화 해야함
-
Core Data와 같은 데이터 관리
Core Data, Realm과 같은 데이터베이스를 사용할 경우, 필요하지 않은 객체는 메모리에서 해제하고 fetch요청은 필요한 데이터만 가져오도록 최적화
- 낮은 메모리 경고(Low Memory Warning)의 개념과 iOS에서의 동작 방식에 대해 설명해주세요.
- 낮은 메모리 경고
- iOS 시스템은 메모리 사용량을 지속적으로 모니터링하며, 사용 가능한 메모리가 특정 임계값 아래로 떨어지면 앱에 낮은 메모리 경고를 발생 시키는데, 이 경고는 앱이 사용중인 메모리 양을 줄이도록 요청하는 신호로, 앱이 이 경고에 반응하지 않으면, 시스템은 앱을 강제 종료할 수 있음
- 동작방식
- 메모리 경고 발생
- 백그라운드 상태에 있는 앱들에 낮은 메모리 경고를 발생
- 자동 메모리 정리
- 대부분 앱은 자동으로 일부 메모리 해제(UIKit에서 자동으로 캐시된 이미지, 비활성화 된 뷰 컨트롤러의 뷰, 기타 재사용 가능 리소스를 정리
- 개발자 대응
didReceiveMemoryWarning 메서드를 오버라이드하거나, NotificationCenter 를 통해 메모리 경고를 감지하고, 추가적 메모리 해제 작업을 수행
- 강제 종료 방지
- didReceiveMemoryWarning() 메서드의 역할과 구현 방법에 대해 설명해주세요.
- 낮은 메모리 상황에서 앱의 안정성을 유지하기 위한 리소스 관리 전략에 대해 설명해주세요.
-
Swift의 메타타입(Metatype)과 미러(Mirror)에 대해 설명해주세요.
-
iOS 앱에서 바이너리 프레임워크(Binary Framework)를 생성하고 사용하는 방법은 무엇인가요?
-
Combine 프레임워크에서 에러 처리는 어떻게 하나요?
-
Swift의 동적 멤버 조회(Dynamic Member Lookup)에 대해 설명해주세요.
-
Swift의 Property Wrapper에 대해 설명해주세요.
-
iOS 앱에서 Siri Shortcuts을 구현하는 방법은 무엇인가요?
-
Swift의 unsafe 포인터(Unsafe Pointer)에 대해 설명해주세요.
-
Swift의 reflection에 대해 설명해주세요.
-
iOS 앱에서 Keychain을 사용하여 민감한 데이터를 안전하게 저장하는 방법은 무엇인가요?
-
Swift의 async/await를 사용한 비동기 프로그래밍에 대해 설명해주세요.
-
iOS 앱에서 WidgetKit을 사용하여 홈 화면 위젯을 구현하는 방법은 무엇인가요?
-
MVVM-C(Coordinator) 아키텍처 패턴에 대해 설명해주세요.
-
Swift의 @dynamicCallable과 @dynamicMemberLookup에 대해 설명해주세요.
-
Swift의 ABI(Application Binary Interface) 안정성에 대해 설명해주세요.
-
iOS 앱에서 Combine 프레임워크를 활용한 반응형 프로그래밍 패턴에 대해 설명해주세요.
-
Swift의 런타임 동작과 성능 최적화 기법에 대해 설명해주세요.
-
iOS 앱의 접근성(Accessibility)을 향상시키기 위한 방법과 고려 사항에 대해 설명해주세요.
-
iOS 앱에서 Objective-C 브리징(Bridging)을 하는 방법과 주의 사항을 설명해주세요.