SlideShare a Scribd company logo
1 of 40
Download to read offline
빌드 버튼이 눌린다음에 무슨일이
일어나는 걸까?
이현호
hyunho.lee@wadiz.kr
이현호 입니다
와디즈 iOS개발자 입니다
지난 이야기
•패키지 매니져 중 무엇을 쓰지?
•뭐가 빠르고 뭐가 느리지?
•왜 느린거지?
•빌드 버튼을 눌렀을 때 무슨 작업 때
문에 느려지는거지?
•무슨 일이 일어나는거지?
우리가 하는 일
Command + B
Command + R
•제가 가장 많이 하는 일 중 하나
•저의 개발 시간 중 가장 많이 소요되는 작
업 중 하나
•뭔진 모르겠지만 뭔가 많이 돌아감
인지 하고 있는 부분
코딩을 하고 실행을 하면 App이 뚝딱!
‘WWDC2018’에 따르면
1. 소스코드 컴파일 && 링크
2. 리소스 복사
3. 코드 사인 + 커스텀 스크립트 실행
New build system
•New build system
•File > project settings
•Xcode10 에서 도입되었습니다
•Legacy와는 다르겠죠
빌드 실행 순서
Report navigator
1. Compile swift files
3. Compile asset
4. Compile storyboards
5. Process info.plist
6. Link Storyboards
2. Link TeamNine
7. Run script(Lint)
8. Sign app
9. Touch app
Command + 9
왜 저 순서대로 진행되는거죠?
Compile swift files
왜 저 순서대로 진행되는거죠?
Compile swift filesMyTeam.swift
왜 저 순서대로 진행되는거죠?
Compile swift filesMyTeam.swift MyTeam.o
왜 저 순서대로 진행되는거죠?
??Compile swift files MyTeam.o
빌드 실행 순서
Report navigator 1. Compile swift files
3. Compile asset
4. Compile storyboards
5. Process info.plist
6. Link Storyboards
7. Run script(Lint)
8. Sign app
9. Touch app
2. Link TeamNine
왜 저 순서대로 진행되는거죠?
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
TeamNine
Compile swift filesMyTeam.swift MyTeam.o
의존성이 보이시나요?
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
TeamNine
MyTeam.swift
MyRank.swift
MyList.swift
순서만 알면 땡?
어디가 문제를 만드는 걸까요?
빌드프로세스의 의존성
MyTeam.swift
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
MyRank.swift
MyList.swift
TeamNine
info.plist
Assets.xcassets
Storyboard
빌드프로세스는 어떻게 동작 하는가?
MyTeam.swift
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
MyRank.swift
MyList.swift
TeamNine
info.plist
Assets.xcassets
Storyboard
빌드프로세스는 어떻게 동작 하는가?
MyTeam.swift
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
MyRank.swift
MyList.swift
TeamNine
info.plist
Assets.xcassets
Storyboard
매번 같은 일은 반복?
MyTeam.swift
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
MyRank.swift
MyList.swift
TeamNine
info.plist
Assets.xcassets
Storyboard
증분빌드
MyTeam.swift
Link TeamNine
MyTeam.o
MyRank.o
MyList.o
MyRank.swift
MyList.swift
TeamNine
info.plist
Assets.xcassets
Storyboard
증분빌드
우리가 고려해야 할 점
•빌드 순서를 잘 맞추기 보다는
•작업의 의존성을 고려해주세요!
•의존성이 단순하면 복잡한 것 보다 빌드 시간이 단축됩니다.
의존성은 어디서 올까요?
의존성은 어디서 올까요?
•테스트 타겟은 본 프로젝트에 의존성
이 있습니다.
•그리고 하나의 파일에 의존성이 있습니
다.
의존성은 어디서 올까요?
•제가 작성한 코드들에 의존성이 있습니
다.
의존성은 어디서 올까요?
•연결된 외부 라이브러리들에 의존성이
있고
•번들 리소스에 의존성이 있습니다.
의존성은 어디서 올까요?
•실행해야 하는 스크립트에도 있습니다.
다시보는 report navigator
거꾸로 생각해보자
Compile
A.swift
A.o
거꾸로 생각해보자
LinkA.o
B.o
Executable
거꾸로 생각해보자
LinkA.o
B.o
Executable
Compile
A.swift
Compile
B.swift
거꾸로 생각해보자
LinkA.o
B.o
Executable
Compile
A.swift
B.swift
C.o
D.o Compile
거꾸로 생각해보자
LinkA.o
B.o
Executable
Compile
A.swift
B.swift
C.o
D.o Compile
거꾸로 생각해보자
LinkA.o
B.o
Executable
Compile
A.swift
B.swift
C.o
D.o Compile
“눈으로 봐도 느릴 것 같다.”
결론
•빌드 프로세스의 순서를 알아보았습니다.
•오래걸리는 건 빌드 프로세스 중 의존성을 가진 작업들이 병렬로 처리되지 못하기 때문입
니다.
•이 문제를 해결하기 위해서는 코드간의 의존성을 줄여야 합니다.
•외부 라이브러리를 쓰면 이런 종속성이 늘어날 확률이 높아 보입니다.
“질문 있으신 분!”
mizzking75@gmail.com
Reference
• https://developer.apple.com/videos/play/wwdc2018/415/ 

