d2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

69
학생개발자에서 신입개발자로 한 단계 업그레이드 하기 노수진 연세대학교 PART 1. 현업 개발자가 되어서 고민하고, 깨닫기 시작한 것 PART 2. 토이 프로젝트 직접 만들어보기

Upload: soojin-ro

Post on 14-Jan-2017

2.265 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

학생개발자에서�신입개발자로��한�단계�업그레이드�하기

노수진연세대학교

PART�1.�현업�개발자가�되어서�고민하고,�깨닫기�시작한�것�

PART�2.�토이�프로젝트�직접�만들어보기

Page 2: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

신입�SW�개발자 2015.�1�~�2015.�11

모바일�프로그래밍�/�창업�전공2013.�1�~�2015.�1

[email protected]�https://kr.linkedin.com/in/soojinro�

http://www.slideshare.net/soojinro9

Contacts

2009�~연세대학교�경영학과

소개

보안카드�위젯�앱 2014.�12�~

Page 3: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

보안카드�위젯

스마트폰으로�계좌이체할�때�필요한�보안카드�입력을��아이폰�위젯에서�편하고�빠르게�확인할�수�있게�해줌

Page 4: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 5: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

보안카드�위젯�일대기

2014년��12월�17일�출시�

��12월�19일�‘금융’�카테고리�유료�부분�1위�

��12월�21일�앱스토어�유료앱�8위�

2015년���1월�28일�앱스토어�유료앱�2위�

2016년���8월�현재�50~100위�유지

Page 6: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 7: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

라인의�핵심�기능들을�1MB�미만으로�담기

라인�LITE

Page 8: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

이미지�출처�:�https://play.google.com/store/apps/details?id=com.linecorp.linelite&hl=ko

Page 9: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

보안카드�위젯 라인�LITE

vs

Page 10: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

플랫폼

개발�인원

시기�및�장소

클래스�갯수

iOS 안드로이드

2명�이상1

학생 회사

42 수백�개

vs

Page 11: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

PART�1현업�개발자가�되어서�고민하고,�깨닫기�시작한�것

Page 12: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

현업�개발자가�되어서�고민하고,�깨닫기�시작한�것#1�기초�과목의�중요성�

#2�멀티쓰레드�환경에서의�개발�

#3�소프트웨어�아키텍처에�대한�고민�

#4�동료�개발자로서의�나

Page 13: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�기초�과목의�중요성

Page 14: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�기초�과목의�중요성

자료구조�및�알고리즘

•학생들이�귀에�못이�박히도록�듣는�말..�

•하지만�(역시나)�직접�경험해보니�백�번�천�번�맞는�말이더라�

•#2�~�#4는�중요도�순이�아니지만�이�항목은�중요도�1순위�

•자료구조�및�알고리즘,�데이터베이스,�컴퓨터�네트워크,�운영체제�등등

Page 15: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�기초�과목의�중요성자료구조

•프로그래밍은�데이터를�다루는�일�

•자료구조는�데이터를�저장해두는�곳�

•업무�중�하루에도�십�수�번씩�내려야�하는�의사결정�

“여기에는�어떤�자료구조가�적합할까?”�

•자료구조�간의�차이점/장단점�확실하게�알자�

•신입,�경력을�불문하고�면접�단골�질문

Page 16: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�기초�과목의�중요성알고리즘

•프로그래밍은�데이터를�다루는�일�

•알고리즘은�작업의�단계�+�작업�효율성의�척도�

•Time�Complexity�&�Space�Complexity�

•어떤�자료구조를�사용하는게�적합할지�판단하기�위해서는�자료구조별�access,�search,�insert,�delete�작업의�time�complexity�비교�

•Sorting�알고리즘별�time�&�space�complexity�공부가�좋은�시작

Page 17: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�기초�과목의�중요성컴퓨터�네트워크

“브라우저에�http://www.naver.com�을�입력하면�어떤�일들이�일어날까?”�

• OSI�7�layers,�DNS�

• HTTP는�왜�TCP/IP�일까?��

• TCP/IP와�UDP의�차이점�

구글에서�만들고�라인,�페이스북�등에서�사용한�SPDY�프로토콜�

• HTTP의�작동�방식을�이해�

