SlideShare ist ein Scribd-Unternehmen logo
1 von 69
Downloaden Sie, um offline zu lesen
학생개발자에서 신입개발자로
한 단계 업그레이드 하기
노수진
연세대학교
PART 1. 현업 개발자가 되어서 고민하고, 깨닫기 시작한 것
PART 2. 토이 프로젝트 직접 만들어보기
신입 SW 개발자 2015. 1 ~ 2015. 11
모바일 프로그래밍 / 창업 전공2013. 1 ~ 2015. 1
sugarpoint33@gmail.com
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
ASYNC
UI 업데이트
비트맵 작업
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 Initialisation
Prototype
Singleton
Adapter
Bridge
Composite
DecoratorFacadeFlyweight
Front controller
Module
ProxyMarker
Twin
Chain of Responsibility
Interpreter
Iterator
Mediator
Memento
Visitor
State
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

Weitere ähnliche Inhalte

Was ist angesagt?

[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSNAVER D2
 
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)NAVER D2
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기NAVER Engineering
 
주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기sung yong jung
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규ChangKyu Song
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기none
 
도도와 파이썬: 좋은 선택과 나쁜 선택
도도와 파이썬: 좋은 선택과 나쁜 선택도도와 파이썬: 좋은 선택과 나쁜 선택
도도와 파이썬: 좋은 선택과 나쁜 선택Jc Kim
 