• https://zeddios.tistory.com/919

• https://suelan.github.io/2020/07/05/20200705Behind-the-Scenes-of-the-
%E2%80%A2Xcode-Build-Process/

• https://guides.cocoapods.org/plugins/pre-compiling-dependencies.html

More Related Content

Similar to 빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?

제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게Sungju Jin
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)VMware Tanzu Korea
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYHyun-woo Park
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가smartstudy_official
 
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144Darion Kim
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제Kiyoung Moon
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptxssuserf875e6
 
Svn 사용하기
Svn 사용하기Svn 사용하기
Svn 사용하기Jung-Ho Kim
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼mangonamu
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기nexusz99
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기Dexter Jung
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들Sewon Ann
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)성일 한
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 

Similar to 빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까? (20)

제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
 
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx
 
Svn 사용하기
Svn 사용하기Svn 사용하기
Svn 사용하기
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 

More from hyunho Lee

이제 문서는 DocC로 만들때가 되지 않았나요?
이제 문서는 DocC로 만들때가  되지 않았나요?이제 문서는 DocC로 만들때가  되지 않았나요?
이제 문서는 DocC로 만들때가 되지 않았나요?hyunho Lee
 
코드를 짜면서 겪은 오해의 순간들
코드를 짜면서 겪은 오해의 순간들코드를 짜면서 겪은 오해의 순간들
코드를 짜면서 겪은 오해의 순간들hyunho Lee
 
iOS 개발자를 위한 영어로 이름 짓기
iOS 개발자를 위한 영어로 이름 짓기iOS 개발자를 위한 영어로 이름 짓기
iOS 개발자를 위한 영어로 이름 짓기hyunho Lee
 
패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPM패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPMhyunho Lee
 
하기 귀찮은 일 이제 효도는 봇으로
하기 귀찮은 일 이제 효도는 봇으로하기 귀찮은 일 이제 효도는 봇으로
하기 귀찮은 일 이제 효도는 봇으로hyunho Lee
 

More from hyunho Lee (6)

이제 문서는 DocC로 만들때가 되지 않았나요?
이제 문서는 DocC로 만들때가  되지 않았나요?이제 문서는 DocC로 만들때가  되지 않았나요?
이제 문서는 DocC로 만들때가 되지 않았나요?
 
코드를 짜면서 겪은 오해의 순간들
코드를 짜면서 겪은 오해의 순간들코드를 짜면서 겪은 오해의 순간들
코드를 짜면서 겪은 오해의 순간들
 
iOS 개발자를 위한 영어로 이름 짓기
iOS 개발자를 위한 영어로 이름 짓기iOS 개발자를 위한 영어로 이름 짓기
iOS 개발자를 위한 영어로 이름 짓기
 
패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPM패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPM
 
Fitcraft demo
Fitcraft demoFitcraft demo
Fitcraft demo
 
하기 귀찮은 일 이제 효도는 봇으로
하기 귀찮은 일 이제 효도는 봇으로하기 귀찮은 일 이제 효도는 봇으로
하기 귀찮은 일 이제 효도는 봇으로
 

빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?