•왜�실시간�커뮤니케이션을�할�때�단점이�있는지�

• HTTP/2

Page 18: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�기초�과목의�중요성

Page 19: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�멀티쓰레드�환경에서의�개발

Page 20: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�멀티쓰레드�환경에서의�개발

코드는�평면에�순차적으로�쓰여있지만�실제�실행될때는�이렇게�여러개의�쓰레드가�동시에�실행되며�다른�쓰레드를�생성해서�작업을�시키기도�하고�작업의�결과를�리턴�받기도�한다.

이미지�출처�:�http://camel.apache.org/asynchronous-processing.html

Page 21: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�멀티쓰레드�환경에서의�개발

친구의�프사가�바뀌었다는�메시지�수신

서버에서�이미지��다운로드

원형으로�비트맵�리사이즈

기존�프사�삭제하고��새로�저장

UI�반영친구가�속해있는�단체방�검색

단체방�피자�모양�썸네일�새로�생성

기존�썸네일�삭제�후�새로�저장

UI�반영

친구가�프사를�바꾸면�내�앱에서는�무슨�일이�일어날까?

Page 22: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�멀티쓰레드�환경에서의�개발

•Asynchronous�vs�Synchronous�(동기�vs�비동기)�

•다른�쓰레드에�맡긴�작업의�결과를�기다리는�동안�다른�작업을�할�수�있느냐,�못하느냐�

•모바일�앱에서�메인쓰레드의�중요성�

•UI에�대한�I/O�작업�할�수�있는�단�하나�뿐인�쓰레드!�

•너무�많은�작업을�하거나�오래�걸리는�작업을�메인쓰레드에서�할�경우�앱이�버벅이고�유저�인풋을�받을�수�없기�때문에�좋은�사용자�경험을�줄�수�없음

친구가�프사를�바꾸면�내�앱에서는�무슨�일이�일어날까?

Page 23: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�멀티쓰레드�환경에서의�개발친구가�프사를�바꾸면�내�앱에서는�무슨�일이�일어날까?

main�thread worker�thread network�thread file�I/O�thread

이미지�다운로드

SYNC

이미지�리턴

기존�프사�delete�및�새�프사�write

ASYNCUI�업데이트

비트맵�작업

ASYNC

친구가�속한��그룹방�검색

그룹�멤버들�프사�read

�SYNC

프사�합성

UI�업데이트

ASYNC

기존�프사�delete�및�새�프사�write

ASYNC

Page 24: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�멀티쓰레드�환경에서의�개발

•데드락�

•데드락이�발생할�수�있는�조건�4가지�

•데드락�해소�방법�

•식사하는�철학자들�문제�

•Race�condition�

•Thread�safety�

•디버깅�헬게이트

멀티쓰레딩은�어렵다

Page 25: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#3�SW�아키텍처에�대한�고민

Page 26: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

참고�:�https://developer.apple.com/videos/play/wwdc2014/229/

Page 27: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 28: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 29: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 30: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 31: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 32: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 33: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 34: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 35: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 36: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 37: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 38: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 39: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 40: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 41: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 42: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 43: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 44: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

Software�Architecture�혹은�

Software�Design�Pattern

프로그램�개발에서�자주�나타나는�과제를�해결하기�위한��

일반화되어있고�재사용�가능한�해결�방법

Page 45: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#3�SW�아키텍처에�대한�고민

•언어나�프레임워크에�종속된�것이�아니기�때문에�어떤�프로젝트(iOS,�안드로이드,�node.js,�django�등)를�하더라도�유사한�디자인�패턴을�찾을�수�있기�때문에�새�프레임워크도�쉽게�익힐�수�있음�

• iOS와�안드로이드에서�상속�없이�커스텀�로직을�추가하는�방법�(delegate�vs�listener)�

•패턴을�알고�있는�개발자라면�코드를�더�빨리�쉽게�읽을�수�있고�동료�개발자들과�추상화된�커뮤니케이션을�할�수�있음�

• “이건�팩토리�패턴으로�짜면�더�편리하지�않을까요?”

Page 46: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

Abstract�Factory

Builder

Lazy�InitialisationPrototype

Singleton

Adapter

