ํฐ์คํ ๋ฆฌ ๋ทฐ
์๋ ํ์ธ์?
๋๊ตฌ๋ฆฌ์ ๋๋ค.
์์ฆ build ๊ด๋ จ๋ ๋ถ๋ถ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ์.
๋ชจ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๊ณต๋ถํ๊ธฐ ์ ์ ๋ฒ ์ด์ค ๋ด์ฉ์ธ๊ฒ๊ฐ์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ต๊ทผ์ ์ฝ๊ณ ๊ณต๋ถํ
Understanding Xcode Build System์ ๋ฒ์ญํด๋ณด๋ ค ํฉ๋๋ค.
Problem Statement
๋ชจ๋ ์ปดํจํฐ ์์คํ ์ ์ํํธ์จ์ด์ ํ๋์จ์ด๋ผ๋ ๋ ๊ฐ์ง ์ธก๋ฉด์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํ๋์จ์ด๋ ๋ชจ๋ํฐ๋ ํค๋ณด๋์ฒ๋ผ ์ปดํจํฐ์ ๋ฌผ๋ฆฌ์ ๋ถ๋ถ์ ์๋ฏธํฉ๋๋ค.
ํ๋์จ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ํํธ์จ์ด์ ์ํด ์ ์ด๋๋ฉฐ, ์ํํธ์จ์ด๋ ํ๋์จ์ด๊ฐ ์๋ํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋ ๋ช ๋ น์ด ๋ชจ์์ ๋๋ค. ์ํํธ์จ์ด๊ฐ ํ๋ก์ธ์ค๋ฅผ ์กฐ์จํ๊ณ ํ๋์จ์ด๊ฐ ์ค์ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์, ์ด ๋ ์ค ์ด๋ ๊ฒ๋ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ํํธ์จ์ด ์์ง๋์ด๋ก์ ์ฐ๋ฆฌ์ ์ฃผ๋ ์ด์ ์ ์ํํธ์จ์ด์ ๋ง์ถฐ์ ธ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ๋์จ์ด๋ Swift๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ง์ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
ํ๋์จ์ด๋ 0๊ณผ 1๋ง ์ฝ์ ์ ์์ต๋๋ค.
Swift ์ฝ๋๊ฐ ํ๋์จ์ด๊ฐ ์ฝ์ ์ ์๋๋ก ์ด๋ป๊ฒ ๋ณํ๋๋๊ฐ?
๋ต์ ์ธ์ด ์ฒ๋ฆฌ ์์คํ
(Language Processing System)์
๋๋ค.
Language Processing System
์ธ์ด ์ฒ๋ฆฌ ์์คํ ์ ์์์ ์์ค ์ธ์ด๋ก ์์ฑ๋ ๋ช ๋ น์ด ์งํฉ์์
์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋ก๊ทธ๋จ ๋ชจ์์ ๋๋ค.
์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋๋จธ๋ ๊ธฐ๊ณ์ด๋ฅผ ์ง์ ์์ฑํ๋ ๋์ ๊ณ ๊ธ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ด ํ๋ก๊ทธ๋๋ฐ์ ๋ณต์ก์ฑ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
iOS ๋๋ macOS ๊ฐ๋ฐ์์ ์ฌ์ฉํ๋ ์ธ์ด ์ฒ๋ฆฌ ์์คํ ์ Xcode ๋น๋ ์์คํ (Xcode Build System)์ ๋๋ค.
Xcode Build System
Xcode ๋น๋ ์์คํ ์ ์ฃผ์ ๋ชฉํ๋ ๋ค์ํ ์์ ์ ์คํ์ ์กฐ์จํ์ฌ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ ๋๋ค.
Xcode๋ ๋ค์ํ ๋๊ตฌ๋ฅผ ์คํํ๊ณ , ์ฌ๋ฌ ์ธ์๋ฅผ ์ด๋ค ์ฌ์ด์์ ์ ๋ฌํ๋ฉฐ, ์คํ ์์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
๋ค์ Swift ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ์๋์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ง ์์ ์์ ๋ค์ ๋๋ค.
๋๋ถ๋ถ์ ์ธ์ด ์ฒ๋ฆฌ ์์คํ ๊ณผ ๊ฐ์ด Xcode ๋น๋ ์์คํ ์ ๋ค์์ 5๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค:
- Preprocessor (์ ์ฒ๋ฆฌ๊ธฐ)
- Compiler (์ปดํ์ผ๋ฌ)
- Assembler (์ด์ ๋ธ๋ฌ)
- Linker (๋ง์ปค)
- Loader (๋ก๋)
์ด ๊ตฌ์ฑ ์์๋ค์ ์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ํจ๊ป ์๋ํฉ๋๋ค
Preprocessing
์ ์ฒ๋ฆฌ ๋จ๊ณ์ ๋ชฉ์ ์ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ํํ๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค.
์ด ๊ณผ์ ์์ ๋งคํฌ๋ก๋ฅผ ์ ์๋ก ๋์ฒดํ๊ณ , ์์กด์ฑ์ ํ์งํ๋ฉฐ, ์ ์ฒ๋ฆฌ ์ง์๋ฌธ์ ์ฒ๋ฆฌํฉ๋๋ค.
Swift ์ปดํ์ผ๋ฌ์๋ ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก Swift ํ๋ก์ ํธ์์ ๋งคํฌ๋ก๋ฅผ ์ ์ํ ์ ์์ด์
Xcode ๋น๋ ์์คํ ์ ํ๋ก์ ํธ ๋น๋ ์ค์ ์์ Active Compilation Conditions(ํ์ฑ ์ปดํ์ผ ์กฐ๊ฑด)์ ์ฌ์ฉํ์ฌ ์ ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๋ณด์ํฉ๋๋ค.

