Active/세미나, 컨퍼런스

2019-07-12 [네이버 테크 콘서트: MOBILE] iOS 컨퍼런스 정리 및 후기

devssun 2019. 8. 7. 21:07
728x90
반응형

지난 7월 12일 네이버에서 주최한 테크 콘서트에 다녀왔다
각 세션 내용을 들으면서 정리한 내용입니다...


1. 네이버 지도 밑그림을 그리는 SDK 개발자가 하는 일 (손원영/네이버)

새로운 네이버지도를 만들기 위한 벡터맵 SDK 개발기와 네이버지도5 런칭, 네이버클라우드플랫폼에 모바일 지도 SDK를 출시하기까지의 여정. SDK 개발자가 하는일을 알려드립니다.

네이버 지도 5.X 버전 리부트

  • 래스터 방식 -> 벡터 방식
  • 개발언어 Swift
  • 다국어 지원 추가
  • 실시간 업데이트

새로운 버전을 배포했으나 평점은 낮았음

  • 격변의 UI/UX
  • 예전 지도 디자인이 익숙한 사용자
  • 새로운 엔진의 퀄리티 문제 (자체 개발하면서 데이터 수급이 조금 불안했었음, QA 일정 부족)

사용 시간이 다른 앱보다 적은 문제가 있어서 그거는 발전하도록 노력 중~


NaverMap Mobile SDK

  • OpenGL ES를 사용하는 모바일 풀 벡터 지도 렌더링 엔진
    지도는 오픈소스를 사용해서 개발함

오픈소스 활용 전략
Source Fork & 재개발 채택

  • 소스의 기본 구조는 두고 필요한 것은 다시 개발 (심벌, 오버레이, API 등 개발)

기존 비트맵 방식은 줌 인을 하면 화질 저하 등의 문제가 발생하여 벡터 방식으로 변경하면서
확대 하면 다시 렌더링, 회전 기능에서도 글씨가 같이 회전되게 변경함

레스터 -> 벡터로 함으로써 데이터 사용량 절감

  • 348KB -> 19KB (디자인 변화가 없는 한 캐시 데이터를 사용)
  • 래스터 방식에서는 레이어나 교통정보가 가게가 하나 생기면? 이미지를 전부 다운로드
  • 벡터 방식에서는 실제 활성화된 데이터셋만 다운로드
  • 빠른 업데이트 가능

서비스 지향 기능 개발

  • 백반위크, 선거, 벚꽃축제, 네이버 예약 등도 실시간으로 보여줄 수 있게 되었음

성능

  • 너무 느림 (너무 많은 메모리를 사용함, 심볼 등이 회전 등 할 때마다 다시 그리는거? 가 있어서..)
    • SDK는 C++ 로 개발 (안드 & iOS 지원하기 위해)

API 디자인 & 문서화

  • API 문서
  • 개발 가이드
  • 뭔가 구구절절한 설명이 필요하다면 십중팔구 설계가 잘못된 것

네이버 지도 SDK는 타다, 망고플레이트, 리멤버, 메쉬코리아 등에서 사용
지속적인 피드백과 버전업 배포

  • 앱스토어/구글플레이에 배포가 되면 SDK도 배포

2. 들숨에 협업 날숨에 클린코드 (박보영/레이니스트)

기본도 기초도 없던 개발자가 프로의 세계에 발을 들이게 된 과정과 고민을 공유합니다. 듣기엔 좋지만 말하기는 껄끄러운 클린코드라는 것은 도대체 무엇이고 어떻게 실현할 수 있는가. 우리 모두가 맞닥뜨릴 수 있는 올챙이 시절 이야기. 맞춤법/인덴트 수정부터 MVC 탈출기까지, 뱅크샐러드 iOS 팀에서 고민하는 협업, 우리가 5인 6각 마라톤을 달리는 방식에 대해 공유합니다.

목차

1. 태초에는 아무것도 없었다
2. 맞춤법봇과 SwiftLint
3. MVC 탈출기
4. TDD 도전
5. Swift 버전업을 대하는 자세

1. 코드 컨벤션

처음에 들어갔을 때 코드를 이해할 수 없어서 맞춤법을 찾는 걸 많이 했었음

  • 설문 1 (guard문 줄바꿈 방식)
    guard문 정할 때 동일한 역할을 하는 구문끼리의 convention은 최대한 동일하게
    guard와 동일한 if let 구문이 있는데 if let은 한 줄로 작성하지 않음. 그래서 guard도 두 줄로 작성

  • 설문 2 (init 함수 작성 방식)
    components, parameters는 개별로 보기 쉽게, 하나의 line이 너무 길지 않게 아래와 같이 작성

    init(
      title: String,
      date: Date,
      location: String
      )

