[NAVER TECH CONCERT 2020] 요약

Updated:

  • iOS 세션부터 참여




신입 iOS 개발자 개발업무 적응기

  • 김삼민
    • 네이버 클로바 앱 개발 담당

1. 비전공자에서 네이버 입사까지

  • 복수전공
  • 스터디, 프로젝트, 해커톤
  • 코딩테스트
    • 설명
      • 다른 사람에게 설명하기
      • 현재 풀이를 선택한 이유 등 풀이를 하면서 설명
    • 비교
      • 다른 사람의 풀이와 비교
      • 더 나으 접근 방법 배우기
    • 알고리즘의 이해
      • 알고리즘의 원리에 대한 본질 이해
  • 면접
    • 많이 말해보기 - 스터디, 녹화 등
    • 논리적인 설명 - 풀이에 대한 뒷받침
    • 모르는 질문도 포기하지 않기 - 자기 생각 말하기, 질문하기

2. 입사하고 현업 배치까지

  • 신입 코드데이 - 테크 쉐어 - 부트캠프
  • 신입 코드데이
    • 다양한 네이버 서비스 체험
    • 네이버 조직쇅
    • 사내 조직 문화
  • 테크 쉐어
    • iOS 교육
    • Swift Basic부터 전체적인 내용들 교육
  • 부트캠프
    • 메신저 앱: iOS + 백엔드 + 2주
    • 현업의 개발방식 미리 경험

3. 어떤 업무를 하고 있나요?

  • 유지 보수 + 기능 개발
  • 첫 배치되면 비지니스 로직 파악
  • Warning 수정
    • SwiftLint
    • Deprecated
    • Optional Value Casting
  • 프로젝트 구조 파악
    • 뷰 디버깅 기능 활용하면 수 많은 파일이 무슨 역할하는지 파악하기 좋음
  • 리팩토링
    1. 오픈 소스
      • 버전 업데이트
        • 성능상 이슈, 버그 등을 사전검토를 통해 문제 최소화
        • 마이그레이션 가이드, 체인지 로그 등을 활용해서 사전 검토
      • 스위프트 버전에 의존성이 있는 오픈소스 제거
        • 의존성이 있는 오픈소스를 기본 제공 프레임워크로 변환
        • 기존 코드 동작 파악 및 전체 흐름 그려봄으로서 수정 시 영향을 미리 파악
        • 오픈소스 뜯어보며 내부 로직 파악
        • 해당 코드를 대체할 수 있는 OS지원 프레임워크 확인
        • 기존 프로젝트 코드 중 대체할 수 있는 코드 확인 - 중복 코드 작성 않하도록
    2. 레거시 코드 수정
      • 기존 코드 동작 확인
      • 리팩토링 할 작업 목록 체크리스트 작성
      • 리팩토링 시 항상 재사용성, 의존성 등을 고민

4. 내가 개발한 기능이 실제 배포되기까지!

  1. 스펙 협의
    • API
    • 디자인
    • UX/기획
  2. 개발
    • 협의된 스펙에 맞게 구현
  3. 코드 리뷰
    • 코딩 컨벤션
    • 아키텍쳐
    • 클린코드
  4. QA
    • 버그 수정
    • 기획, 디자인 이슈 확인
  5. 배포

5. 성장하기 위한 고민

  • 질문
    1. 질문전에 검색 및 시도
    2. 질문할 내용 미리 정리
    3. 시도했던 방법과 실패 내용 간단히 공유
  • 동기부여
    1. 예전에 작성한 코드 다시 보기
    2. 알림 설정하기 - 공부 습관화 하기
  • 공부
    1. 다른 사람에게 설명할 수 있는 코드 작성하기
    2. 사이드 프로젝트
      • 평소 사용해보고 싶던 기술, 반복작업 자동화, 평소 불편했던 것
      • 기한 설정하기
    3. 공부한 내용 정리




성능을 고민하는 슬기로운 개발자 생활

  • 장수한, 네이버 웹툰

메모앱

  • 메모앱을 만들고 리팩토링했다
  • 겉보기에 뭔가 있어보임
  • 근데 메모가 많은 사용자가 메모를 보기위해 엄청난 시간이 걸린다!

개발자가 반드시 고려해야할 사항

  • 구현된 로직이 동작할 환경
    • 그저 로직만 확인하면 않됨
  • 적절한 자료구조가 사용
  • 작성된 로직의 복잡도
    • 복잡도 계산

슬기로운 행동양식

  • 복잡도 계산 꼭하기
    • N^2은 재앙을 불러온다 제거하자
  • 적절한 자료구조 사용하면 복잡도 낮출수 있다
    • 단 메모리 사용량 신경쓰자
  • 많은 양의 데이터 다룰 땐, Autoreleasepool사용해보자
    • 생각보다 효과적이다
  • 때론 계수도 부담스러울 수 있다
    • 반복문을 합치는 것을 고려해보자
  • 코드의 간결함, 가독성 모두중요하지만 기본적으로 성능이 보장되야함
  • 작성된 로직은 실제 환경과 비슷한 테스트가 필요
    • 사용자 환경 파악 중요