Bridge

Composite

DecoratorFacadeFlyweight

Front�controller

Module

ProxyMarker

Twin

Chain�of�Responsibility

Interpreter

Iterator

Mediator

Memento

VisitorState

Reactor

ObserverStrategy

Template�method Blockchain

Page 47: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#4�동료�개발자로서의�나

Page 48: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#4�동료�개발자로서의�나

"수진님,�A�기능을�추가하려고�하는데�(수진님이�작성한)�B�클래스에�어떻게�추가해야하나요?"�

"수진님이�짠�클래스�수정했는데�리뷰�좀�해주세요"�

"C�클래스를�이렇게�사용하는게�맞나요?"

Page 49: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#4�동료�개발자로서의�나

"(도대체)�왜�이렇게�짜셨어요??"

"수진님,�A�기능을�추가하려고�하는데�(수진님이�작성한)�B�클래스에�어떻게�추가해야하나요?"�

"수진님이�짠�클래스�수정했는데�리뷰�좀�해주세요"�

"C�클래스를�이렇게�사용하는게�맞나요?"

Page 50: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#4�동료�개발자로서의�나

"내가�만든�서비스의�유저들도�나의�고객이지만�내가�짠�코드를�사용하는�동료�개발자들도�나의�고객이구나..."

•동료�개발자들에게�더�좋은�서비스(좋은�코드)를�제공하기�위해서�어떻게�해야할까?�

•동료�개발자들에게�좋은�코드란�뭘까?�

• (나에게�물어보지�않아도)�새�코드를�어디에�추가해야될지�앎�

•클래스의�설계�목적과�의도대로�사용�

•이�와중에�의도치�않은�버그가�발생하지�않음�(or�최소화)

Page 51: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#4�동료�개발자로서의�나

•구조가�잘�잡힌�소프트웨어�==�잘�정리된�방?�

•얼마전에�친구가�집에�놀러와서�꼴을�보더니�모든�물건을�끄집어내서�버릴건�버리고�물건의�특성에�따라�재정리해줌�

•한번�구조를�잡아주니까�정리정돈을�못하는�나도�오랫동안�깨끗하게�유지가�된다!�

•새로운�클래스가�추가되고�다른�개발자가�참여하더라도�깔끔하게�유지되는�코드를�짜는�것이�동료�개발자로서�할�수�있는�일?

비개발자�친구가�내�방을�리팩토링

“…�앞으로�이런�물건은�여기에�놓고�이건�자주�안쓰는거니까�저기�안에�넣어두고�이건�자주�쓰는거니까�책상�근처에�두면서�쓰고…”

Page 52: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

PART�2만들어보자�

Page 53: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

PART�2

•개발�실력은�코딩하는�만큼�업그레이드�된다�

•하지만�남이�시키는�개발은�재미가�없다�(특히�학교�과제ㅜㅜ)�

•내가�만들고�싶은�걸�찾아서�만들면�재미도�있고�개발도�는다�

• PART�1에서�언급한�것들을�맛보기�버전으로�미리�느껴볼�수�있다.�

•개발�면접�/�자소서�필수�항목�

•프로젝트를�진행해본�경험�

•프로젝트를�하면서�부딪힌�어려움,�어떻게�극복했는지

만들어보자

Page 54: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

토이�프로젝트�직접�만들어보세요!#1�보안카드�위젯�개발�계기�

#2�한�개라도�차별점을�확실히�

#3�시작이�반,�출시가�반�

#4�UI/UX�디자인은�필수�

#5�가능하면�팀으로�

Page 55: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#1�보안카드�위젯�개발�계기

iOS�수업�과제인�개인�프로젝트�주제�고민�중,�특이하고�새로운�

기능을�가진�앱�보다는�내가�자주�쓰는�앱�중에�하나를�앱스토어

에�유료로�팔�수�있을�수준으로�완성도�높게�만들어보고�싶었음.��

고민�끝에�내�자신이�여태�스마트폰을�쓰면서�가장�오래,�꾸준히�

써온�보안카드�앱을�만들어보기로!��

그리고�나서�스펙을�정리하면서,�새로�나온�iOS8의�새로운�기능