Git - Code review, split 방식으로 볼 때 가독성 좋음 (한 줄에 약 100자 정도가 적당)

채택한 방식이 정답은 아님, 하지만 다른 관점이 모여 하나의 서비스와 하나의 제품으로 만드는 것
그 때 하나로 모여 개발할 때 코드 스타일을 맞추는 것은 중요

하지만 나중에 indent만 계속 올리는 지옥에 빠짐 <indent 지옥>
이런 상황을 바꾸기 위해 SwiftLint를 도입
-> indent보다 좀 더 비즈니스 로직에 집중할 수 있도록

2. MVC 탈출기 (아키텍쳐 개선)

현실의 Cocoa MVC 는 Massive VC
VC가 비대해 질 수록 수정하기가 힘듦, 단위 테스팅 힘듦

MVVM - BringMyOwnBeer🍺예제
View와 Model 간의 긴밀한 결합을 없앱, 느슨한 종속성
RxSwift 도입

  1. View

    • View는 예쁜 껍데기의 역할
    • layout(), attirbute(), ViewModel 과의 binding 만 한다
  2. ViewBindable

    • View에서 발생할 수 있는 모든 이벤트와 액션의 통로
    • View에서 발생하는 모든 이벤트, 액션 전달
  3. ViewModel

    • ViewBindable의 구현체
    • View의 액션과 이벤트를 모두 정릐
  4. Model

    • Network 등 연결
    • Business Logic만을 전담

3. TDD 도전

당시 iOS앱은 Test Code가 단 한 줄이 없었음

테스트 커버리지가 0인 상태, 시작은 func 단위의 테스트로 간단하게 시작

  • (비즈니스 로직) 단위의 테스트

API 등 규약에 따라 받을 것으로 예상되는 response Dummy data 작성
dummy data를 받아서 decoding하고 파싱할 네트워크 stub 작성

  • 분리한 비즈니스 로직 위주의 테스트 코드 작성

4. Swift 버전 업

Swift가 버전 업을 하면서 클린 코드를 엿볼 수 있다

클린 코드는 협업을 위한 코드다


3. 쉽고 재미있는 iOS 디버깅 - LLDB Command (안정민/한국카카오은행)

Xcode에서 LLDB를 통해 디버깅을 지원하고 있습니다. 하지만 많은 명령어들이 숨겨져있고 접하기 쉽지 않기 때문에 디버깅시 많은 시간을 낭비하곤 합니다. LLDB의 명령어를 좀 더 깊이 살펴보면서 문제를 좀 더 쉽게 찾고 해결할 수 있도록 합니다.

목차

1. LLDB 소개
2. LLDB 명령어
3. QA

참고 자료
- http://minsone.github.io/ios/mac/xcode-lldb-debugging-with-xcode-and-lldb
- http://minsone.github.io/ios/mac/xcode-lldb-debugging-with-xcode-lldb-and-chisel

LLVM에서 지원하는 디버거 - LLDB


4. ARKit, CoreML, Turi Create 삼형제 (노수진/네이버웹툰, 김희재/네이버)

Notable Me라는 AR앱을 개발한 경험을 공유하고자 합니다. 애플의 총애를 받고 있는 ARKit을 잘 활용하는 법과 Core ML로 앱의 기능을 다채롭게 하는 팁을 방출합니다. 또한 Turi Create을 통해 머신러닝 초보라도 훌륭한 모델을 직접 만들수 있는 방법을 공유하고 NSML이라는 네이버의 ML 학습 플랫폼으로 훈련한 과정을 소개합니다. 덤으로 모바일 개발자와 ML 개발자의 생생한 협업 과정도 엿볼 수 있습니다.

목차

1. Notable Me 앱 소개
2. Image Tracking, Face Detection
3. Tips and Tricks
4. Turi Create, NSML 소개
5. Turi Create 활용법 및 튜닝

AI 쪽이라 내용이 앗 어려워


5. 사용자 경험을 높이는 애니메이션 만들기 (김기범/네이버)

앱의 사용자 경험을 높이는 애니메이션을 구현하기 위하여 알아두면 유용한 이론과 디자인 가이드라인, API에 대하여 살펴봅니다.