Xcode๋ ์์กด์ฑ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด llbuild(lower-level build system)์ ์ฌ์ฉํฉ๋๋ค.
llbuild๋ ์คํ ์์ค๋ก ์ ๊ณต๋๋ฉฐ, ์ถ๊ฐ ์ ๋ณด๋ swift-llbuild ์์ ํ์ธํ ์ ์์ต๋๋ค.
Complier
์ปดํ์ผ๋ฌ๋ Swift, Objective-C, C/C++ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํฉ๋๋ค.
Xcode๋ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค:
- Swift: swiftc
- Objective-C, Objective-C++, C/C++: clang
clang์ C ์ธ์ด ๊ณ์ด์ ์ํ Apple์ ๊ณต์ ์ปดํ์ผ๋ฌ์ ๋๋ค. swift-clang
swiftc๋ Swift ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ์คํํ๋ Swift ์ปดํ์ผ๋ฌ ์คํ ํ์ผ์ ๋๋ค. Swift Language Repository
Xcode์์ Build Settings์ ๋ค์ด๊ฐ๋ฉด ์์ ์ปดํ์ผ๋ฌ ์ค์ ์ ๋ณผ ์ ์์ต๋๋ค.


์ปดํ์ผ๋ฌ๋ ํฌ๊ฒ ํ๋ก ํธ์๋(Front End)์ ๋ฐฑ์๋(Back End)๋ก ๋๋ฉ๋๋ค.
ํ๋ก ํธ์๋
- ์์ค ํ๋ก๊ทธ๋จ์ ์๋ฏธ๋ ํ์ ์ ๋ณด๋ฅผ ํฌํจํ์ง ์์ ๊ฐ๋ณ ์กฐ๊ฐ์ผ๋ก ๋๋๋๋ค.
- ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ์ ์ฉํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ค ํ๋ก๊ทธ๋จ์ Intermediate Representation์ ์์ฑํฉ๋๋ค.
- ์์ค ํ๋ก๊ทธ๋จ ์ ๋ณด๋ฅผ ์์งํ๋ ์ฌ๋ณผ ํ ์ด๋ธ(Symbol Table)์ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
Symbol์ ์ฝ๋๋ ๋ฐ์ดํฐ์ ํน์ ์กฐ๊ฐ์ ๋ถ์ฌ์ง ์ด๋ฆ์
๋๋ค.
์ฌ๋ณผ ํ
์ด๋ธ์ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํด ์ ์ฅํฉ๋๋ค.
Swift ์ปดํ์ผ๋ฌ์์๋ Intermediate Representation์ด Swift Intermediate Language(SIL)์ด๋ฉฐ
์ฝ๋์ ์ถ๊ฐ ๋ถ์๊ณผ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
SIL์์ ์ง์ ๊ธฐ๊ณ์ด๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก LLVM Intermediate Representation์ผ๋ก ํ ๋ฒ ๋ ๋ณํ๋ฉ๋๋ค.
๋ฐฑ์๋
- Intermediate Representation์ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
Assembler
์ด์ ๋ธ๋ฌ๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์ฌ๋ฐฐ์น ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด(Machine Code)๋ก ๋ณํํฉ๋๋ค. ์ด ๊ณผ์ ์์ Mach-O ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
๊ธฐ๊ณ์ด(Machine Code)
CPU๊ฐ ์ง์ ์คํํ ์ ์๋ ๋ช
๋ น์ด ์งํฉ์ ๋ํ๋ด๋ ์ซ์ ์ธ์ด์
๋๋ค.
์ด ๊ธฐ๊ณ์ด๋ ์ฌ๋ฐฐ์น ๊ฐ๋ฅ(relocatable)ํ๋ฐ, ์ด๋ ๊ฐ์ฒด ํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ ์์น์ ์๋ ์ง ๊ฐ์ ํด๋น ์์น์ ์๋์ ์ผ๋ก ๋ช
๋ น์ด๋ฅผ ์คํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
Mach-O ํ์ผ
iOS ๋ฐ macOS ์ด์ ์ฒด์ ์์ ์ฌ์ฉ๋๋ ํน์ ํ์ผ ํ์์ผ๋ก, ๊ฐ์ฒด ํ์ผ, ์คํ ํ์ผ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ iOS ๊ธฐ๊ธฐ์ ARM ํ๋ก์ธ์ ๋๋ Mac์ Intel ํ๋ก์ธ์์์ ์คํ๋ ์ ์๋ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Linker
๋ง์ปค๋ ์ฌ๋ฌ ๊ฐ์ฒด ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋๋ก ๋ณํฉํ์ฌ iOS ๋๋ macOS ์์คํ ์์
์คํํ ์ ์๋ ๋จ์ผ Mach-O ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
๋ง์ปค๋ ๋ ๊ฐ์ง ์ ํ์ ํ์ผ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค.
- ์ด์ ๋ธ๋ฆฌ ๋จ๊ณ์์ ์์ฑ๋ ๊ฐ์ฒด ํ์ผ
- ์ฌ๋ฌ ์ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (.dylib, .tbd, .a)
์ฃผ์
์ด์ ๋ธ๋ฌ์ ๋ง์ปค ๋ชจ๋ ์ถ๋ ฅ์ผ๋ก Mach-O ํ์ผ์ ์์ฑํ๋๋ฐ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ ๋จ๊ณ์์ ์์ฑ๋ ๊ฐ์ฒด ํ์ผ์ ์์ง ์์ฑ๋์ง ์์์ต๋๋ค. ์ผ๋ถ ๊ฐ์ฒด ํ์ผ์๋ ๋ค๋ฅธ ๊ฐ์ฒด ํ์ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ๋๋ฝ๋ ์กฐ๊ฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฝ๋์์ printf๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ง์ปค๋ ์ด ์ฌ๋ณผ์ printf ํจ์๊ฐ ๊ตฌํ๋ libc ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐํฉ๋๋ค. ๋ง์ปค๋ ์ปดํ์ผ๋ฌ ๋จ๊ณ์์ ์์ฑ๋ ์ฌ๋ณผ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด ํ์ผ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
Loader
๋ก๋๋ ์ด์ ์ฒด์ ์ ์ผ๋ถ๋ก, ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ธ์ ์คํํฉ๋๋ค.
- ํ๋ก๊ทธ๋จ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํฉ๋๋ค.
- ๋ ์ง์คํฐ๋ฅผ ์ด๊ธฐ ์ํ๋ก ์ค์ ํฉ๋๋ค.
๋งค๋ฒ ๋ณด๋ ํ์ผ์ด ์ด๋์ ์ด๋ค ์ญํ ์ ํ๋์ง ์๊ฒ๋ ์ ์ตํ ๋ด์ฉ์ด์์ต๋๋ค.
์ฐธ๊ณ
https://www.vadimbulavin.com/xcode-build-system/
Understanding Xcode Build System
Every Swift program undergoes a number of transformations before it can be run on a real device. This process is usually handled by an Xcode Build System. In this article we'll take a look at each part of Xcode Build System: Swift compiler, linker, preproc
www.vadimbulavin.com
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Linker ์์๋ณด๊ธฐ (0) | 2025.01.12 |
|---|---|
| [Xcode] build configuration file(xcconfig) ์์๋ณด๊ธฐ (0) | 2025.01.01 |
| [Xcode] Project, Target, Build Settings ๋ฑ ๊ฐ ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.12.23 |
| [iOS] Keychain (1) | 2024.11.04 |
| [iOS] UserDefaults (0) | 2024.11.03 |
- Total
- Today
- Yesterday
- ๊ณต๋ถ
- Clean
- ์ค์ํํธ ๊ณต๋ถ
- swift ๊ณต๋ถ
- func
- ์ค์ํํธ
- ์ค์ํํธ ํ๋กํ ์ฝ
- RX
- ํ๋กํผํฐ
- ์ค์ํํธ map
- XCTest
- test
- URLSession
- set
- Protocol
- autolayout
- RxSwift
- swift urlsession
- Unit Test
- Property
- network
- xcode
- ํ๋กํ ์ฝ
- ios
- ์คํ ๋ ์ด์์
- swift ํ๋กํ ์ฝ
- swift
- Swift Network
- observable
- ํ ์คํธ
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |