YunDaeHyeon
← Lab

Swift 개발 환경 세팅 종류

스터디2025.06.04
  • Swift
  • Xcode
  • SPM

Swift는 다양한 방법으로 실행할 수 있다. 이에 따라 진행하는 프로젝트 유형과 개발 환경에 따라 적절한 도구를 초기에 선택하는 것이 중요하다고 생각한다.

따라서 다양한 Swift 실행 방법과 이를 가능하게 하는 Toolchain과 LSP에 대해 학습한다.

나만의 학습 목표

  1. 다양한 Swift 개발 환경을 구축할 수 있는가?
  2. 프로젝트 유형별로 적절한 환경 세팅을 선택할 수 있는가?
  3. Swift의 다양한 빌드 도구들을 설명할 수 있는가?

Swift 실행 방법 종류

1. 스크립트 실행 방식

가장 단순한 Swift 코드 실행 방식이다.

# day1.swift를 터미널에서 직접 실행하는 방식
swift day1.swift

# 컴파일 후 실행하는 방식
swiftc day1.swift -o day1
./day1

터미널에서 Swift 파일을 직접 실행하는 방법을 인터프리터 모드 혹은 스크립트 방식 이라고 한다.

위 방식은 간단한 단일 코드를 실행하거나 빠른 프로토타이핑이 가능해 단순 문제 풀기에 적합한 구조다.

하지만 단일 코드만 실행할 수 있다는 한계가 명확해 복잡한 프로젝트 구조에 적합하지 않다. 또한 라이브러리를 적용할 수 없어 의존성 관리도 어렵고 디버깅과 IDE 지원이 제한적이라는 단점이 존재한다.


2. SPM(Swift Package Manager) 방식

Swift에서 공식적으로 제공하는 패키지 매니저를 활용한 방식이다.

# 패키지를 생성할 위치로 이동
cd swift_study

# 새로운 패키지 생성
swift package init --type executable

## 해당 폴더에 Package.swift와 Sources 폴더 생성
## Sources/main.swift의 초기 내용은 아래와 같다.
## // The Swift Programming Language
## // https://docs.swift.org/swift-book

## print("Hello, world!")

# 빌드
swift build

# 실행
swift run # Hello, world!

해당 방식은 의존성 관리를 자동화할 수 있고, 표준화된 프로젝트 구조를 구축할 수 있다.

하지만, 초기 설정이 복잡하고 Xcode에서 실행하는 것에 비해 설정이 다소 번거럽고 시각적인 디버깅 도구가 부족하다.


3. Xcode 프로젝트 방식

기존에 SPM 방식으로 생성한 Package.swift 을 열거나 직접 Xcode 프로젝트를 생성하여 실행하는 방법이다.

# 생성한 SPM 패키지를 Xcode에서 열기
open Package.swift

공식적인 IDE를 사용할 수 있으며 GUI 환경에서 개발할 수 있다. 디버깅 도구도 제공되며 가장 많이 사용되는 개발 방식이지 않을까 싶다. 단점으로는 macOS 환경에서만 실행할 수 있다는 한계가 명확하다.


4. VS Code + SourceKit-LSP 방식

VS Code에서 Swift 공식 확장과 SourceKit-LSP를 활용해 Swift 개발 환경을 구축하는 방식이다. 자동완성, 정의로 이동 등의 기능을 사용할 수 있다.

# swift와 sourcekit-lsp가 설치되었는지 확인
which swift
which sourcekit-lsp

# SPM 설치 확인
swift package --version

# VS Code에 공식 확장 설치하기
# 만약 code 명령어가 실행안되면
# VS Code에서 cmd + shift + p를 입력해 VS Code Install 'code' command in PATH 진행
code --install-extension swiftlang.swift-vscode

# 실행
swift run

이 방식은 Xcode에서 직접 프로젝트를 생성하지 않고 다양한 환경에서 Swift 개발을 진행할 수 있으며 가볍고 빠르게 Swift 코드를 작성할 수 있다는 장점이 있다.

단점으로는 Xcode에 비해 디버깅 기능이 제한적이고 ios와 macOS 개발에는 적합하지 않다.

또한 2025년 2월 기준 최신 VS Code의 Swift 확장 기능은 시스템에 설치된 Swift Toolchain을 자동으로 찾아 적절한 sourcekit-lsp를 적용한다! 단, SPM으로 생성한 프로젝트에서 정상적으로 동작한다는 단점이 존재한다.

이 방식은 서버 사이드 개발이나 단순한 문제 풀이, 스크립트 수준의 작업에 유용하다.

2025년 2월 10일 Swift용 VS Code 확장 프로그램 업데이트 내용


Swift Toolchain 학습

Toolchain이란?

소프트웨어 개발에 필요한 다양한 도구들의 집합이며 개발자가 작성한 코드를 실행 가능한 프로그램으로 변환하는 전체 과정을 담당한다.

각각의 도구들은 서로 연결되어 한 도구의 출력이 다음 도구의 입력이 되는 구조를 가진다.

  • Toolchain의 기본 구성 요소
  • 컴파일러(Compiler)
  • 어셈블러(Assembler)
  • 링커(Linker)
  • 디버거(Debugger)
  • 라이브러리(Library)

Swift Toolchain 구성 요소

Swift Toolchain은 위 툴체인을 Swift에 특화시킨 것과 마찬가지다. Swift로 개발할 때 필요한 도구들의 집합을 Swift Toolchain이라 한다.

Swift Toolchain엔 Swift 컴파일러, 링커, 디버거, 문서 생성기, 표준 라이브러리 등이 포함된다.

Xcode와 같은 개발 환경에서 여러 버전의 Swift Toolchain을 선택하거나 교체할 수 있다.

  • Swift Toolchain의 주요 구성 요소
  • Swift 컴파일러
  • Swift 표준 라이브러리
  • Swift 런타임
  • Swift Package Manager 등 부가적인 도구들

아래 명령어를 통해 Swift Toolchain의 위치를 확인할 수 있다.

# Swift 버전 확인 (설치 유무 확인)
swift --version

# 결과
swift-driver version: 1.115.1 Apple Swift version 6.0.3 (swiftlang-6.0.3.1.10 clang-1600.0.30.1)
Target: arm64-apple-macosx15.0

# Swift Toolchain 설치 경로 확인
ls /Applications/Xcode.app/Contents/Developer/Toolchains/

# 사용할 수 있는 swift 도구들 확인
which swift
which swiftc
which swift-package

🤔 용어 짚고 넘어가기 : 컴파일러, 런타임, 라이브러리

Swift Toolchain에 대해 학습하던 중 컴파일러, 런타임, 표준 라이브러리에 대해 헷갈려 다시 한 번 정리하고 넘어간다.

  • 컴파일러 : 소스 코드를 중간언어(IR) → 기계어로 변환. 런타임과 표준 라이브러리를 사용을 위한 코드를 삽입한다.
  • 런타임 : 프로그램 실행 중 필요한 기능(메모리 관리, 예외 처리 등)을 제공한다. 컴파일러가 생성한 코드가 런타임을 호출한다.
  • 표준 라이브러리 : 언어에서 제공하는 기본 함수, 자료구조, 알고리즘 등을 제공한다. 컴파일 시 링크되어 프로그램에서 사용된다.

Swift 개발도구의 LSP와 SourceKit 학습

LSP(Language Server Protocol)이란?

마이크로소프트 LSP 공식 설명문서

LSP는 IDE와 같은 코드 에디터와 언어 서버 간의 표준화된 통신 프로토콜이다.

다양한 에디터(VS Code, Vim, Atom 등)에서 언어별 기능(자동완성, 정의로 이동, 문법 검사 등)을 일관성 있게 제공하기 위해 사용된다.

  • 동작 원리
  1. 코드 에디터가 별도의 프로세스로 언어 서버를 실행한다.
  2. 개발자가 코드 편집, 심볼 클릭, 자동완성 요청 등을 하면 에디터가 LSP 메세지를 실행한 서버에 전송한다. (예 : textDocument/completion, textDocument/definition 등)
  3. 서버는 해당 요청을 처리해 응답(예: 자동완성된 코드의 목록, 심볼의 위치)을 반환한다.

SourceKit과 SourceKit-LSP

SourceKit

SourceKit은 Swift 컴파일러의 백엔드 서비스이다. Swift 소스코드의 파싱, 구문 강조, 타입 확인, 자동완성, 심볼 탐색, 문서 추출 등 IDE 기능을 제공한다.

Xcode 같은 IDE에서 Swift 코드를 작성한다면 SourceKit이 별도의 프로세스(sourcekitd)로 동작하면서 실시간 코드 분석 기능을 지원한다. 이를 통해 소스 코드를 빠르게 분석할 수 있다.

SourceKit-LSP

swiftlang, sourcekit-lsp 공식

SourceKit-LSP는 Swift와 C 계열 언어를 위한 LSP 구현체이다. SourceKit-LSP는 SourceKit(혹은 Clangd)을 기반으로 하여 LSP를 지원하는 에디터(VS Code 등..)에서 Swift와 C 계열 언어에 대한 자동완성, 정의로 이동, 문법 진단, 리팩토링 등의 기능을 제공한다.


🤔 SourceKit-LSP와 Toolchain의 관계는 뭘까?

SourceKit-LSP는 Swift Toolchain에 포함되어 배포되며 Xcode 및 공식 Swift Toolchain 설치 시 함께 설치된다. 실제 sourcekit-lsp 라는 실행 파일로 제공되며, IDE에서 LSP 서버로 구동된다.


Swift Toolchain 내에서의 역할과 위치 정리

구성 요소역할Toolchain 내 위치/구성
Swift 컴파일러소스코드를 바이너리/중간코드로 변환, 빌드의 핵심 역할/usr/bin/swiftc 등 Toolchain 내 주요 실행 파일
SourceKitIDE/에디터에 실시간 코드 분석, 자동완성, 심볼 탐색 등 제공Toolchain 내부의 라이브러리 및 데몬(sourcekitd)
SourceKit-LSPLSP 프로토콜을 통해 SourceKit 기능을 외부 에디터에 노출, LSP 서버 역할Toolchain 내 별도 실행 파일(sourcekit-lsp)
표준 라이브러리 등언어 기본 기능 제공, 컴파일 시 자동 링크Toolchain 내 라이브러리 디렉토리