2023 레츠스위프트 let's Swift 컨퍼런스에 참여했습니다.
같은 수강생분들, 러너분들, 단톡방에 계신분들을 만나서 너무 좋았고 행복했어요. 조만간 제대로 후기도 작성해보려고 합니다.
그전에 데일리로 기록을 남깁니다 :)
세션은 2~3개정도 오전에 듣고, 오후는 네트워킹시간으로 대부분을 보냈는데 세션도, 네트워킹도 즐겁고 알찬 하루였습니다.
동기부여도 많이 되고, 공부도(물론 오늘공부는 많이 못했지만) 더 열심히 하겠다는 다짐도 하게되었습니다.
너무 ios 초보라 갈까말까 고민했는데, 너무 가길 잘했다고 생각했습니다. 뉴비인데도 반겨주신 많은 분들 너무 감사드립니다. 내년의 레츠스위프트에서는 더 성장해서 저 역시 공유드리고 도움될 수 있는게 많아진다면 좋겠습니다 :)
자세한 내용은 유튜브에 올라온다고 하니, 저는 가볍게 정리해서 공유해봅니다(기록 겸)
(자세한 내용은 추후올라오는 유튜브를 참조해주세요)
애플디벨로퍼아카데미 2기이신줄 몰랐으나, 나중에 알고 인사드릴수있어서 정말 주위분들에게도, 승준님께도 감사한 마음이었다. 일단 중간부터 들어서, 풀로 듣지못해 아쉽긴했지만 중간부터 들은 내용도 너무 좋았고, 개인적으로도 조금이라도 찍먹할 수 있도록 영어공부도 하고, 또 proposal에 지속적인 관심을 가져야겠다고 생각했던 세션, 또 아쉽게 못본 만큼 유튜브에 올라온 영상을 더 챙겨봐야겠다고 생각한 세션, 2기로 활동중이신데 이만큼 아웃풋을 벌써 내시는게 대단하다고 생각했다.
https://www.swift.org/swift-evolution/
문법을 공부하는 요즘 듣기 정말 적절했던 세션이었다.
Swift 라는 언어가 어떻게 기계어(바이너리)가 되는지의 과정을 자세히 설명해주신 세션이었는데, 이러한 내용들을 잘 알고 있으면 나중에 문제해결을 할때 깊이가 달라지겠구나, 문법도 소홀히하지말고 실전도 소홀히 하지말아야겠다는 교훈도 얻었다.
전체과정 : PARSE => SEMA => SILGEN => SilOptimaize => IR => LLVM
<PARSE>
Swift 사용시 => AST 추상부문트리를 만들어줘야함
AST를 올바르게 만들 수 있는가? Syntax analysis 구문분석
(기계어가 평서어를 이해하기 어려운 이유가 이때문
=> swift 가 이해하기 쉽게 잘 정리해주는 역할을 함)
* Swift Language Reference공식문서에서 확인가능
매크로 - Swift Syntax 이 AST를 Swift 로 구현한 것 임 (최근나옴)
<SEMA>
AST => 올바르게 구성되어있는지 검사 : 타입검사, 구조적 검사 등등
아이텐티파이(식별자) 키워드로 구성
- 키워드 : 컴파일러가 아는 단어
- 식별자 : 개발자들이 추가하고 만든것
=> 컴파일러가 알지못함
=> 선언, 정의를 통해 컴파일러가 이해해야함 (이 과정을 Name Lookup이라고 함)
=> 선언, 정의는 다른 모듈에 있을 수 도 있음
문제점 발생 : 병렬로 돌리는 이유가 없어짐 선형적으로 돌아가는 구조 가 되버림 (어려워짐)
=> 컴파일러는 빠르게 뼈대로 파싱하고, 선언,정의는 Delayed Parsing 으로 필요할때 찾아가는 방식 (딱 필요한 만큼만 할당을 해주는것이 primary 파일을 할당하는 이유이고 이를 토대로 빠르게 파싱한 후 secondary 파일들은 delayed 파싱을 진행한다)
C컴파일러 특징 : 파일자체 컴파일링
C컴파일러 => 탑다운으로 읽어냄
Swift 컴파일러 => 탑다운 불가, 꼬여있음 => 체계화필요
=> Swift 4.2에서 정보를 채워나가는 방식으로 Request Evaluator 도입됨 => 성능개선, 기능추가 됨
Swift 컴파일러 특징 : 모듈자체를 컴파일링
Swift 가 읽을 수 있는 모듈
- 다른 Swift 로 되어있는 모듈(바이너리:읽기편하고 속도빠름 / 컴파일러에 종속적임
=> 이를 해결을 위해 text형식의 SWift 인터페이스 파일을 사용하기도 함 )
- C C++ (클레이라는 프론트엔드 내장되있음) 모듈 (스위프트 선언으로 바꿔서 가져옴 : 스위프트 컴파일러 내부의 클레이 임포터가 바꿔줌) + 브릿징헤더
- LLVM 타입과 선언을 그대로 사용하는 모듈(표준라이브러리들만 사용가능함)
<SILGEN>
스위프트 중간언어라는 의미 SIL swift - llvm 중간단계
<SilOptimaize>
최적화 진행 스위프트가 보장해주는 언어의 안정성이 여기서 검사가 됨
=> 최적화 검사완료 : Canonical SIL
+ 추가적인 최적화 옵션이 있다면 성능최적화를 함
=> 역시 Canonical SIL 로 변환
<IR>
IRGEN
<LLVM>
LLVM Backend => 최종적으로 바이너리로 출력됨
객체지향과 함수형을 합쳐서 아키텍쳐를 스스로 만들어보신 케이스, 설계능력을 키워볼 수 있고 개발자의 역량강화, 일단 너무 재밌었다는 말씀이 인상깊었다(정말 재밌어보였다)
언젠가 나도 아키텍쳐를 구현(도전)해보고싶다는 생각도 들었고, 여태까지 배웠던 문법내용(구조체, 열거형, 타입alias , 프로토콜, 확장, 함수, switch 문으로 패턴매칭, 타입선언, pirvate키워드, 계산속성,set블럭, lazy var, 메서드, super, override, self, self 로 라이프사이클 벗어나도 동작하도록 참조해주기 등등이 진짜 다 모여 하나의 작품을 만드는 느낌이었다. 제대로 다시 보고 이해하고싶은 세션
<객체지향>
변경되는 단위를 캡슐화, 내부동작을 몰라도 설계가 쉽도록
객체지향예시 : 클래스 메시지전달 상속 추상화 캡슐화 다형성
Swift Concrete Type
산재된 코드 ⇒ 설계, 재사용성 복잡해짐 ⇒ 추상화, 캡슐화
내부동작을 몰라도 document 를 통해 재설계하고 만들수있다는 장점을 가짐
예시)
Singleton 패턴 : FileManager, URLSession
Decorator : UIScrollView-Table / UICollectionView
Composite : UIView -addSubView
그외 등등…
<함수형>
변경을 최소화해서 선언적으로 구현 / 실행예측이 쉽도록 지원
(사이드 이펙트 최소화, 코드로 바로 직관적 이해 가능하도록 :
타입변경, 타입일치, 상태변경, 타입상태변경 등등)
예시)
Pure Function
Functor/Monad (예 : Result) ⇒ Context + Value / map / faltMap / Optional
<객체지향과 함수형>
PureFunction(인풋+로직 ⇒ 아웃풋) ⇒ 비동기환경에서의 무결성을 보장함
객체지향 사용하면 좋은 예 : UI공유자원 => 캡슐화 사용필요 ( MVC 등) 객체지향에 속하게 됨 / Data, File, Network
함수형 사용하면 좋은 예 : Result / Optional, Combine, Functions,
<직접만들어보기>
오픈소스를 사용만 하지말고 ( swift 도 오픈소스다 ) 찾아보고 만들어보자
아키텍쳐를 설계하기 앞서서 원하는 요소들 정리 (발표자님 기준)
- MVVM 아키텍쳐 : 멀티코어, 멀티쓰레드의 데이터 무결성보장가능(함수형을 잘 채용한다는 조건하에)
- 결과에 따른 유연한 처리지원
(한번에 결과를 받고, 처리할때만 성공,실패를 알수있도록,
실패의 원인을 바로 찍어줄 수 있도록)
- Flow의 가시성
- 비동기 처리지원
- API Apple first party 사용
<원하는 요소를 적용하는 과정>
View / Interactor
⇒ 어떤 Viewcontroller와 관계를 가지는지 선언
ViewController view bind 및 lifecycle
⇒ MVVM 의 핵심 (아래와 어떻게 연결할지)
ViewModel Dataflow 가시화 및 관리
⇒ MVVM의 핵심(위와 어떻게 연결할지)
Data / network 비동기적 데이터 처리
+) 프로토콜 지향 프로그래밍
구현단계에서 구현가능 , 관계정의도 편리함
객체간의 인터페이스 선언 데이터 타입의 추상화
- 라이프사이클의 앞부분 ⇒ 객체형 사용 + 프로토콜
- 라이프사이클의 뒷부분 => View model 과 데이터처리 사이에 함수형 적용
+) Result 사용
HIG ⇒ 성공, 실패, 에러처리에 대한 명확성 강조 ⇒ Result 사용 장점
에러타입 정의 ⇒ Result 의 Failure : 에러타입 으로 전달
<결과물>
미리 선언된것들을 한줄의 함수로 정리 ⇒ PURE한 함수가 됨 (외부인풋도 없고 로직은 탑다운으로 문제없이 진행됨) ⇒ 결과에 대한 유연성, flow 가시성, 유연성처리
<직접만든 아키텍쳐 사용해보기>
협업시 에러띄워주는게 가장효과적임
(이렇게 미리 타입선언 등을 다 해놓으면 자동으로 에러띄우고,
자동완성을 해주니까 매우 효과적임)
채용준비 하시는 분들이 제일 관심이 많으셨던것 같은 당근 ios 세션
기술적인 내용은 유튜브에서 더 자세히 설명을 들으실 수 있을것같고(절반정도 들었기 때문..!)
가장 궁금해하실것같은 당근ios에서 고민하고 있는 문제들을 공유합니다.
고민하고 있는 문제들 (채용과 연계)
<모바일팀>
- 계정, 알림, 데이터, 실험, 보안 등 서비스의 기반이 되는 코어기능 재설계
- 자동화, Horizontal Component개발을 통한 엔지니어 생산성 증대
- 도메인개발을 위한 안정적인 설계방향가이드
<채팅>
- 글로벌서비스(국내유저와 글로벌유저의 채팅경험 다름)
- 그룹채팅기능
- 동네생활 동네알바등 다양한 서비스 연동
- 다양한기능 가능한 유연한 구조 설계
제 기준으로 (정말 초보자기준) 정리한 내용들이라 실제 연사님의 의도와는 차이가 있을 수 있으니
유튜브로 진행되는 세션에서 더 정확한 정보를 얻어가는 시간 되시면 좋을것같습니다.
행사 제작하시느라 고생하신 오거나이저 분들, 스폰서분들, 연사분들, 또 참여하신 모든 참가자분들 고생많으셨습니다!
모두 즐거운 swift 되세요 :)