1번 챕터
Maps / Mobile 손원영
1) 네이버 지도 앱 개선
- 앱 플로우 개선(지도를 중심으로 각 기능을 넘어갈 수 있도록 변경)
2) 문제점
- 변동폭이 큰 UI/UX 변화
3) NaverMap Mobile SDK
- 오픈소스 활용 전략
- 오픈소스 & 오픈 스탠다드를 사용하여 개발
- 포크 & 재개발
- 퀄리티 향상
- 벡터로 변경하여 그렸고 심볼들도 재 렌더링 함으로 성능이 향상됨
- 용량 348KB => 19KB로 변경 됨
- 여러 레이어로 나누어서 사용
- Profiling 툴을 사용해서 병목현상을 제거함
- 멀티스레딩 copy on write, messagequeue를 사용
- 설명이 많이 필요한 경우 잘못된 api로 판단하고 다시 만듦
2번 챕터
들숨에 협업 날숨에 클린코드 / 뱅크샐러드 / 박보영 / 2년차 개발자
- 선호 스타일
- Guard 문
- Init 문
- 코드의 컨벤션이 중요하다.
- 여러 개발자가 모여서 개발을 하기 때문에 맞춰서 생산성을 극대화하기 위해서 필요하다
- SwiftLint - 기본적인 코드 컨벤션을 맞춰주고 알려준다.
- MVC 탈출기
- 종속성을 느슨하게 만들어준다.
- 이것을 사용하기 위해 RxSwift를 사용
- 적절한 시점에 종속성을 부여
- View = 예쁜 껍데기
layout(), attribute() 그리고 viewModel과의 binding만 - ViewBindable
protocol이며 이벤트를 통한 bind - ViewModel
View의 분신
ViewBindable의 구현체
View의 액션과 이벤트를 모두 정의하는 곳 - Model
Network 등 연결
Business Logic만을 전담 - 각자가 할 일만 할 수 있도록 제한 하는 것
- Business Logic 단위의 테스트
- 네트워크 부분을 빌드하느냐 아니면 실제냐에 따라 더미를 줄 것인지 실제 네트워크를 사용할 지 결정
- 테스트가 우선순위가 뒤로 밀리는 경우가 많지만 func단위로 테스트해 볼 것을 추천
- 5.0에서 추가된 Result문
- Error-handling 방식,
- 경쟁에서 최고의 무기는 협업이다
- 협업을 위해 클린 코드는 필수이다
- 대체가능한 코드를 개발하는 개발자가 대체 불가능한 개발자가 될 것이다.
- MVC => MVP => MVVM
- Cocoa MVC는 View와 Controller의 연계성이 너무 많음
- MVVM
- TDD
- Swift 버전업
- 클린코드란
3번 챕터
쉽고 재미있는 IOS 디버깅(LLDB와 함께 놀아요) / 안정민 / 한국카카오은행
- LLDB
- Xcode의 기본 컴파일러인 LLVM에서 지원하는 디버거
- Thread는 각각이 프레임
- thread list / thread select 2 / thread backtrace (alias = bt) / bt all/ thread backtrace -c 5 ( 0 ~ 5 frame ) / frame select 3 / frame info / up 3 / down 3
/ thread jump —line 19 / thread jump —by -2 / 마우스로도 사용 가능 - 애플에서 po 대신 v 를 사용하기를 권장 (코드를 만들어서 실행하고 기반으로 코드를 만들고 다시 코드를 만들기 때문에 너무 느려서)
- expr를 상요하면 중간에 객체의 상태를 변경할 수 있음
- Chisel
- Facebook에서 만든 디버깅 툴
- 파이썬으로 작성됨
4번 챕터
Naver WebToon 노수진 / 김희재
- AVMetadataFaceObject
- MLKit
- Convert Coordinate
- UIKit과 Core Graphics 간의 좌표가 다름(좌상단시작 좌하단시작)
- Overheating
- ProcessInfo.thermalStateDidChangeNotification (발열 체크)
- Anchoring with ScenKit
- ARAnchor
- SCNNode
- 성장
- 사이드 프로젝트를 해라
Turi Create 으로 Style Transfer 모델 트레이닝 하기 / 김희재
- 지폐 안에 있는 얼굴을 매칭하는 것뿐이 아닌 질감도 카피해보자에서 시작
- TensorFlow와 PyTorch를 사용(메모리 사용량의 한계)
- Create ML 와 Turi Create를 사용
- 데이터만 있다면 미리 준비된 Task에 적용
- Create ML
- Swift / OSX / Mac + eGPU
- Full GUI Tool
- Python
- Osx, linux, win10 지원
- Linux + Nvidia GPU
- Style Transfer 모델
- 작업 순서
- 셀카 이미지를 가져와서 데이터를 학습
- 기본 값으로만 했을 때 원하는 결과를 얻기 어렵다
- 최적의 하이퍼 파라미터 찾기
- Style_loss_mult : 레이어별 스타일 피쳐 coefficient
- finetune_all_params: 콘텐트 특징 추출기 또한 함께 학습시키기
- use_augmentation: 콘텐트 이미지 데이터 뻥튀기
- input_shape: 콘텐트 & 스타일 이미지 입력 사이즈
- 데이터 학습을 위한 파라미터를 자동으로 여러 셋을 해주는 프로그램을 사용
- 이미지에 대부분이 배경이기 때문에 배경 데이터로 매칭됨
- 해상도를 키워서 얼굴만 나오게 해서 사용
- 사용 선택
- ML을 잘 모르는데 스타일 트랜스퍼 모델을 사용하고 싶다 => Turi Create
- 필요 모델이 Create ML에서 제공되는 모델이다 => Create ML이 가장 쉬움
- 스타일 트랜스퍼 모델은 퍼포먼스 척도로는 훈련결과를 평가하기 힘들다
- 눈으로 직접 결과물을 봐야한다.
- 하이퍼 파라미터 튜닝을 할 때 훈련결과를 잘 비교할 수 있는 방법이 필요
5번 챕터
애니메이션 만들기 / 김기범 / Naver Apollo CIC
- 제품 디자이너 => nhn 개발과정 => ios 개발자가 됨
- 애니메이션이 필요한 이유
- 굳이 애니메이션까지?
- 형태는 기능을 따른다 - Louis Sullivan
- Human Interface Guidelines
- 애니메이션의 기능
- 중요한 컨텐츠 강조
- 뱃찌, 통통 튀는 움직임 등
- 컨텐츠의 맥락 유지
- 다른 페이지로 이동시에 애니메이션이 동작해서 어떤 맥락으로 이동 되는지 인지가 쉬워짐
- UIViewControllerAnimatedTransitioning
- UIViewControllerTransitioningDelegate
- Fire-and-forget 방식이 대부분
- 유저 입력에 대한 컨텐츠의 반응
- 사용자 제스처에 따라 점진적으로 재생됨
- Fire-and-forget 방식과 반대가 됨
- touchesMoved => 터치 위치가 나옴
- scrollViewDidScroll => 스크롤 정도에 따라 효과를 줄 수 있음
- Gesture Recognizer를 사용하면 좀 더 자세한 제스처를 구분하여 사용 가능
- 애니메이션 구현이 어려운 이유
- 시간 요소가 들어가서 복잡함
- 디버깅의 어려움
- API의 어려움과 생소한 개념
- 스펙 분석의 어려움
- 애니메이션의 기본 이론
- 애니메이션이란?
- 특정 이벤트가 일어났을 때 시간에 따라 변화시키는 것
- 3요소
- 어떻게 시작하는가(트리거)
- 단발성
- Fire-and-forget
- 연속성
- 사용자의 제스처나 데이터의 변화에 의해 점진적으로 실행됨
- 데이터 변화 트래킹적인 면에 의해 Rx와 잘 어울린다
- UIViewPropertyAnimator는 fractionComplete를 사용하면 정도에 따른 이벤트를 구현할 수 있다(Rx와 궁합이 좋음)
- 무엇을 변화시키는가(타겟)
- API
- UIView를 사용하면 만들어져있는 효과를 사용 가능
- CALAyer는 좀 더 세밀한 컨텐츠 요소들의 애니메이션 API
- NSLayout Contraint는 Auto Layout과 관련된 애니메이션
- UIBezierPath는 벡터 기반의 선을 그리는 애니메이션
- 어떤 빠르기로 얼마나 지속되는가(타임)
- Duration
- 키보드가 0.3초이기 때문에 기준으로 참고해서 값을 설정
- Curve
- 애니메이션의 완급을 조절 할 수 있음
- https://cubic-bezier.com 에서 커브를 볼 수 있음
- 애니메이션 연습 팁
- https://dribbble.com 에서 참고하면서 만들어보면 많은 도움이 됨
- 가능한 기본 API를 활용해서 구현해보기
- 좋은 애니메이션을 발견하면 Trigger, Target, Time 분석해보기
- 정리
- 앵프라맹스
- 눈으로 식별하기 어려운만큼의 차이지만 쌓이다 보면 큰 결과를 이루어 낼것이다.
6번 챕터
개발자 성장 루트
- 김창기 / 네이버 / 지도서비스 / ios 개발자 / 사내 개발자의 성장에 관심이 많은
- 취업, 창업, 자영업?
- 윤민섭 / 네이버 웹툰 / 시리즈온 / ios 개발 / 주니어 개발자의 성장에 관심이 많음
- 강경구 / 웍스 모바일 / Nine WOKRS / iOS 개발 /
- 권문법 / 네이버
- 최완복 / 라인 비즈 플러스
- 개인 개발자 ( 창업 )
- 절박한 상황에서 Ruby on Rails를 완료함 => 이것 저것 여러가지 일을 맡아서 처리하게 됨
- 스트레스가 큰 일을 맡아서 성장에 도움이 되었음
취업? 창업? 자영업?
- 어떻게 하면 내가 원하는 회사를 잘 선택할 수 있을까?
- 중소기업 6년 => android, iOS 등 많은 것들 배울 수 있었음 => SI에서 배울 수 있었던 경험
- 많은 사람들을 만남(대기업 중소기업 … ) => 회사의 지원이 충분한 회사에 가면 성장할 수 있음
- 스스로 할 수 있는 사람이라면
- 어떤 회사에 가더라도 스스로 할 수 있으면 상관없다.
- 가고 싶은 곳에 취직을 할 수 있는 방법
- 공부를 해라
- 핵데이
- 네이버 개발자 분들과 개발자 분들이 함께 팀을 이루어서 밤을 새서 개발을 해보는 기회
- iPhone 홈 화면 만들기 ㄷ미리 모든 과정을 혼자서 다 해봄
- 부스트캠프
- 부스트캠프와 연계되어 좋은 회사에 간 분들이 많음
- 기업들에서 필요한 요구사항들을 반영하여 교육을 받기 때문에 취업률이 높음
- 이력서
- 떨어진 이유에 대해서 물어라
- 그 이유를 피드백하려고 노력함
- 독특하고 평범했기에 뽑을 이유가 없었다.
- 포맷을 많이 모아서 성공 사례와 실패 사례를 분석해서 수정해나감
- 자신이 쓴 것을 흔적으로 남겨라
- 면접
- 면접을 많이 봐야 실력이 는다.
공부를 어떻게 할까?
- 공부를 하는 방법을 공부하라
- 나의 스타일에 맞는 공부방법을 찾아라
- 일단 만들어보라
- 언어를 공부하고 바로 프로젝트를 해봐라
- 지식의 순서가 없이 배우게 되기 때문에 다시 공부하는 과정이 필요
- 스스로가 안된다면 일을 시작해라
- 계약관계로 묶여버려서 하지 않을 수 없도록 몰아갔다.
- 구글에게 물어라
- 샘플코드, Doc를 찾아볼 수 있지만
- 검색해서 가져오고 코드를 이해하고 사용해라
- 내부적으로 어떻게 돌아가는 지 확인해라
- 스터디 & 커뮤니티
- 피해할 점
- 고만고만한 사람들끼리 모이면 제대로 되지 않을 경우가 많음
- 추천해할 점
- 내가 개발하는 영역만 공부할 필요는 없다
- 여러 언어간의 연결고리를 알 수 있게 되고 새로운 시각이 열린다.
- 책을 봐라
- 책에서 배울 수 있는 점이 많다
- 언어 책 => 구매/도서관 책을 읽어라 => 출판사에서 리뷰어를 신청하라
- 책을 읽다보면 알지 못하는 점을 발견 => 원서를 참고해서 읽어봄
- 공식 문서
- 공식문서를 통해 배우는 것이 확실한 방법이다
- 인터넷에서 확인한 정보들은 애플에서 적어둔 것과 다른 내용들이 많다.
Q&A
- 크로스 플랫폼의 미래는 어떻게 될까요?
- 내가 편한 언어를 사용하려면 좋다.
- 네이티브를 잘 알지 못해서 오류가 발생하여 효율이 나오지 않을 수 있다.
- iOS 개발자의 미래는?
- 모바일과 Desktop에서 만들 수 있는 개발자가 될 수 있다.
- 시장
- Ios 개발자를 뽑기가 쉽지않다.
- 하나의 개발에만 목을 매는 것이 아니라 이것저것 할 수 있는 개발자가 되어야한다.
- 개발에 대한 전문성을 가지는 사람이 되는 것이 좋을 것 같다.
- 화면 전환 방식 ( Programmically vs GUI )
- 스토리 보드는 화면의 흐름이 보인다
- 코드가 오류가 낮다
- 면접시 주니어에게 주는 질문사항
- 엄청난 능력을 기대하지 않는다
- 자기 자신을 알고 자기 자신이 공부할 수 있는 방법을 알고 있는 사람
- 지금 뭘 알고 있는 지 보다 6개월 뒤에 뭘 할 수 있을 지에 대해 알게 된다
- 신입 시기에 말해주고 싶은 내용
- 어디든 가서 발표를 해봐라
- 일을 따서 하더라도 잊혀지지만 발표를 하다보면 기억에 남는다(블로그라도)
- 영어공부
- 선배 개발자 중에 외부활동을 하시는 분이 있다면 함께 따라가기
- 완복님 RxSwift 책 만들어주세ㅐ요
- 예!
- 주니어때 성장하기 위해 할 것
- 누군가를 알려주는 것이 큰 도움이 된다.
- 어떤 개발자가 성장할 것 같은 느낌을 받는지 궁금합니다.
- 작은 것도 놓치지 않고 끝까지 파면서 공부하는 사람
- 뭔가에 대해 알게되면 관련된 것들을 끝까지 파면서 공부하는 사람
- Solid원칙을 최근에 알게 된 대학생
- 창기님 유튜브를 확인
- 최근에 WWDC도 다녀왔다고 함
- 연차에 맞는 역량이 무엇이라고 생각하나요
- 연차가 실력과 연관되지만은 않는다.