안녕하세요 불망입니다..!
개발을 하다보면 어플이 멈추거나 강제종료되는 경우가 있습니다..! :(
그 이유로는 메모리 부족이나 누수이거나 교착상태, 경쟁 상태 등 다양한 이유가 있을 수 있습니다.
정확한 원인 분석을 하기 위해서는 프로파일링을 하거나 디버깅을 해야합니다.
메모리 누수나 부족 교착상태 등등을 찾아보려면 프로파일링해보는 것이 제일 정확한 방법입니다.
1. XCODE 프로파일링
XCODE 프로파일링이란 앱 성능 및 리소스 사용을 분석하고 최적화하는 과정을 뜻합니다. 앱이 실행하는 중에 발생하는 이슈에 대해서 모니터링 할 수 있고 메모리누수, 에너지효율성, 메모리할당 과정 등을 전반적으로 훓어볼 수 있습니다. 단순 출력으로는 잡아내기 힘든 성능 이슈나 메모리 부분을 주로 관찰 및 분석합니다.
디버깅과 차이점은 디버깅은 내가 원하는 위치나 소스 쪽을 집중적으로 관찰하는 것이고 프로파일링은 앱이 시작할 때부터 끊임없이 전체적인 과정을 살펴보는 것입니다. 2가지 방법 전부 앱을 분석하는데 알고 있는 것이 좋으며 XCODE에서 참 잘해놓은 기능이라고 생각합니다.
XCODE에서 프로파일링을 시작하는 법은 XCODE -> Product 메뉴 -> Profile 선택 해줍니다.
XCODE 프로파일링 하기
선택해준다면 아래와 같은 창이 뜹니다. 어떤 것을 위주로 프로파일링을 할 것인지 요소를 선택하는 것입니다.
XCODE 프로파일링 메뉴
1. Allocation : 앱의 메모리를 추적하고 메모리 누수, 사용 후 해제되지 않은 객체 등의 문제를 찾아내는데 좋습니다.
2. Leaks : 메모리 누수를 경고표시로 감지하고 원인을 추적합니다. 소스까지 표시되어서 아주 유리합니다.
3. Time Profiler : 앱의 CPU 사용량과 실행 시간을 분석하여 병목 현상을 찾고 성능을 개선합니다.
4. Energy Log : 일반 디버그할 때 대략적으로 표시되긴 하지만 이 요소에는 에너지 사용량을 측정하고 에너지 효율을 개선하는데 필요한 정보를 줍니다.
Xcode Profile Leaks 표시 및 상세정보
앱을 Profile -> Instrument로 실행한다면 다음과 같은 화면이 뜹니다.
Allocation은 처음부터 (앱이 시작할 때) 메모리가 할당되는 것을 볼 수 있고 점차올라가서 대기상태일 때는 수평선인 것을 볼 수 있습니다.
마우스 커서를 그래프에 가져간다면 현재 메모리가 몇메가 할당되어 있는지 확인할 수 있습니다.
이 메모리는 Heap에 쌓이는 메모리며 너무 가파르게 올라가거나 껐는데도 떨어지지 않는다면 문제가 있는 것입니다.
너무 그래프가 확 올라간다면 올라간 그래프 부근을 클릭하면 그 부분에서 메모리가 어떻게 할당되었는지 정보를 알 수 있습니다.
그 정보를 통해 내가 작성한 코드로 들어가볼 수 있는 것이고 메모리해제가 되어있지 않은 부분을 확인할 수 있습니다.
Leak과 함께 Allocation을 선택한다면 위와같은 그래프, 표시를 볼 수 있습니다. 초록색은 Leak이 생기지 않았다는 뜻이며 빨간색 X는 메모리 누수가 발생했다는 뜻입니다. 그것을 클릭하면 어디서 몇개 발생했는지 쓰레드의 주소가 나오고 Responsile Frame이라고 이 소스를 Trace할 수 있습니다.
Xcode에서 만들어놓은 Profile의 제대로 된 사용성을 Leaks을 통해 느꼈습니다. X라고 표시된 메모리 누수는 꼭 디버깅하거나 코드를 찾아서 잡아줘야합니다. 크기도 얼마나 되는지 제대로 알려줍니다. 현재 갯수가 몇개되지 않아서 괜찮아보이지만 반복되다보면 메모리 누수가 심해지면서 해제도 되지않고 앱이 죽게 됩니다.
현재 제가 개발한 어플에서 메모리 누수를 확인할 수 있었습니다.
그리고 사진을 불러올때 갑작스럽게 많은 메모리를 사용하는 문제도 볼 수 있었습니다.
그런 문제들을 해결하여 깔끔한 어플을 만들어보면 재미있고 좋은 경험이 될것 같습니다.
'SwiftUI > 정리' 카테고리의 다른 글
[SwiftDataStructure&Algorithms] 기본 데이터 구조(배열, 딕셔너리) (0) | 2024.03.13 |
---|---|
[SwiftDataStructure&Algorithms] 데이터 구조 (1) | 2024.03.12 |
[SwiftUI] 아키텍처 고민 (0) | 2024.01.06 |
[SwiftUI] Combine - 기본 (0) | 2023.09.16 |
[SwiftUI] Combine (0) | 2023.09.16 |