[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoN[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoNNAVER D2
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기복연 이
 
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)우영 주
 
Droid Knight 2019
Droid Knight 2019Droid Knight 2019
Droid Knight 2019선옥 장
 
D2 CAMPUS FEST 2015 오리엔테이션 session1
D2 CAMPUS FEST 2015 오리엔테이션 session1D2 CAMPUS FEST 2015 오리엔테이션 session1
D2 CAMPUS FEST 2015 오리엔테이션 session1NAVER D2
 
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나none
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101Chang W. Doh
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.우영 주
 

Was ist angesagt? (20)

[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJS
 
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
 
주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기
 
도도와 파이썬: 좋은 선택과 나쁜 선택
도도와 파이썬: 좋은 선택과 나쁜 선택도도와 파이썬: 좋은 선택과 나쁜 선택
도도와 파이썬: 좋은 선택과 나쁜 선택
 
[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoN[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoN
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
 
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
 
Droid Knight 2019
Droid Knight 2019Droid Knight 2019
Droid Knight 2019
 
D2 CAMPUS FEST 2015 오리엔테이션 session1
D2 CAMPUS FEST 2015 오리엔테이션 session1D2 CAMPUS FEST 2015 오리엔테이션 session1
D2 CAMPUS FEST 2015 오리엔테이션 session1
 
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.
 

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

How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427Will Kim
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래Sung-tae Ryu
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
포트폴리오 김규하
포트폴리오 김규하포트폴리오 김규하
포트폴리오 김규하GyooHa Kim
 
Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyunjaeyunjeong1
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it goChris Ohk
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)VMware Tanzu Korea
 
U&i insight2012스터디설명회
U&i insight2012스터디설명회U&i insight2012스터디설명회
U&i insight2012스터디설명회Amy Young Ah Kim
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 
성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 Unbong Kang
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Aree Oh
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다이상한모임
 
LingoStar iPhone App Design Workshop
LingoStar iPhone App Design WorkshopLingoStar iPhone App Design Workshop
LingoStar iPhone App Design Workshop성관 윤
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기Jay Park
 
[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동NAVER D2
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑Dongsik Yang
 

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

How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
2013 공개SW데이 발표 - 구름IDE의 발자취와 미래
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
포트폴리오 김규하
포트폴리오 김규하포트폴리오 김규하
포트폴리오 김규하
 
Fedevtalk 15 jds
Fedevtalk 15 jdsFedevtalk 15 jds
Fedevtalk 15 jds
 
Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyun
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
U&i insight2012스터디설명회
U&i insight2012스터디설명회U&i insight2012스터디설명회
U&i insight2012스터디설명회
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
LingoStar iPhone App Design Workshop
LingoStar iPhone App Design WorkshopLingoStar iPhone App Design Workshop
LingoStar iPhone App Design Workshop
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기
 
[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 

Kürzlich hochgeladen

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 

Kürzlich hochgeladen (8)

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 

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

  • 1. 학생개발자에서 신입개발자로 한 단계 업그레이드 하기 노수진 연세대학교 PART 1. 현업 개발자가 되어서 고민하고, 깨닫기 시작한 것 PART 2. 토이 프로젝트 직접 만들어보기
  • 2. 신입 SW 개발자 2015. 1 ~ 2015. 11 모바일 프로그래밍 / 창업 전공2013. 1 ~ 2015. 1 sugarpoint33@gmail.com https://kr.linkedin.com/in/soojinro http://www.slideshare.net/soojinro9 Contacts 2009 ~연세대학교 경영학과 소개 보안카드 위젯 앱 2014. 12 ~
  • 3. 보안카드 위젯 스마트폰으로 계좌이체할 때 필요한 보안카드 입력을 아이폰 위젯에서 편하고 빠르게 확인할 수 있게 해줌
  • 4.
  • 5. 보안카드 위젯 일대기 2014년 12월 17일 출시 12월 19일 ‘금융’ 카테고리 유료 부분 1위 12월 21일 앱스토어 유료앱 8위 2015년 1월 28일 앱스토어 유료앱 2위 2016년 8월 현재 50~100위 유지
  • 6.
  • 7. 라인의 핵심 기능들을 1MB 미만으로 담기 라인 LITE
  • 8. 이미지 출처 : https://play.google.com/store/apps/details?id=com.linecorp.linelite&hl=ko
  • 10. 플랫폼 개발 인원 시기 및 장소 클래스 갯수 iOS 안드로이드 2명 이상1 학생 회사 42 수백 개 vs
  • 11. PART 1현업 개발자가 되어서 고민하고, 깨닫기 시작한 것
  • 12. 현업 개발자가 되어서 고민하고, 깨닫기 시작한 것 #1 기초 과목의 중요성 #2 멀티쓰레드 환경에서의 개발 #3 소프트웨어 아키텍처에 대한 고민 #4 동료 개발자로서의 나
  • 13. #1 기초 과목의 중요성
  • 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
  • 18. #1 기초 과목의 중요성
  • 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 •디버깅 헬게이트 멀티쓰레딩은 어렵다
  • 25. #3 SW 아키텍처에 대한 고민
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44. Software Architecture 혹은 Software Design Pattern 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 일반화되어있고 재사용 가능한 해결 방법
  • 45. #3 SW 아키텍처에 대한 고민 • 언어나 프레임워크에 종속된 것이 아니기 때문에 어떤 프로젝트(iOS, 안드로이드, node.js, django 등)를 하 더라도 유사한 디자인 패턴을 찾을 수 있기 때문에 새 프레임워크도 쉽게 익힐 수 있음 • iOS와 안드로이드에서 상속 없이 커스텀 로직을 추가 하는 방법 (delegate vs listener) • 패턴을 알고 있는 개발자라면 코드를 더 빨리 쉽게 읽을 수 있고 동료 개발자들과 추상화된 커뮤니케이션을 할 수 있음 • “이건 팩토리 패턴으로 짜면 더 편리하지 않을까요?”
  • 46. Abstract Factory Builder Lazy Initialisation Prototype Singleton Adapter Bridge Composite DecoratorFacadeFlyweight Front controller Module ProxyMarker Twin Chain of Responsibility Interpreter Iterator Mediator Memento Visitor State Reactor ObserverStrategy Template method Blockchain
  • 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을 꼭 사용 비교우위를 활용하자
  • 64. Lesson Learned • 올해 3월 대대적인 UI 리뉴얼을 해서 2.0 버전 업데이트 • 기존 유저들의 강한 반발 전체 2.0 버전 급격한 변화를 지양하자
  • 66.
  • 68. Q & A