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