Swift와 C의 만남, 왜 주목할까
Swift는 보통 iOS나 macOS 앱을 만들 때 쓰는 언어로 알려져 있죠. 그런데 Swift가 계속 발전하면서 서버 사이드, 임베디드, 심지어 웹(WASM)까지 활용 범위가 넓어지고 있어요. 이런 확장이 가능한 핵심 이유 중 하나가 바로 Swift의 C 호환성이에요.
Swift는 태생적으로 C 언어와 잘 어울리도록 설계되었어요. Objective-C와의 호환을 위해 만들어진 브릿징 기술이 C 라이브러리와도 자연스럽게 연결되거든요. 이번에 소개할 글은 게임 개발용 C 라이브러리인 Raylib을 Swift에서 직접 호출하고, 나아가 WebAssembly(WASM)로 컴파일해서 브라우저에서 실행하는 것까지 실험한 내용이에요.
Raylib이 뭔가요?
Raylib은 간단한 2D/3D 게임이나 그래픽 애플리케이션을 만들기 위한 C 라이브러리예요. SDL이나 SFML과 비슷한 포지션인데, 특징이 있다면 극도로 심플하다는 거예요. 헤더 파일 하나만 포함하면 바로 창을 띄우고 도형을 그릴 수 있을 정도로 API가 직관적이에요. 교육용으로도 많이 쓰이고, 게임잼(짧은 시간 안에 게임을 만드는 대회) 같은 데서도 인기가 높아요.
이걸 Swift에서 쓴다는 건, Swift Package Manager(SPM)로 C 라이브러리를 감싸서 Swift 코드에서 자연스럽게 호출할 수 있다는 걸 보여주는 거예요.
기술적으로 어떻게 동작하나
Swift에서 C 라이브러리를 쓰려면 몇 가지 단계가 필요해요.
첫 번째는 모듈맵(module map) 작성이에요. C 라이브러리의 헤더 파일을 Swift가 이해할 수 있도록 매핑해주는 파일인데요, 이게 뭐냐면 "이 C 헤더에 정의된 함수들을 Swift에서 이런 이름으로 쓸 수 있게 해줘"라고 알려주는 설정 파일이에요. SPM에서는 systemLibrary 타겟이나 C 소스를 직접 포함하는 방식으로 이걸 처리할 수 있어요.
두 번째는 타입 브릿징이에요. C의 int는 Swift의 Int32로, char*는 UnsafePointer<CChar>로 변환되는 식이죠. 대부분 자동으로 되지만, 포인터를 다루는 부분에서는 Swift의 안전성 모델(unsafe 키워드 사용 등)을 이해해야 해요.
여기서 정말 흥미로운 부분은 WASM 빌드예요. Swift 5.9부터 실험적으로 WebAssembly 타겟을 지원하기 시작했는데요, SwiftWasm 프로젝트를 통해 Swift 코드를 .wasm 파일로 컴파일하고 브라우저에서 실행할 수 있어요. Raylib도 Emscripten을 통해 WASM으로 빌드할 수 있기 때문에, Swift + Raylib 조합을 통째로 웹에서 돌리는 게 가능해지는 거예요.
물론 쉽지만은 않아요. WASM 환경에서는 파일 시스템 접근이나 스레딩 같은 부분에 제약이 있고, 그래픽 렌더링도 WebGL을 통해야 하기 때문에 네이티브와 동일한 성능을 기대하긴 어려워요. 하지만 "Swift로 작성한 게임을 브라우저에서 바로 실행한다"는 개념 자체가 Swift의 크로스플랫폼 가능성을 보여주는 강력한 데모예요.
업계 맥락에서 보면
Swift의 크로스플랫폼 확장은 Apple 생태계 밖에서도 꾸준히 진행되고 있어요. Swift on Server(Vapor, Hummingbird), Swift for TensorFlow(비록 중단되었지만), 그리고 이제 WASM까지. 특히 Rust가 WASM 생태계에서 강세를 보이고 있는데, Swift도 이 영역에 발을 들이고 있는 거예요.
C 호환성 측면에서 비교하자면, Rust는 FFI(Foreign Function Interface)를 통해 C와 연동하지만 unsafe 블록이 필요하고 bindgen 같은 도구로 바인딩을 자동 생성하는 방식이에요. Zig는 아예 C 코드를 직접 import할 수 있는 독특한 접근을 취하고 있고요. Swift의 C 호환성은 이 둘의 중간쯤에 위치해요. 자동 브릿징이 꽤 잘 되지만, 복잡한 C 코드에서는 수동 작업이 필요하죠.
한국 개발자에게 주는 시사점
한국에서 Swift 개발자라고 하면 대부분 iOS 앱 개발자를 떠올리잖아요. 하지만 이런 실험들이 보여주는 건, Swift 실력이 모바일 밖에서도 충분히 활용될 수 있다는 거예요. 특히 이미 Swift에 익숙한 iOS 개발자가 게임 프로토타입이나 인터랙티브 데모를 만들 때, UIKit이나 SwiftUI 대신 Raylib 같은 가벼운 C 라이브러리를 붙여서 쓰는 것도 재미있는 선택지예요.
WASM 쪽도 주목해볼 만해요. 지금은 실험 단계이지만, Swift로 작성한 로직을 웹에서 실행할 수 있다는 건 풀스택 Swift 가능성의 시작점이니까요. 당장 프로덕션에 쓰기보다는 사이드 프로젝트나 기술 탐색 차원에서 한번 시도해보면 좋을 것 같아요.
핵심 정리
Swift의 C 호환성은 생각보다 강력하고, Raylib 같은 C 라이브러리를 붙여서 WASM으로까지 빌드하는 게 현실적으로 가능한 수준이에요. iOS 개발에만 갇혀 있던 Swift의 가능성이 계속 넓어지고 있는 거죠. Swift로 웹이나 게임 쪽을 시도해보신 경험이 있으신가요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공