Static vs Dynamic Framework

Tabber·2026년 1월 29일

Swift

목록 보기
7/15
post-thumbnail

Static Framework

스태틱 프레임워크는 정적 라이브러리(.a) 와 리소스를 묶은 형태에요.
컴파일 타임 시점에 실행 파일 안에 코드 자체가 복사되어 포함돼요.

링크 방식

  • 컴파일 시점에 라이브러리 코드가 앱 바이너리에 합쳐져요. (Static Linking)

장점은 뭐에요?

  • 앱 실행속도가 빨라요
    앱이 뜰때 별도의 로딩 과정이 없다보니 다이나믹 방식보다 실행이 약간 더 빨라요.
  • 최적화되어 있어요.
    컴파일러가 앱 전체 코드를 보고 사용하지 않는 코드를 제거(Dead code stripping) 하기 유리해요.

단점은 뭐에요?

  • 코드 중복이 있어요.
    여러 타겟(앱, Extension 등)에서 동일한 스태틱 프레임워크를 쓰면 각 타겟마다 코드가 복사되어 앱 전체 용량이 커져요.
  • 빌드시간이 느려요.
    코드가 수정될 때마다 전체 앱을 다시 링크해야 하므로 빌드 시간이 늘어날 수 있어요.

Dynamic Framework

다이나믹 프레임워크는 실행 파일에 포함되지 않고, 앱이 실행될 때(Runtime) 메모리에 로드돼요. Swift로 만든 프레임워크는 기본적으로 이 방식을 많이 사용해요.

링크 방식

실행 파일에는 라이브러리의 위치 정보(Reference) 만 담고, 필요할 때 로드해요.

장점은 뭐에요?

  • 공유 메모리를 사용해요.
    여러 타겟이 하나의 다이나믹 프레임워크를 공유해서 사용하므로, 전체 앱 번들 용량을 줄일 수 있어요.
  • 모듈화하기 유리해요.
    기능별로 분리하기 좋으며, 코드 수정 시 해당 프레임워크만 다시 빌드하면 되는 경우가 많아 대규모 프로젝트에 유리해요.

단점은 뭐에요?

  • 실행속도(Cold Start)가 느려요
    앱이 처음 켜질 때 프레임워크를 찾고 연결하는 과정(dyld)이 필요해서, 너무 많아지면 앱 런칭 속도가 느려져요. (Apple은 6개 이하를 권장했으나, 최신 하드웨어에서는 더 늘어나도 무방해요.)

한눈에 비교하기

구분Static FrameworkDynamic Framework
연결 시점컴파일 타임 (Static Link)런타임 (Dynamic Link)
파일 포함앱 실행 파일 내부에 포함앱 번들 내 별도 폴더에 존재
런칭 속도빠름상대적으로 느림 (오버헤드 발생)
메모리/용량중복 포함 가능성 있음효율적인 공유 가능
Swift 호환성Swift 3.0 이전엔 제약이 있었으나 현재는 완벽 지원Swift의 기본 표준 방식

Swift에서는 무엇을 써야 할까?

과거 Swift 초기에는 ABI(Application Binary Interface) 안정화 문제로 다이나믹 프레임워크가 필수적이었지만, 지금은 상황에 따라 선택해요.

  • 작은 규모의 라이브러리
    앱 실행 속도를 위해 Static을 권장해요.
  • 여러 타겟(App + WatchApp + Extension)이 공유하는 모듈
    용량 최적화를 위해 Dynamic이 유리해요.
  • SPM
    기본적으로 .automatic 설정을 사용하면 Xcode가 상황에 맞게 최적의 방식을 결정해줘요.

프로젝트가 커지면서 앱 런칭 속도가 느려진다면 DYLD_PRINT_STATICS 환경 변수를 켜서 프레임워크 로딩에 시간이 얼마나 걸리는지 체크할 수 있어요.

profile
iOS 정복중인 Tabber 입니다.

0개의 댓글