들을�어떻게든�써보고�싶어서�머리를�싸매던�도중�알림�센터의�

활용�가치를�깨닫게됨.

나의�토이�프로젝트

Page 56: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�한�개라도�차별점을�확실히

•너무�새로워서�생소한�것보다는�이미�사람들이�많이�쓰고�있거나�특정�사람들이�강하게�필요로하는�것들을�만들어보자�

•공부�시간�측정,�메모,�todo,�토론�타이머,�게임�스탯�분석�등등�

•누군가�내가�만든걸�써야하는�이유가�최소한�하나는�있어야함�

•보안카드�앱도�이미�수�년�전부터�여러�비슷한�앱이�존재했음�

•비슷한�서비스들도�자세히�살펴보면�조금씩�차별점이�있다.�

•사용자�리뷰를�살펴보면�사람들이�왜�그�특정�서비스를�쓰는지,�그�서비스의�강점을�파악할�수�있다.�본보기로�삼자

만들고�싶은게�이미�존재하더라도�실망하지�말자

Page 57: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�한�개라도�차별점을�확실히사람들은�계속해서�새로운�것을�찾는다

• 2015년�다운로드�수�그래프�

•힌트�:�10월�23일

Page 58: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#2�한�개라도�차별점을�확실히사람들은�계속해서�새로운�것을�찾는다

•2015년�다운로드�수�그래프�

•힌트�:�10월�23일�

•사람들이�폰을�새로�산�후�/�바꾼후�새�앱을�다운�

•그�외에도,�이미�쓰고�있는�서비스가�추후�지원을�중단하거나�

•더�마음에�드는�것이�나와서�바꿀�유인이�충분하다면

Page 59: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#3�시작이�반,�출시가�반

핵심�기능(차별점�포함)만�갖추고�일단�출시!�

• 사용자가�생기기�시작하면�요구사항들이�쏟아짐�

• 가장�개발을�쉴새없이,�미친듯이�했던�기간�

• 사람들이�원하는�기능을�만들고�있다는�기쁨�

• 없던�개발력도�생기게�하는�유저들의�긍정적인�피드백

그�이후는�물�흐르듯이

출시

Page 60: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#3�시작이�반,�출시가�반

핵심�기능(차별점�포함)만�갖추고�일단�출시!�

• 사용자가�생기기�시작하면�요구사항들이�쏟아짐�

• 가장�개발을�쉴새없이,�미친듯이�했던�기간�

• 사람들이�원하는�기능을�만들고�있다는�기쁨�

• 없던�개발력도�생기게�하는�유저들의�긍정적인�피드백

그�이후는�물�흐르듯이

Page 61: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#4�UI/UX�디자인은�필수아이콘만�이뻐도�다운로드가�증가하더라

별다른�기능�추가�없이�아이콘�업데이트

Page 62: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

#5�가능하면�팀으로

•더�나은�결과물을�더�빨리�낼�수�있다�

•보안카드�위젯�앱도�디자이너�1명과�같이�작업�

•중요한�협업의�경험�

•개발자-개발자,�개발자-디자이너,�개발자-기획자�

•개발자간�협업을�하게�되면�Git과�Github을�꼭�사용

비교우위를�활용하자

Page 63: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

얼마�전�사건

Page 64: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

Lesson�Learned

•올해�3월�대대적인�UI�리뉴얼을�해서�2.0�버전�업데이트�

•기존�유저들의�강한�반발

전체

2.0 버전

급격한�변화를�지양하자

Page 65: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

마무리

Page 66: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Page 67: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

경력��(분야에�지식)

전문가생�초짜

자신감

Page 68: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

Q�&�A

Page 69: D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기

출처

https://en.wikipedia.org/wiki/Composition_over_inheritance�

http://www.artima.com/lejava/articles/designprinciples.html�

https://www.raywenderlich.com/46988/ios-design-patterns�

https://developer.apple.com/videos/play/wwdc2014/224/�

https://developer.apple.com/videos/play/wwdc2014/229/�

NHN�NEXT�SW�Architecture�수업�자료�-�패턴�이야기(GoF)�

http://d2.naver.com/helloworld/140351�

http://www.ibm.com/developerworks/linux/library/l-async/�

https://slipp.net/questions/367