[NAVER TECH CONCERT 2020] 요약
Updated:
신입 iOS 개발자 개발업무 적응기
1. 비전공자에서 네이버 입사까지
- 복수전공
- 스터디, 프로젝트, 해커톤
- 코딩테스트
- 설명
- 다른 사람에게 설명하기
- 현재 풀이를 선택한 이유 등 풀이를 하면서 설명
- 비교
- 다른 사람의 풀이와 비교
- 더 나으 접근 방법 배우기
- 알고리즘의 이해
- 면접
- 많이 말해보기 - 스터디, 녹화 등
- 논리적인 설명 - 풀이에 대한 뒷받침
- 모르는 질문도 포기하지 않기 - 자기 생각 말하기, 질문하기
2. 입사하고 현업 배치까지
- 신입 코드데이 - 테크 쉐어 - 부트캠프
- 신입 코드데이
- 다양한 네이버 서비스 체험
- 네이버 조직쇅
- 사내 조직 문화
- 테크 쉐어
- iOS 교육
- Swift Basic부터 전체적인 내용들 교육
- 부트캠프
- 메신저 앱: iOS + 백엔드 + 2주
- 현업의 개발방식 미리 경험
3. 어떤 업무를 하고 있나요?
- 유지 보수 + 기능 개발
- 첫 배치되면 비지니스 로직 파악
- Warning 수정
- SwiftLint
- Deprecated
- Optional Value Casting
- 프로젝트 구조 파악
- 뷰 디버깅 기능 활용하면 수 많은 파일이 무슨 역할하는지 파악하기 좋음
- 리팩토링
- 오픈 소스
- 버전 업데이트
- 성능상 이슈, 버그 등을 사전검토를 통해 문제 최소화
- 마이그레이션 가이드, 체인지 로그 등을 활용해서 사전 검토
- 스위프트 버전에 의존성이 있는 오픈소스 제거
- 의존성이 있는 오픈소스를 기본 제공 프레임워크로 변환
- 기존 코드 동작 파악 및 전체 흐름 그려봄으로서 수정 시 영향을 미리 파악
- 오픈소스 뜯어보며 내부 로직 파악
- 해당 코드를 대체할 수 있는 OS지원 프레임워크 확인
- 기존 프로젝트 코드 중 대체할 수 있는 코드 확인 - 중복 코드 작성 않하도록
- 레거시 코드 수정
- 기존 코드 동작 확인
- 리팩토링 할 작업 목록 체크리스트 작성
- 리팩토링 시 항상 재사용성, 의존성 등을 고민
4. 내가 개발한 기능이 실제 배포되기까지!
- 스펙 협의
- 개발
- 코드 리뷰
- QA
- 배포
5. 성장하기 위한 고민
- 질문
- 질문전에 검색 및 시도
- 질문할 내용 미리 정리
- 시도했던 방법과 실패 내용 간단히 공유
- 동기부여
- 예전에 작성한 코드 다시 보기
- 알림 설정하기 - 공부 습관화 하기
- 공부
- 다른 사람에게 설명할 수 있는 코드 작성하기
- 사이드 프로젝트
- 평소 사용해보고 싶던 기술, 반복작업 자동화, 평소 불편했던 것
- 기한 설정하기
- 공부한 내용 정리
성능을 고민하는 슬기로운 개발자 생활
메모앱
- 메모앱을 만들고 리팩토링했다
- 겉보기에 뭔가 있어보임
- 근데 메모가 많은 사용자가 메모를 보기위해 엄청난 시간이 걸린다!
개발자가 반드시 고려해야할 사항
- 구현된 로직이 동작할 환경
- 적절한 자료구조가 사용
- 작성된 로직의 복잡도
슬기로운 행동양식
- 복잡도 계산 꼭하기
- 적절한 자료구조 사용하면 복잡도 낮출수 있다
- 많은 양의 데이터 다룰 땐, Autoreleasepool사용해보자
- 때론 계수도 부담스러울 수 있다
- 코드의 간결함, 가독성 모두중요하지만 기본적으로 성능이 보장되야함
- 작성된 로직은 실제 환경과 비슷한 테스트가 필요
Set의 재조명
- 딕셔너리와 비슷하지만 Hashable Value로만 구성된 자료구조
- 조건만 맞으면 딕셔너리에 비해 더 깔끔한 코드 작성 가능
- Set.insert, Set.update, Set.remove 차이점 알자
- Insert: 동일한 값이 있으면 값이 들어가지 않음
- Update: 동일한 값이 있어도, 값이 들어간다
- 대신 기존에 있던 값 반환
- 만약 동일한 값이 없었다면 nil 반환
- Remove: 값 삭제
- 값이 삭제됬다면 삭제된 값 반환
- 값이 없었다면 nil 반환
Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
업무 - Notification 전달하기
- 내가 현재 무슨일을 하는지 주변에서 알아야 한다
- 팀의 노력
- 개인의 노력
업무 - 질문하기
- 좋은 질문? 답변하기 좋은 질문
- 구체적이고 명료한 질문
- 많이 고민한 것으로 보이는 질문
- 무엇을 물어볼까? - 궁금증 구체화
- 어디가지 해보고 질문할까? - 시도의 범위
업무 - 알면 알고, 모르면 모르고
- 명확한 대답, 확실한 태도
- 모른다고 얘기하는 것의 두려움
- 모르면 모른다고 확실히 얘기하는 용기
- 잘못된 대답/전달 했을 때 빠르게 정정하기
- iOS에서 이 기능 가능해요?
- 안해본 기능이면 안해봤다
- 애매하게 해본 경우는 제대로 아는게 아니다
- 재확인이 필요하다고 화깃ㄹ히 얘기하기
- 언제나 공식문서와 코드를 통해 확인하기
업무 - 코드리뷰
- 남의 일이 아니라는 마음가짐
- 작은 것이라도 적극적으로
- You are not your code
- 코드와 나를 동일시 하지 말자
- 코드에 대한 지적을 나에 대한 지적으로 생각하지 말기
- 칭찬에 인색하지 않기
성장 - 공유하기
- 공유주제에 대해 공부와 준비가 필요하게 됨
- 전달하는 방식에 대해서도 고민
- 이런 과정에서 자연스럽게 성장
- 공유하기 방법 소개
- 일하면서 잘 모르는 키워드들을 기록
- 시간날때 키워드에 대해 공부하고 공유
성장 - 관심사를 찾고, 디테일에 강해지기
- 모든 지식을 다 아는것은 불가능
- T자형 탐색
- 다양한 분야를 얕게 탐색
- 관심 분야를 깊게 공부
- 구글링으로 쉽게 알 수 없는 부분
- 관련 문서의 깊은 한 구석에 있거나
- 코드를 직접 확인해야 알 수 있거나
- 직접 테스트해봐야 알 수 있거나
맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
왜 빌드 속도를 빠르게 해야할까?
- 빌드시간은 개발자에겐 잉여시간이 됨
- 큰 프로젝트일수록 빌드시간이 길다
코드 사용 안하는 개선 방법
- Xcode의 new build System 기능
- 병렬 빌드 옵션 켜기
- Build Settings 옵션
- Build Active Architecture Only 옵션 켜기
- Optimization Level
- Debug Information Format
- Compliation Mode
- 디버그일때는 incremental로 설정 (변경점만 빌드)
- Dependency Manager 개선
- Cocoapod, Carthage, SPM
- Cocoapod
- 설치가 간단하지만 매번 모든 라이브러리 빌드함
- PreCompile: 미리 빌드해두고 사용
- Carthage
- 기본적으로 PreComppile
- 라이브러리 처음 설치할때만 빌드
- Rome
- 한명이 먼저 빌드하고 공유해서 다른 사람이 빌드할 필요 없개함
코드로 개선하는 방법
- Project - Perform Action - Build timming summary
- import는 필요한 곳 에만 사용
- 가장 좋은건 한가지 언어만 사용
- 클래스, 구조체 등은 되도록 파일 분리
- 되도록 사용하지 말 것
- 캡슐화 - 가능한 private 키워드로 숨겨야함
- IBAction, IBOutletdp private 사용
- 필요한 곳에서만 @objc 사용
- Swift에서 상속을 하지 않는 Class들 final 선언
Leave a comment