14. #1 기초 과목의 중요성
• 학생들이 귀에 못이 박히도록 듣는 말..
• 하지만 (역시나) 직접 경험해보니 백 번 천 번 맞는 말이더라
• #2 ~ #4는 중요도 순이 아니지만 이 항목은 중요도 1순위
• 자료구조 및 알고리즘, 데이터베이스, 컴퓨터 네트워크, 운영
체제 등등
15. #1 기초 과목의 중요성
자료구조
•프로그래밍은 데이터를 다루는 일
•자료구조는 데이터를 저장해두는 곳
•업무 중 하루에도 십 수 번씩 내려야 하는 의사결정
“여기에는 어떤 자료구조가 적합할까?”
•자료구조 간의 차이점/장단점 확실하게 알자
•신입, 경력을 불문하고 면접 단골 질문
16. #1 기초 과목의 중요성
알고리즘
•프로그래밍은 데이터를 다루는 일
•알고리즘은 작업의 단계 + 작업 효율성의 척도
•Time Complexity & Space Complexity
•어떤 자료구조를 사용하는게 적합할지 판단하기 위해
서는 자료구조별 access, search, insert, delete 작업
의 time complexity 비교
•Sorting 알고리즘별 time & space complexity 공부
가 좋은 시작
17. #1 기초 과목의 중요성
컴퓨터 네트워크
“브라우저에 http://www.naver.com 을 입력하면 어떤 일들이
일어날까?”
• OSI 7 layers, DNS
• HTTP는 왜 TCP/IP 일까?
• TCP/IP와 UDP의 차이점
구글에서 만들고 라인, 페이스북 등에서 사용한 SPDY 프로토콜
• HTTP의 작동 방식을 이해
• 왜 실시간 커뮤니케이션을 할 때 단점이 있는지
• HTTP/2
20. #2 멀티쓰레드 환경에서의 개발
코드는 평면에 순차적으로 쓰여있지만 실제 실행될때는 이렇
게 여러개의 쓰레드가 동시에 실행되며 다른 쓰레드를 생성
해서 작업을 시키기도 하고 작업의 결과를 리턴 받기도 한다.
이미지 출처 : http://camel.apache.org/asynchronous-processing.html
21. #2 멀티쓰레드 환경에서의 개발
친구의 프사가 바뀌
었다는 메시지 수신
서버에서 이미지
다운로드
원형으로 비트맵
리사이즈
기존 프사 삭제하고
새로 저장
UI 반영
친구가 속해있는
단체방 검색
단체방 피자 모양
썸네일 새로 생성
기존 썸네일 삭제
후 새로 저장
UI 반영
친구가 프사를 바꾸면 내 앱에서는 무슨 일이 일어날까?
22. #2 멀티쓰레드 환경에서의 개발
•Asynchronous vs Synchronous (동기 vs 비동기)
•다른 쓰레드에 맡긴 작업의 결과를 기다리는 동안 다
른 작업을 할 수 있느냐, 못하느냐
•모바일 앱에서 메인쓰레드의 중요성
•UI에 대한 I/O 작업 할 수 있는 단 하나 뿐인 쓰레드!
•너무 많은 작업을 하거나 오래 걸리는 작업을 메인쓰
레드에서 할 경우 앱이 버벅이고 유저 인풋을 받을
수 없기 때문에 좋은 사용자 경험을 줄 수 없음
친구가 프사를 바꾸면 내 앱에서는 무슨 일이 일어날까?
23. #2 멀티쓰레드 환경에서의 개발
친구가 프사를 바꾸면 내 앱에서는 무슨 일이 일어날까?
main thread worker thread network thread file I/O thread
이미지 다운로드
SYNC
이미지 리턴
기존 프사 delete 및 새 프사 write
ASYNC
UI 업데이트
비트맵 작업
ASYNC
친구가 속한
그룹방 검색
그룹 멤버들 프사 read
SYNC
프사 합성
UI 업데이트
ASYNC
기존 프사 delete 및 새 프사 write
ASYNC
24. #2 멀티쓰레드 환경에서의 개발
•데드락
•데드락이 발생할 수 있는 조건 4가지
•데드락 해소 방법
•식사하는 철학자들 문제
•Race condition
•Thread safety
•디버깅 헬게이트
멀티쓰레딩은 어렵다
45. #3 SW 아키텍처에 대한 고민
• 언어나 프레임워크에 종속된 것이 아니기 때문에 어떤
프로젝트(iOS, 안드로이드, node.js, django 등)를 하
더라도 유사한 디자인 패턴을 찾을 수 있기 때문에 새
프레임워크도 쉽게 익힐 수 있음
• iOS와 안드로이드에서 상속 없이 커스텀 로직을 추가
하는 방법 (delegate vs listener)
• 패턴을 알고 있는 개발자라면 코드를 더 빨리 쉽게 읽을
수 있고 동료 개발자들과 추상화된 커뮤니케이션을 할
수 있음
• “이건 팩토리 패턴으로 짜면 더 편리하지 않을까요?”
48. #4 동료 개발자로서의 나
"수진님, A 기능을 추가하려고 하는데 (수진님이 작
성한) B 클래스에 어떻게 추가해야하나요?"
"수진님이 짠 클래스 수정했는데 리뷰 좀 해주세요"
"C 클래스를 이렇게 사용하는게 맞나요?"
49. #4 동료 개발자로서의 나
"(도대체) 왜 이렇게 짜셨어요??"
"수진님, A 기능을 추가하려고 하는데 (수진님이 작
성한) B 클래스에 어떻게 추가해야하나요?"
"수진님이 짠 클래스 수정했는데 리뷰 좀 해주세요"
"C 클래스를 이렇게 사용하는게 맞나요?"
50. #4 동료 개발자로서의 나
"내가 만든 서비스의 유저들도 나의 고객이지만 내가 짠
코드를 사용하는 동료 개발자들도 나의 고객이구나..."
• 동료 개발자들에게 더 좋은 서비스(좋은 코드)를 제공하기
위해서 어떻게 해야할까?
• 동료 개발자들에게 좋은 코드란 뭘까?
• (나에게 물어보지 않아도) 새 코드를 어디에 추가해야될
지 앎
• 클래스의 설계 목적과 의도대로 사용
• 이 와중에 의도치 않은 버그가 발생하지 않음 (or 최소화)
51. #4 동료 개발자로서의 나
• 구조가 잘 잡힌 소프트웨어 == 잘 정리된 방?
• 얼마전에 친구가 집에 놀러와서 꼴을 보더니 모든 물건을 끄
집어내서 버릴건 버리고 물건의 특성에 따라 재정리해줌
• 한번 구조를 잡아주니까 정리정돈을 못하는 나도 오랫동안
깨끗하게 유지가 된다!
• 새로운 클래스가 추가되고 다른 개발자가 참여하더라도 깔끔
하게 유지되는 코드를 짜는 것이 동료 개발자로서 할 수 있는
일?
비개발자 친구가 내 방을 리팩토링
“… 앞으로 이런 물건은 여기에 놓고 이건 자주 안쓰는거니까 저기
안에 넣어두고 이건 자주 쓰는거니까 책상 근처에 두면서 쓰고…”
53. PART 2
• 개발 실력은 코딩하는 만큼 업그레이드 된다
• 하지만 남이 시키는 개발은 재미가 없다 (특히 학교 과제ㅜㅜ)
• 내가 만들고 싶은 걸 찾아서 만들면 재미도 있고 개발도 는
다
• PART 1에서 언급한 것들을 맛보기 버전으로 미리 느껴볼 수
있다.
• 개발 면접 / 자소서 필수 항목
• 프로젝트를 진행해본 경험
• 프로젝트를 하면서 부딪힌 어려움, 어떻게 극복했는지
만들어보자
54. 토이 프로젝트
직접 만들어보세요!
#1 보안카드 위젯 개발 계기
#2 한 개라도 차별점을 확실히
#3 시작이 반, 출시가 반
#4 UI/UX 디자인은 필수
#5 가능하면 팀으로
55. #1 보안카드 위젯 개발 계기
iOS 수업 과제인 개인 프로젝트 주제 고민 중, 특이하고 새로운
기능을 가진 앱 보다는 내가 자주 쓰는 앱 중에 하나를 앱스토어
에 유료로 팔 수 있을 수준으로 완성도 높게 만들어보고 싶었음.
고민 끝에 내 자신이 여태 스마트폰을 쓰면서 가장 오래, 꾸준히
써온 보안카드 앱을 만들어보기로!
그리고 나서 스펙을 정리하면서, 새로 나온 iOS8의 새로운 기능
들을 어떻게든 써보고 싶어서 머리를 싸매던 도중 알림 센터의
활용 가치를 깨닫게됨.
나의 토이 프로젝트
56. #2 한 개라도 차별점을 확실히
• 너무 새로워서 생소한 것보다는 이미 사람들이 많이 쓰고 있
거나 특정 사람들이 강하게 필요로하는 것들을 만들어보자
• 공부 시간 측정, 메모, todo, 토론 타이머, 게임 스탯 분석
등등
• 누군가 내가 만든걸 써야하는 이유가 최소한 하나는 있어야함
• 보안카드 앱도 이미 수 년 전부터 여러 비슷한 앱이 존재했음
• 비슷한 서비스들도 자세히 살펴보면 조금씩 차별점이 있다.
• 사용자 리뷰를 살펴보면 사람들이 왜 그 특정 서비스를 쓰는
지, 그 서비스의 강점을 파악할 수 있다. 본보기로 삼자
만들고 싶은게 이미 존재하더라도 실망하지 말자
57. #2 한 개라도 차별점을 확실히
사람들은 계속해서 새로운 것을 찾는다
• 2015년 다운로드 수 그래프
• 힌트 : 10월 23일
58. #2 한 개라도 차별점을 확실히
사람들은 계속해서 새로운 것을 찾는다
• 2015년 다운로드 수 그래프
• 힌트 : 10월 23일
• 사람들이 폰을 새로 산 후 / 바꾼후 새 앱을 다운
• 그 외에도, 이미 쓰고 있는 서비스가 추후 지원을 중단하거나
• 더 마음에 드는 것이 나와서 바꿀 유인이 충분하다면
59. #3 시작이 반, 출시가 반
핵심 기능(차별점 포함)만 갖추고 일단 출시!
• 사용자가 생기기 시작하면 요구사항들이 쏟아짐
• 가장 개발을 쉴새없이, 미친듯이 했던 기간
• 사람들이 원하는 기능을 만들고 있다는 기쁨
• 없던 개발력도 생기게 하는 유저들의 긍정적인 피드백
그 이후는 물 흐르듯이
출시
60. #3 시작이 반, 출시가 반
핵심 기능(차별점 포함)만 갖추고 일단 출시!
• 사용자가 생기기 시작하면 요구사항들이 쏟아짐
• 가장 개발을 쉴새없이, 미친듯이 했던 기간
• 사람들이 원하는 기능을 만들고 있다는 기쁨
• 없던 개발력도 생기게 하는 유저들의 긍정적인 피드백
그 이후는 물 흐르듯이
61. #4 UI/UX 디자인은 필수
아이콘만 이뻐도 다운로드가 증가하더라
별다른 기능 추가 없이 아이콘 업데이트
62. #5 가능하면 팀으로
• 더 나은 결과물을 더 빨리 낼 수 있다
• 보안카드 위젯 앱도 디자이너 1명과 같이 작업
• 중요한 협업의 경험
• 개발자-개발자, 개발자-디자이너, 개발자-기획자
• 개발자간 협업을 하게 되면 Git과 Github을 꼭 사용
비교우위를 활용하자