발표자

  • 디자인 경험 있음
  • 디자인과 개발이 맞닿아있는 플랫폼은 iOS라고 생각
  • 사용자 인터렉션을 가장 잘 사용할 수 있는 플랫폼

1. 애니메이션은 왜 필요할까?

형태는 기능을 따른다 - Louis Sullivan
애니메이션은 기능을 따른다

애니메이션은 컨텐츠를 이해하기 쉽게 만들기 위한 도구

2. 애니메이션의 기능

  1. 중요한 컨텐츠 강조
    • 컨텐츠 상에 중요한 변화가 생겼을 때
    • 한 번 재생되면 멈추지 않고 쭉 재생
    • Fire-and-forget
    • UIView.animate() 를 많이 사용
  1. 컨텐츠의 맥락 유지

    • 앱스토어 Today

      • 화면이 갑자기 뜨는 게 아니라 카드가 점점 넓어지면서 커짐
    • 달력

      • 이전 달력 화면을 최대한 유지하면서 확대&축소
    • 트랜지션 효과

    • 주로 페이지 간의 이동에서 사용

    • UIView.transition()

    • 사용자 제스처에 따라 점진적으로 재생되기도 함 (ex. 날씨앱)

  2. 유저 입력에 대한 컨텐츠의 반응

    • 알람 센터
    • 사용자 제스처에 따라 점진적으로 재생
    • 제스처의 시작, 변화, 종료에 대한 애니메이션 적용
    • touches@@() 사용자의 터치 상태에 대한 정보 가져오기
      • touchesMoved : 사용자가 움직일 때마다 호출
    • scrollViewDidScroll, scrollViewDidEndDragging
    • UIGestureRecognizer

3. 어떻게 애니메이션을 구현할 것인가

어려운 이유 ??

  • 시간 요소가 들어가서 복잡함
  • 디버깅의 어려움
  • API의 어려움과 생소한 개념
  • 스펙 분석의 어려움

간단한 애니메이션 이론

  1. 애니메이션 요소 파악하기

    • 복잡한 애니메이션의 스펙을 빠르게 분석 가능
    • 어떤 API 를 사용할 지 신속히 판단 가능
    • 새로운 API를 이해할 때도 도움이 됨
  2. 애니메이션이란?

    • <트리거> 특정 이벤트가 발생했을 때
      • 애니메이션이 어떻게 시작하는가
    • <타겟> UI의 요소를
      • 무엇을 변화시키는가
    • <타임> 시간에 따라 변화시시킨다
      • 어떤 빠르기로 얼마나 지속되는가

트리거

  • UIGestureRecognizer와 연관이 깊다
  • Pan, Rotate, Pinch 처럼 데이터가 연속으로 들어오는 것을 사용
  • Rx와 궁합이 맞음
  • UIViewPropertyAnimator

타겟

  • Target은 애니메이션이 적용될 대상이나 속성을 뜻함
  • 시간에 따라 변화할 수 있는 시각적 속성은 모두 target이 된다
  • UIView
    • UIKit에서 이미 제공
  • CALayer
    • 조금 더 커스텀하게 애니메이션을 설정하고 싶을 때
    • CABasicAnimation을 사용하여 구현
  • NSLayoutConstraint
    • UIView의 위치나 크기를 바꿀 때 활용
  • UIBeizerPath
    • 벡터 기반의 선을 그리는 애니메이션을 줄 때
    • CAShapeLayer와 함께 사용

타임

  • 얼마나 오랫동안 애니메이션을 재생할 것인가
    • 키보드가 올라오는 데 약 0.3초
    • 간단한 애니메이션은 0.3~0.5초 사이가 적당
  • Curve - https://cubic-bezier.com/#.17,.67,.83,.67 (서크텀한 커브값을 만들고 싶을 때)

