iOS는 Apple의 모바일 운영 체제로, iPhone 및 iPod touch를 구동합니다. iOS 개발은 Xcode 환경에서 Swift 언어로 이루어집니다. 플랫폼 아키텍처, 주요 프레임워크 및 App Store 게시 프로세스를 살펴보겠습니다.
주요 내용
iOS는 Apple의 모바일 운영 체제로, 2007년 첫 번째 iPhone과 함께 처음 출시되었습니다. 시스템은 XNU 마이크로커널 위에 구축되었으며, Mach와 FreeBSD의 구성 요소를 결합한 하이브리드 커널입니다. Android와 달리 iOS는 폐쇄형 플랫폼입니다. 앱 설치는 App Store를 통해서만 가능하며 시스템 소스 코드는 공개되지 않습니다.
Apple은 하드웨어와 소프트웨어를 모두 제어하여 높은 수준의 최적화를 보장합니다. StatCounter(2026)에 따르면, 전 세계 모바일 OS 시장에서 iOS의 점유율은 약 28%이며 미국과 일본에서는 50%를 초과합니다.
시스템은 App Sandbox 모델을 사용합니다 — 각 앱은 격리된 환경에서 실행되며 시스템 대화 상자를 통한 명시적 사용자 허가 없이 다른 앱의 데이터에 접근할 수 없습니다.
첫 번째 버전인 iPhone OS 1.0은 타사 앱을 지원하지 않았습니다. App Store는 2008년 iOS 2.0과 함께 등장했습니다. 주요 이정표: iOS 4(멀티태스킹), iOS 7(플랫 디자인), iOS 10(iMessage 앱), iOS 14(데스크톱 위젯), iOS 17(StandBy 모드). 주요 릴리스마다 새로운 API와 프레임워크가 도입됩니다.
| iOS 버전 | 연도 | 주요 혁신 |
|---|---|---|
| iPhone OS 1 | 2007 | 첫 번째 버전, App Store 없음 |
| iOS 2 | 2008 | App Store, 타사 앱 |
| iOS 4 | 2010 | 멀티태스킹, FaceTime |
| iOS 7 | 2013 | 전체 인터페이스 재설계 |
| iOS 10 | 2016 | iMessage 앱, SiriKit |
| iOS 14 | 2020 | 위젯, App Library, Picture in Picture |
| iOS 17 | 2023 | StandBy, NameDrop, Live Voicemail |
iOS 아키텍처는 4개의 추상 계층으로 구성되며, 각 계층은 상위 계층에 API를 제공합니다. 하위 계층은 커널과 시스템 서비스이고, 상위 계층은 사용자 프레임워크입니다.
Cocoa Touch는 사용자 인터페이스 구축을 위한 프레임워크 계층입니다. UIKit, SwiftUI, Foundation, MapKit, NotificationCenter 및 개발자가 직접 작업하는 기타 API가 포함됩니다. UIKit은 UIViewController, UIView, UIWindow 및 모든 시각적 구성 요소를 제공합니다.
Media 계층에는 Core Graphics, Core Animation, Core Image, AVFoundation 및 Metal이 포함됩니다. Metal은 GPU용 저수준 API로, 게임 및 증강 현실 앱에서 높은 그래픽 성능을 제공합니다. Core Animation은 하드웨어 가속을 통해 레이어 수준에서 애니메이션을 관리합니다.
Core Services에는 Core Data, CloudKit, Core Location, HealthKit, Core Motion 및 Network가 포함됩니다. CFNetwork는 네트워크 프로토콜 작업을 위한 저수준 C 인터페이스입니다. Foundation은 NSString, NSArray, NSDictionary 클래스를 갖춘 Core Foundation 위의 객체 지향 래퍼입니다.
최하위 계층에는 XNU 커널, APFS 파일 시스템, 암호화 모듈(CommonCrypto, Security.framework), 전원 관리 및 장치 드라이버가 포함됩니다. 이 수준에서 Secure Enclave가 작동합니다 — 생체 인증 데이터 및 암호화 키를 저장하는 보조 프로세서입니다.
// Security 프레임워크를 통한 Secure Enclave 무결성 확인
#import <LocalAuthentication/LocalAuthentication.h>
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
error:&error]) {
NSLog(@"Secure Enclave를 생체 인증에 사용 가능");
} else {
NSLog(@"Secure Enclave를 사용할 수 없음: %@", error.localizedDescription);
}Swift는 Apple이 2014년에 Objective-C의 대체 언어로 발표한 프로그래밍 언어입니다. Apple의 Chris Lattner가 개발했습니다. Swift는 현대 언어(Rust, Kotlin, C#)의 구문과 C 수준의 성능을 결합합니다. TIOBE(2026)에 따르면 Swift는 상위 15개 프로그래밍 언어에 포함됩니다.
Swift는 가비지 컬렉터 없이 메모리 관리를 위해 Automatic Reference Counting(ARC)을 사용합니다. 프로토콜 지향 프로그래밍(POP)을 통해 프로토콜 확장으로 타입을 확장할 수 있습니다. Optionals는 nil의 타입 안전 처리를 제공하고, 패턴 매칭은 분기 로직을 단순화합니다.
import UIKit
/// 데이터 로딩 서비스를 위한 프로토콜
protocol DataServiceProtocol {
associatedtype T
func fetch(completion: @escaping (Result<[T], Error>) -> Void)
}
/// 사용자 로딩을 위한 서비스 구현
final class UserService: DataServiceProtocol {
typealias T = User
private let session: URLSession
private let decoder: JSONDecoder
init(session: URLSession = .shared, decoder: JSONDecoder = JSONDecoder()) {
self.session = session
self.decoder = decoder
}
func fetch(completion: @escaping (Result<[User], Error>) -> Void) {
guard let url = URL(string: "https://api.example.com/users") else {
completion(.failure(URLError(.badURL)))
return
}
session.dataTask(with: url) { [weak self] data, response, error in
guard let self, let data = data else {
completion(.failure(error ?? URLError(.badServerResponse)))
return
}
do {
let users = try self.decoder.decode([User].self, from: data)
completion(.success(users))
} catch {
completion(.failure(error))
}
}.resume()
}
}
struct User: Codable, Identifiable {
let id: Int
let name: String
let email: String
}예제는 Swift Concurrency(async/await), associatedtype이 있는 프로토콜 및 JSON 디코딩을 위한 Codable을 사용한 데이터 로딩 서비스 구현을 보여줍니다. ARC가 자동으로 메모리를 관리하고, weak self가 클로저의 강한 참조 순환을 방지합니다.
iOS 13부터 Swift는 async/await 및 Actors를 통해 내장된 비동기성을 지원합니다 — 데이터 경합으로부터 상태를 보호하는 스레드 안전 타입입니다. 멀티스레딩을 위한 DispatchQueue는 점차 async/await 및 Task 구조로 대체되고 있습니다.
actor UserRepository {
private var cache: [Int: User] = [:]
private let service = UserService()
func getUser(id: Int) async throws -> User {
if let cached = cache[id] {
return cached
}
let users = try await service.fetchAsync()
guard let user = users.first(where: { $0.id == id }) else {
throw UserError.notFound
}
cache[id] = user
return user
}
}UserRepository 액터는 캐시 접근이 단일 스레드에서 발생하도록 보장하여 경합 상태를 제거합니다. 컴파일러는 빌드 시 격리를 확인합니다 — 액터의 변경 가능한 속성에 대한 접근은 await를 통해서만 가능합니다.
Xcode는 Apple의 통합 개발 환경(IDE)으로, macOS에서만 사용할 수 있습니다. 코드 편집기, 시각적 레이아웃을 위한 Interface Builder, 장치 시뮬레이터, 프로파일링을 위한 Instruments 및 LLDB 디버거가 포함됩니다. Xcode 15는 매크로가 포함된 Swift 5.9를 지원합니다.
Interface Builder는 드래그 앤 드롭을 통한 인터페이스 생성과 XML 설명(XIB/Storyboard) 자동 생성을 가능하게 합니다. Storyboards는 화면 흐름을 설명합니다. 2023년부터 Apple은 SwiftUI Preview를 주요 시각적 개발 도구로 권장하지만, Interface Builder는 UIKit 프로젝트에서 계속 사용됩니다.
Xcode Instruments에는 수십 개의 템플릿이 포함됩니다: Time Profiler(CPU 분석), Allocations(메모리), Leaks(누수), Core Animation(FPS), Network 및 Energy Log. Metal Debugger는 GPU 호출 및 셰이더를 검사할 수 있습니다. LLDB는 Swift 표현식 지원 및 조건부 중단점이 있는 콘솔 디버거입니다.
iOS SDK에는 수백 개의 프레임워크가 포함됩니다. 아래는 모든 iOS 개발자가 매일 사용하는 주요 프레임워크입니다.
| 프레임워크 | 목적 |
|---|---|
| UIKit | 인터페이스: UIView, UIViewController, 애니메이션, 제스처 |
| SwiftUI | 반응형 업데이트를 갖춘 선언형 인터페이스 |
| Foundation | 기본 타입: String, Data, URLSession, JSONEncoder |
| Core Data | SQLite 로컬 데이터 저장을 위한 ORM |
| CloudKit | iCloud 동기화 및 백엔드 없는 서버 로직 |
| Core Location | 위치 정보: GPS, 지오펜싱, iBeacon |
| MapKit | Apple 지도 표시, 주석, 경로 |
| AVFoundation | 오디오/비디오 캡처 및 재생 |
| Metal | 저수준 그래픽 및 GPGPU 컴퓨팅 |
| Core ML | 온디바이스 추론을 갖춘 기기 내 머신 러닝 |
| PushKit / UserNotifications | 푸시 알림, VoIP, 콘텐츠 업데이트 |
Core Data는 객체 데이터 모델 관리를 위한 프레임워크입니다. UI 스레드와 백그라운드 컨텍스트 간에 객체를 저장, 로드 및 동기화할 수 있습니다. iOS 17에서는 SwiftData가 도입되었습니다 — Swift Macros를 지원하는 Core Data 위의 현대적 래퍼입니다.
UIKit과 SwiftUI 중 선택은 iOS 개발을 시작할 때 중요한 아키텍처 결정입니다. UIKit은 2007년부터 존재하며 모든 iOS 버전을 지원합니다. SwiftUI는 2019년에 도입되었으며 iOS 13+가 필요합니다.
| 기준 | UIKit | SwiftUI |
|---|---|---|
| 패러다임 | 명령형 (MVC, MVVM) | 선언형 (상태 기반) |
| 최소 iOS | iOS 2.0+ | iOS 13.0+ |
| 레이아웃 | 코드 또는 Interface Builder에서 Auto Layout | Modifier chain, HStack/VStack/ZStack |
| 사용자 정의 | 전체 (CALayer, drawRect) | 수정자로 제한됨 |
| 성능 | 높음 (수동 최적화) | 자동 무효화 |
| 미리보기 | 지원 안 함 | 실시간 Xcode Preview |
| 테스트 | XCTest + Snapshot 테스트 | XCTest + Preview 테스트 |
실제로 대부분의 상용 프로젝트는 하이브리드 접근 방식을 사용합니다: 새 화면 및 간단한 폼에는 SwiftUI, 세밀한 렌더링 제어가 필요한 복잡한 사용자 정의 구성 요소에는 UIKit을 사용합니다. Apple은 SwiftUI에 적극적으로 투자하고 있으며 2028년까지 주요 프레임워크가 될 것으로 예상됩니다.
각 iOS 앱은 UIApplication 및 AppDelegate가 관리하는 5가지 상태를 거칩니다. SwiftUI에서는 @main 속성이 있는 App Protocol이 이 역할을 수행합니다.
Not running — 앱이 실행되지 않았거나 시스템에 의해 종료되었습니다. Inactive — 앱이 전경에 있지만 이벤트를 수신하지 않습니다(예: 수신 전화 중). Active — 정상 상태로, 앱이 터치 이벤트를 수신합니다. Background — 앱이 최소화되어 백그라운드 작업을 수행합니다. Suspended — 앱이 메모리에 있지만 코드를 실행하지 않습니다.
import SwiftUI
@main
struct MyApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { oldPhase, newPhase in
switch newPhase {
case .active:
print("앱이 활성화되었습니다")
case .inactive:
print("앱이 비활성 상태입니다")
case .background:
print("앱이 백그라운드로 전환되었습니다")
@unknown default:
break
}
}
}
}메모리가 부족하면 시스템이 백그라운드에서 앱을 종료할 수 있습니다. 개발자는 onDisappear 또는 ScenePhase.background를 통해 상태를 저장하여 사용자가 앱 전환 시 데이터를 잃지 않도록 해야 합니다.
App Store는 iOS용 유일한 공식 앱 스토어입니다. 게시하려면 Apple Developer Program 구독($99/년)이 필요합니다. 각 앱은 검토를 거칩니다 — 자동(바이너리 코드 정적 분석) 및 수동(인터페이스 및 콘텐츠 확인).
개발자는 Xcode에서 아카이브를 생성하고 Transporter 또는 Xcode Organizer를 통해 App Store Connect에 업로드합니다. 평균 검토 시간은 24~48시간입니다. App Review는 가이드라인 준수를 확인합니다: 데이터 보안, 성능, HIG 디자인, 숨겨진 기능 부재.
개인정보 보호에 특별한 주의가 기울여집니다: 모든 유형의 데이터 수집은 Privacy Manifest에 선언되어야 합니다. 2025년부터 Apple은 API 사용 이유(NSPrivacyAccessedAPITypes)를 지정하도록 요구합니다. 사용자 동의 없이 추적기를 사용하는 앱은 게시가 거부됩니다.
| 요구 사항 | 설명 |
|---|---|
| Privacy Manifest | 수집된 모든 데이터 및 수집 목적의 선언 |
| HIG 준수 | Apple Human Interface Guidelines 준수 |
| 안정성 | 검토 중 충돌 없음 |
| Sandbox 규칙 | 허용된 리소스에만 접근 |
| iCloud 권한 | 올바른 iCloud 컨테이너 구성 |
자주 묻는 질문
주요 언어는 Swift입니다. Objective-C도 지원되지만 주로 레거시 프로젝트에서 사용됩니다. Swift는 Apple이 2014년에 발표한 현대적인 타입 안전 언어입니다. 2020년부터 Apple은 새 프로젝트에 Swift만을 권장합니다.
UIKit은 최대 사용자 정의가 가능한 성숙한 프레임워크로, 복잡한 인터페이스에 적합합니다. SwiftUI는 iOS 13+용 선언형 프레임워크로, 개발 속도를 2~3배 향상시킵니다. 대부분의 프로젝트는 UIViewRepresentable 및 UIHostingController를 통해 두 접근 방식을 모두 사용합니다.
Apple Developer Program 연간 구독료는 개인 개발자의 경우 $99, 조직의 경우 $299입니다. 구독 없이는 게시가 불가능합니다. App Store 수수료는 개발자의 연간 수익에 따라 판매 금액의 15~30%입니다.
SwiftUI는 iOS 13(2019)부터 사용 가능합니다. 그러나 NavigationStack, Observable Macro 및 SwiftData를 포함한 모든 기능을 사용하려면 iOS 17 및 Xcode 15가 필요합니다. 이전 버전 지원은 SwiftUI 기능을 제한합니다.
App Sandbox는 파일 시스템, 다른 앱의 데이터 및 시스템 리소스에 대한 앱의 접근을 제한하는 보안 모델입니다. 각 앱은 격리된 컨테이너에서 실행됩니다. 연락처, 사진, 마이크에 접근하려면 시스템 대화 상자를 통한 명시적 권한이 필요합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.