티스토리 뷰
iOS 개발을 하다 보면 직접 라이브러리를 만들거나 외부 라이브러리를 추가해야 할 일이 많다.
그런데 라이브러리를 선택할 때 스태틱 라이브러리(Static Library) 와 다이나믹 라이브러리(Dynamic Library) 라는 두 가지 개념이 등장한다.
어떤 차이가 있을까? 실행 속도, 앱 크기, 유지보수성 측면에서 어떤 것이 더 유리할까?
실제로 iOS 프로젝트에서 각각을 어떻게 활용해야 할까?
1️⃣ 스태틱 라이브러리 vs 다이나믹 라이브러리, 개념 정리
iOS에서 라이브러리는 공통 기능을 묶어 재사용할 수 있도록 만든 코드 모음이다.
이 라이브러리는 로드(Load) 방식에 따라 두 가지로 나뉜다.
| 구분 | 스태틱 라이브러리 (Static Library) | 다이나믹 라이브러리 (Dynamic Library) |
| 확장자 | .a, .framework | .dylib, .framework |
| 로드 방식 | 컴파일 시 앱에 포함 | 앱 실행 시 로드 |
| 성능 | 실행 속도가 빠름 | 메모리 사용 최적화 |
| 앱 크기 | 크기가 증가 | 크기가 줄어듦 |
| 공유 가능 여부 | 앱 내에서만 사용 | 여러 앱에서 공유 가능 |
| 업데이트 | 앱을 다시 빌드해야 적용 | 앱 업데이트 없이 교체 가능 |
| 예시 | libsqlite3.a | UIKit.framework, CoreData.framework |
이제 각각의 특징을 좀 더 자세히 살펴보자.
2️⃣ 스태틱 라이브러리(Static Library)
✅ 스태틱 라이브러리란?
- 앱이 빌드될 때 라이브러리가 실행 파일에 직접 포함됨
- 실행 속도는 빠르지만, 앱 크기가 증가
- 다른 앱과 공유할 수 없으며, 각 앱이 개별적으로 포함해야 함
✅ 빌드 과정
- 소스 코드를 컴파일하여 .a 파일 생성
- 앱 바이너리와 함께 링킹되어 최종 실행 파일에 포함됨
- 외부 의존성이 없기 때문에 배포 시 안정적
✅ 장점
- 실행 속도가 빠름 (앱 실행 시 추가 로드 과정이 없음).
- 라이브러리가 실행 파일에 포함되므로 외부 환경에 영향을 받지 않음.
- App Store 배포에 제한이 없음.
✅ 단점
- 앱 크기가 커질 수 있음.
- 라이브러리를 업데이트하려면 앱을 다시 빌드 및 배포해야 함.
- 다른 앱과 공유할 수 없음 (앱 내부에서만 사용 가능).
📌 스태틱 라이브러리는 이런 경우에 유용하다!
- 라이브러리를 자주 업데이트할 필요가 없을 때
- 앱이 오프라인에서도 안정적으로 실행되어야 할 때
- 실행 성능이 중요한 경우 (예: 실시간 처리, 게임 엔진 등)
3️⃣ 다이나믹 라이브러리(Dynamic Library)
✅ 다이나믹 라이브러리란?
- 앱 실행 시 필요할 때 로드되는 라이브러리
- 실행 파일 크기는 줄어들지만, 앱 실행 시 로드 시간이 필요할 수 있음
- 여러 앱에서 공유할 수 있어 메모리 사용량을 절감
✅ 빌드 과정
- 소스 코드를 컴파일하여 .dylib 또는 .framework 형태로 생성
- 앱 실행 시 동적으로 라이브러리가 로드됨
- 라이브러리만 교체하면 앱을 업데이트하지 않고도 수정 가능
✅ 장점
- 앱 실행 파일 크기가 줄어듦.
- 라이브러리만 교체하면 업데이트가 가능 (앱 전체를 다시 빌드할 필요 없음).
- 여러 앱에서 동일한 라이브러리를 공유할 수 있어 메모리 사용량이 절감됨.
✅ 단점
- 앱 실행 시 라이브러리를 로드하는 과정이 필요하여 초기 실행 속도가 느려질 수 있음.
- iOS의 App Store 정책상 .dylib 사용 불가, 다이나믹 프레임워크(.framework)만 가능.
- 라이브러리가 삭제되거나 손상되면 앱이 실행되지 않을 수도 있음.
📌 다이나믹 라이브러리는 이런 경우에 유용하다!
- 라이브러리를 자주 업데이트해야 할 때
- 여러 앱에서 동일한 라이브러리를 공유해야 할 때
- 앱 크기를 줄이고 싶을 때
4️⃣ 스태틱 프레임워크 vs 다이나믹 프레임워크
iOS에서는 .framework 형태의 라이브러리를 사용할 수도 있다.
프레임워크는 내부적으로 스태틱 프레임워크와 다이나믹 프레임워크로 나뉜다.
구분 스태틱 프레임워크 다이나믹 프레임워크
| 구분 | 스태틱 프레임워크 | 다이나믹 프레임워크 |
| 포함 방식 | 앱 바이너리에 포함 | 런타임에 로드 |
| 실행 속도 | 빠름 | 약간 느림 |
| 앱 크기 | 증가 | 감소 |
| 업데이트 | 앱 업데이트 필요 | 라이브러리만 교체 가능 |
| 사용 예시 | 일부 서드파티 라이브러리 | UIKit.framework |
Xcode 9부터는 스태틱 프레임워크 사용이 가능해졌다!
이전에는 .framework 형식은 무조건 다이나믹 프레임워크였지만, 이제는 스태틱 프레임워크도 사용할 수 있다.
5️⃣ 실무에서 라이브러리 선택 기준
✅ 스태틱 라이브러리를 선택해야 하는 경우
- 라이브러리를 외부 환경에 의존하지 않고 안정적으로 유지하고 싶을 때
- 실행 속도가 중요한 경우
- App Store 심사 제한을 피하고 싶을 때
✅ 다이나믹 라이브러리를 선택해야 하는 경우
- 라이브러리를 자주 업데이트해야 할 때
- 앱 크기를 줄이고 싶을 때
- 여러 앱에서 공유해야 할 때
📌 결론:
- 대부분의 iOS 앱에서는 스태틱 라이브러리 또는 다이나믹 프레임워크를 사용한다.
- 서드파티 SDK는 다이나믹 프레임워크를 사용하는 경우가 많다.
- 성능을 우선시한다면 스태틱 라이브러리, 유지보수성을 높이고 싶다면 다이나믹 라이브러리가 적합하다.
정리
✅ 스태틱 라이브러리는 컴파일 시 포함되며, 실행 속도가 빠르지만 앱 크기가 증가한다.
✅ 다이나믹 라이브러리는 런타임에 로드되며, 앱 크기는 줄어들지만 실행 속도가 약간 느려질 수 있다.
✅ iOS 앱에서는 스태틱 라이브러리(.a), 다이나믹 프레임워크(.framework) 가 주로 사용된다.
✅ App Store 배포 시 .dylib 사용은 불가능하며, 다이나믹 프레임워크를 사용해야 한다.
✅ 실무에서는 앱 크기와 성능, 업데이트 용이성을 고려해 적절한 라이브러리를 선택해야 한다.
스태틱 vs 다이나믹 라이브러리, 이제 확실히 이해됐을까?
프로젝트에서 어떤 방식이 더 적절할지 고민해보고, 직접 적용해보자!
'iOS' 카테고리의 다른 글
| 비동기 처리의 새로운 패러다임, Combine 가이드 (0) | 2025.03.18 |
|---|---|
| TCA(The Composable Architecture): iOS 개발의 새로운 패러다임 (0) | 2025.03.11 |
| iOS Xcode 빌드 단계(Build Process) 완벽 정리 (0) | 2025.03.04 |
| iOS 앱 생명주기(App Lifecycle) 제대로 알아보기 (0) | 2025.03.03 |
| OperationQueue - iOS에서 비동기 작업을 효율적으로 관리하는 방법! (0) | 2025.02.27 |