Set의 재조명

  • 딕셔너리와 비슷하지만 Hashable Value로만 구성된 자료구조
  • 조건만 맞으면 딕셔너리에 비해 더 깔끔한 코드 작성 가능
  • Set.insert, Set.update, Set.remove 차이점 알자
    • Insert: 동일한 값이 있으면 값이 들어가지 않음
      • 값이 들어가면 nil, 아니면 값 반환
    • Update: 동일한 값이 있어도, 값이 들어간다
      • 대신 기존에 있던 값 반환
      • 만약 동일한 값이 없었다면 nil 반환
    • Remove: 값 삭제
      • 값이 삭제됬다면 삭제된 값 반환
      • 값이 없었다면 nil 반환




Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우

업무 - Notification 전달하기

  • 내가 현재 무슨일을 하는지 주변에서 알아야 한다
  • 팀의 노력
    • 칸반 보드등 협업 툴 사용
  • 개인의 노력
    • 작업 계획의 공유 - 중복되는 일 방지

업무 - 질문하기

  • 좋은 질문? 답변하기 좋은 질문
    • 구체적이고 명료한 질문
      • 질문하기 전 퇴고하기로 명확한 의도 전달
    • 많이 고민한 것으로 보이는 질문
      • 무엇을 물어볼까? - 궁금증 구체화
      • 어디가지 해보고 질문할까? - 시도의 범위

업무 - 알면 알고, 모르면 모르고

  • 명확한 대답, 확실한 태도
    • 모른다고 얘기하는 것의 두려움
    • 모르면 모른다고 확실히 얘기하는 용기
    • 잘못된 대답/전달 했을 때 빠르게 정정하기
  • iOS에서 이 기능 가능해요?
    • 안해본 기능이면 안해봤다
    • 애매하게 해본 경우는 제대로 아는게 아니다
    • 재확인이 필요하다고 화깃ㄹ히 얘기하기
    • 언제나 공식문서와 코드를 통해 확인하기

업무 - 코드리뷰

  • 남의 일이 아니라는 마음가짐
  • 작은 것이라도 적극적으로
  • You are not your code
    • 코드와 나를 동일시 하지 말자
    • 코드에 대한 지적을 나에 대한 지적으로 생각하지 말기
  • 칭찬에 인색하지 않기

성장 - 공유하기

  • 공유주제에 대해 공부와 준비가 필요하게 됨
  • 전달하는 방식에 대해서도 고민
  • 이런 과정에서 자연스럽게 성장
  • 공유하기 방법 소개
    • 일하면서 잘 모르는 키워드들을 기록
    • 시간날때 키워드에 대해 공부하고 공유

성장 - 관심사를 찾고, 디테일에 강해지기

  • 모든 지식을 다 아는것은 불가능
  • T자형 탐색
    • 다양한 분야를 얕게 탐색
    • 관심 분야를 깊게 공부
  • 구글링으로 쉽게 알 수 없는 부분
    • 관련 문서의 깊은 한 구석에 있거나
    • 코드를 직접 확인해야 알 수 있거나
    • 직접 테스트해봐야 알 수 있거나




맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기

왜 빌드 속도를 빠르게 해야할까?

  • 빌드시간은 개발자에겐 잉여시간이 됨
  • 큰 프로젝트일수록 빌드시간이 길다

코드 사용 안하는 개선 방법

  • Xcode의 new build System 기능
    • Xcode10부터 디폴트 적용
  • 병렬 빌드 옵션 켜기
    • 라이브러리간 종속성이 적을수록 빨라짐
  • Build Settings 옵션
    • Build Active Architecture Only 옵션 켜기
      • 디버그에서는 Yes로 켜기
    • Optimization Level
      • 디버그에서는 끄기
        • 앱 크기를 줄이는 것이므로 빌드 속도가 느림
    • Debug Information Format
      • 디버그일때 with symfile은 끄기
    • Compliation Mode
      • 디버그일때는 incremental로 설정 (변경점만 빌드)
  • Dependency Manager 개선
    • Cocoapod, Carthage, SPM
    • Cocoapod
      • 설치가 간단하지만 매번 모든 라이브러리 빌드함
      • PreCompile: 미리 빌드해두고 사용
        • Cocoapods-Binary사용
    • Carthage
      • 기본적으로 PreComppile
      • 라이브러리 처음 설치할때만 빌드
      • Rome
        • 한명이 먼저 빌드하고 공유해서 다른 사람이 빌드할 필요 없개함

코드로 개선하는 방법

  • Project - Perform Action - Build timming summary
    • 빌드시간 확인
  • import는 필요한 곳 에만 사용
  • 가장 좋은건 한가지 언어만 사용
  • 클래스, 구조체 등은 되도록 파일 분리
  • 되도록 사용하지 말 것
    • 타입추론
    • 삼항연산자
    • nil 병함 연산자
  • 캡슐화 - 가능한 private 키워드로 숨겨야함
  • IBAction, IBOutletdp private 사용
  • 필요한 곳에서만 @objc 사용
  • Swift에서 상속을 하지 않는 Class들 final 선언

Leave a comment