간단하게 이해할 수 있는 iOS App의 특징
앱은 사용자의 관심을 항상 기다린다. 사용자가 앱을 실행하면 시스템(iOS)는 이렇게 주목 받은 앱에게 리소스를 몰아준다. 이렇게 사용자의 관심을 받을 때랑 못받을 때랑 앱의 상태가 포그라운드, 백그라운드로 변한다. 앱 개발자는 이렇게 앱의 상태가 변경됨에 따라 대응 할 수 있게 앱을 만들어야하므로 App Lifecycle 이해가 중요하다.
iOS App Lifecycle
기존의 앱 라이프사이클은 아래와 같았다.
iOS 13 이전 (AppDelegate 중심)
- AppDelegate: 앱의 시작과 종료, 백그라운드 상태 전환 등 앱 전체의 생명 주기를 관리하는 중심적인 역할을 했다.
- 단일 윈도우 환경: 하나의 앱은 하나의 윈도우를 가지는 구조였다.
장점:
- 구조가 단순하여 이해하기 쉽다.
- 앱 전체의 상태를 한 곳에서 관리할 수 있다.
단점:
- 멀티 윈도우 환경이나 다양한 화면 크기를 지원하기 어렵다.
- 앱의 복잡도가 증가할수록 AppDelegate의 역할이 과도해질 수 있다.
iOS 13부터 멀티 윈도우를 제공하면서 Process Lifecycle, UI Lifecycle 책임의 변화가 필요했고, 따라서 담당하는 부분이 변경되었다.
iOS 13 이후 (SceneDelegate 도입)
- SceneDelegate: 앱의 각 Scene(화면)의 생명 주기를 관리하는 역할을 한다. 하나의 앱은 여러 개의 Scene을 가질 수 있다.
- AppDelegate: 앱 전체적인 설정이나 초기화 작업을 담당하며, SceneDelegate와 함께 협력하여 앱을 관리한다.
장점:
- 멀티 윈도우 환경과 다양한 화면 크기를 지원하기 쉽다.
- 앱의 복잡도를 줄이고 각 Scene의 독립성을 높일 수 있다.
- 앱 확장성이 향상되었다.
변화점 요약:
- Scene 개념 도입: 앱의 각 화면을 Scene으로 분리하여 관리한다.
- AppDelegate 역할 축소: 앱 전체적인 설정으로 역할이 축소되고, SceneDelegate가 Scene 단위의 생명 주기를 관리한다.
- 멀티 윈도우 지원: 하나의 앱에서 여러 개의 윈도우를 열 수 있다.
- 다양한 화면 크기 지원: iPadOS와 같은 다양한 화면 크기에 대한 적응이 용이해졌다.
UI Lifecycle은 Scene Delegate가 담당하고 Scene 상태는 아래와 같이 변경되었다.
앱 개발자가 생각해야할 점
앱 개발자가 앱을 만들 때 중요하게 생각해야할 점은 3가지가 있다.
- 앱이 포그라운드에 들어갈 때
- 포그라운드를 떠날 때
- 백그라운드에 들어갈 때
- 앱의 작업을 중단함
- 메모리 비우기
- 현재 상태를 저장해놓고 다음을 준비
iOS App의 기본적인 동작 과정
iOS App은 크게 사용자 인터페이스(UI)와 비즈니스 로직으로 나눌 수 있다.
- 사용자 인터페이스(UI)
- 버튼, 텍스트 필드, 이미지 등 다양한 UI 요소를 통해 사용자와 상호작용을 하는 부분
- 비즈니스 로직
- 실제 기능을 구현하는 부분
- 사용자 입력을 처리, 데이터 저장, 네트워크를 통해 서버와 통신하는 등의 다양한 작업 수행
iOS App은 Event-Driven 방식으로 동작한다. 사용자가 버튼을 누르거나 화면을 터치하는 등의 이벤트가 발생하면, 이벤트 핸들러 함수가 호출되어 해당 이벤트에 대한 처리를 수행한다.
iOS App의 서버와의 통신
사진출처
iOS App이 서버와 데이터를 주고 받는 과정은 아래와 같다
- 요청 생성
- App에서 서버로 데이터를 요청할 때, 원하는 정보를 담은 HTTp 요청을 생성
- GET, POST, PUT, DELETE 등의 메서드, URL, Header, body 부분으로 구성
- 네트워크 전송
- 생성된 HTTP 요청을 네트워크를 통해 서버로 전송
- 서버 처리
- App으로 부터 받은 요청을 분석하여 해당하는 데이터를 처리
- 가령, db에서 데이터를 조회, 생성, 삭제, 수정등의 작업을 진행
- 응답 생성
- 요청 처리 결과를 다음 HTTP 응답을 생성
- 상태 코드, header, body 등으로 구성
- 응답 수신
- App은 서버로부터 받은 HTTP 응답을 분석하고, 응답에 들어있는 데이터를 사용
iOS는 서버와 통신하기 위헤 URLSession, Alamofire, SwiftSoup 등의 라이브러리를 사용한다.
참고 및 사진출처