애니메이션 연습 Tip

  • Dribbble 에서 좋은 애니메이션 찾아서 카피해보기 (https://dribbble.com/)
  • 기본 API 활용해서 구현하기
  • 좋은 애니메이션 발견하면 Trigger, Target, Time 분석해보기

6. iOS 개발자의 성장 루트

Q1. 취업 창업 자영업 어느쪽으로 갈지 진로가 고민입니다
A1. 개발을 좋아하면 창업은 말리고 싶다
A2. 창업은 굳이 권하고 싶지 않다

Q2. 어떤 회사에 취업하는 것이 개발자 커리어 관리 측면에서 좋을까요?
A1. 중소기업에서 6년 정도 근무, 운이 좋게 회사에서 많은 것을 배울 수 있었음, 언어나 플랫폼을 다 경험할 수 있었음, SI 회사, 최근 SI에 대한 인식이 안좋지만 꼭 안좋은 것만은 아니라고 생각하고
대기업이 아니라도 자신과 맞는 곳에 가면 충분히 성장하고 내가 원하는 곳으로 갈 수 있을 거라 생각함

A2. 작은 회사는 큰 회사보다 인프라가 부족, 혼자서 공부하고 노력을 굉장히 많이 해야함. 그런 노력이 있다면 첫 회사는 어디로 가든 상관 없을 듯, 그런 성향이 아니라면 인프라가 있는 곳으로 가는 게 나을 것 같다
이런 안목은 여러 회사를 다녀보면서 키울 수 있을 것 같음

Q3. 어떻게 하면 원하는 회사에 갈 수 있을까요?
A1. 정답은 없다... 공부를 해야 함, 많은 기업에서 네이버 핵데이 혹은 교육과 채용을 함께 하는 경우가 많음, 학점 인정 인턴제도 있다
A2. Naver HackDay 를 통한 입사자(네이버 직원과 대학생이 한 팀으로 프로젝트를 하는 것), -> 아이폰 홈 화면 만들기, 요구사항을 핵데이 하기 전에 미리 해봄, 당일에는 필수 구현 사항은 거의 다 했고 선택 구현 사항까지 넘볼 수 있게 되었음
그 때 좋은 인상으로 남아 인턴으로 입사, 정규직으로 일할 수 있게 됌
A3. 부스트캠프 튜터 활동자 - 부스트캠프를 통해 많은 기업에 취업
A4. 기업에서 제공하는 것들을 최대한 많이 활용해봐라
A5. 스타트업 같은 곳에 이력서를 넣을 때 피드백을 요청함, 2년차 정도에는 돋보이는 이력서가 되기 힘들다. 작은 회사의 경우 친절하게 답변 주시는 경우가 있어서 받은 피드백을 실제로 많은 부분 적용시킴, 이력서에 깃허브 주소 내면 정말 자세히 봄, 만일 컨트리뷰팅 한거면 면접 때도 물어봄
A6. 깃헙에 있는 소스 때문에 붙을 수도 있지만 떨어질 수도 있다
A7. 이력서를 여러 포맷으로 두고 실제 기억에 내면 어떤 이력서는 계속 떨어질 때도 있음, 그런 이력서들의 차이점을 잘 조합해서 만듦, 지금도 두 세달에 한 번씩 이력서 업데이트, 면접도 많이 봐서 내가 아는 거를 얼마나 효율적으로 전하는 지 등을 훈련할 수 있게 된다, 면접관이 왜 이런 질문을 냈을까에 대한 감이 온다, 내가 한 흔적을 계속 올려라(블로그, 깃헙 등등), 또 다른 이력서가 될 수 있음

Q4. 개발 방법을 공부하는 법
A1. 공부를 하는 방법을 공부해라, 어떻게 공부해야 되는 지
A2. 일단 한번 만들어보세요

  • iOS 프로젝트를 일단 만들어봐라 (Swift 언어 공부 하고!)
  • 겨울방학 때 앱을 만들기 시작함, 그때는 아무것도 몰라서 화면 하나 만드는 데 너무 많은 시간이 소요, 그래도 한번 만들고 나서 기능에 대한 재미가 생김, 모르는 것은 애플 공식문서, 인터넷을 찾아보고
  • 단점은 이렇게 하면 지식에 순서가 없어서 정리하는 과정이 필요

A2. 일단 프로젝트 따와서 개발

  • 이 분은 자신을 왠만한 압박, 스트레스에는 무너지지 않는 편이라고 함
  • 자신의 불성실함을 계약관계로 묶고, 공부는 안했지만 발표를 신청
  • 추천할 만한 방법은 아님

A3. 검색부터 시작

  • 일단 검색부터 시작
  • 스택오버플로우에서 복사하고 붙이고 실행되면 끝, 으로 되는 데 그냥 쓰지 말고 이게 왜 이렇게 되는 지를 꼭 분석하기 바람
  • 샘플코드나, 오픈소스나 이런 것들을 사용하고 나선 이게 왜 어떻게 돌아가는 건지 확인하는 시간을 꼭 가진다
  • 뭔가 배울 수 있는 스터디나 커뮤니티 참여, iOS만 찾아다닐 필요는 없음

A4. 책으로 개발

  • 문법 책 보기
  • 각종 튜토리얼이 순서대로 되어있는 책이 많음, 매번 살 순 없으니 도서관 애용
  • 원서도 읽게 된다

A5. 공식문서

  • 애플 공식 문서만 봤음 (공부 당시 objc 를 검색하면 자료가 없었음)
  • 인터넷에 떠도는 수많은 자료들에 생각보다 더 많은 오류가 존재
  • 자신이 실제로 애플 공식 문서를 확인해야함
  • https://www.swift.org

A6. 공통 의견

  • 내가 한 공부를 다시 설명하거나, 블로그에 남기던지 등의 행위를 한다. 그렇게 하면서 정말 많은 성장할 수 있음

Q5. 크로스 플랫폼의 미래는? (리액트 네이티브, 플러터 등)
A1. 뭘 선택해도 자신이 생각한 효율은 안나온다

Q6. iOS 개발자의 미래는?
A1. 애플이 잘 해야.., iOS 개발자로 커리어를 시작한다면 어떨까로 질문을 바꾸면, 긍정적으로 볼 수 있음

  • 모바일, 데스크탑 앱도 개발할 수 있음, 모바일에만 머무르지 않음
  • 신입 iOS를 채용하기 쉽지 않음, 일단 경험이 없음 (대부분 안드로이드 경험이 많음), 입사해서 iOS 개발자가 되는 경우도 많음
  • 글로벌을 하게 되면 웹, 모바일, 피시 등 다양한 플랫폼을 지원, 네이티브 개발자가 분명히 필요하게 된다
  • 어떤 것으로든 개발자가 되면 특정 영역에만 집중하기 보단 개발자가 가져야할 전문성에 집중하는 게 좋을 듯
  • 네트워킹을 하려면 네트워크에 대해 알아야 하고, 데이터를 저장하려면 DB 를 공부하게 된다. 특정 플랫폼보다는 전체적인 부분에서 전문성을 가져야한다고 생각함

Q7. 면접 때 주니어에 대한 질문, 어떤 역량을 보는지
A1. 자신의 공부 방법을 알고, 공부를 잘 할 수 있는 역량을 가지고 있는 것이 중요
많이 몰라도 된다

Q8. 신입 때 했으면 좋았을 것이나 후회되는 것
A1. 어디든지 발표를 해봤으면 좋겠다
A2. 영어공부
A3. 선배 개발자가 외부 활동을 하시는 분이 있으면 꼭 같이 가자고 해라

Q9. 주니어 개발자 때 성장을 위해 따로 도전하고 시도한 경험이 있으신지, 있으시다면 어떤식으로 하셨는지 궁금합니다.
A1. 현재 후배 한 명에게 스터디하고 있음
A2. 외부 스터디나 강연에 꼭 참여해서 내가 고민 한 거에 대한 실마리 등을 줄 수 있음

Q10. 어떤 개발자가 성장할 것 같은 느낌을 받는지 궁금합니다. 그리고 실제로 회사에서 어떤 방식으로 성장을 하고 있는지 궁금합니다! A1. 작은 것도 놓치지 않고 끝까지 파는 직원

Q11. SOILD원칙을 최근에 알게 된 대학생입니다. 객체지향에 대한 기본적인 개념은 알고 있지만 iOS 개발을 하면서 객체지향적인 코드를 작성하고 있지 않다는 생각이 듭니다. 어떤 걸 공부하면 될까요?
패널분들께서 인상깊게 보셨던 객체지향에 대한 책, 영상, 아티클 등 좋은 자료 추천해주시면 감사하겠습니다! A1. 창기님 유튜브를 봐주세요

Q12. 연차에 맞는 역량이 무엇이라고 생각하시나요?
A1. 연차는 생각보다 실력에 영향을 주는 팩터는 아님


iOS는 컨퍼런스가 많은 편은 아니다. 그나마 주기적으로 열리는 게 let us: Go! 랑 Let's Swift 두개 정도?
이번에 네이버에서 모바일을 주제로 안드로이드, iOS 로 하루씩 컨퍼런스를 열어주었다
이번 컨퍼런스에서 좋은 내용들을 알게 되었고 특히 박보영님의 발표와 패널 talk 시간이 제일 좋았다


반응형