track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs scala, (함수형 언어...
TRANSCRIPT
![Page 2: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/2.jpg)
누구십니까?
![Page 3: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/3.jpg)
누구십니까?
● 스마트홈을 위한 스타트업 I/O에서 개발팀을 리드하고 있습니다.
● MAU 5,000명 돌파!
https://switcher.kr/https://www.facebook.com/switcher.io/
![Page 4: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/4.jpg)
무슨 이야기를?
![Page 5: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/5.jpg)
무슨 이야기를?
● 작은 스타트업 팀에 ‘함수형 언어’를 도입하기 위해
시도하고 있는 것들
● 작은 스타트업에 조인하면서 겪은 문제를 해결하기 위해
어떠한 고민을 했는가? (하소연..)
![Page 6: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/6.jpg)
함수형 언어 방황기
![Page 7: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/7.jpg)
저는..
함수형 언어를 쓰자고
주장하러 나온게 아닙니다..
![Page 8: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/8.jpg)
저는..
이제 막 시도하고 있거든요..
![Page 9: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/9.jpg)
저는..
그럼 왜 발표하냐..
![Page 10: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/10.jpg)
저는..
저처럼 이제 시도하시는
분들도 분명 존재하니까요!
![Page 11: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/11.jpg)
저는..
‘과정’을 공유하고 싶습니다!
![Page 12: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/12.jpg)
저는..
‘과정’에 대해
‘피드백’받고 싶어요 :)
![Page 13: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/13.jpg)
왜 함수형 언어를?
● 새로운 패러다임에 대한 성장욕구● 높은 추상화● 코드 신뢰성
...
● 다음 제품을 위한 시간적 여유(?)● 동시성
● 빅데이터
...
개인 회사
저는 함수형 언어를 알지도 못하는 사람
![Page 14: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/14.jpg)
왜 함수형 언어를? 높은 추상화, 코드 신뢰성
public class TheCompanyProcess {
public String cleanNames(List<String> listOfNames) {
StringBuilder result = new StringBuilder();
for(int i = 0; i < listOfNames.size(); i++) {
if(listOfNames.get(i).length() > 1) {
// TODO
}
}
}
※참고Functional Thinking (함수형 사고)
Java
![Page 15: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/15.jpg)
왜 함수형 언어를? 높은 추상화, 코드 신뢰성
val employees = List(“neal”, “s”, “stu”)
val result = employees
.filter(_.length() > 1)
.map(_.capitalize)
※참고Functional Thinking (함수형 사고)
Scala
우아하다..
![Page 16: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/16.jpg)
어떻게 팀에 도입을?
매주 SW 세미나
함수형 패러다임 도전
프로덕션 적용 시작
관심끌기 성공 ..
![Page 17: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/17.jpg)
어떻게 팀에 도입을? 매주 SW 세미나
의미 찾기 ...
※참고https://medium.com/@jooyunghan/함수형-프로그래밍이란-무엇인가-fab4e960d263#.g01d2p1c8http://blog.jenkster.com/2015/12/what-is-functional-programming.html
![Page 18: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/18.jpg)
어떻게 팀에 도입을? 함수형 패러다임 도전
함수형 언어에 등장하는 ‘특성들’을
‘기존 제품의 서버에 적용’해보고
함수형 패러다임의 ‘매력’을 멤버들과 동기화.
.filter .map .reduce ...
node.js 기반 (javascript)
높은 추상화, 코드 신뢰성
![Page 19: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/19.jpg)
어떻게 팀에 도입을? .filter()
var results = [
{id: 1, invoice: '-'},
{id: 2, invoice: '6899134605305'},
{id: 3, invoice: '-'},
{id: 4, invoice: '6899134605370'}
];
results.forEach(function(value, index) {
if(value.invoice === '-') {
// TODO
}
});
var filteredResults = results.filter(function(result) {
return result.invoice === '-';
});
filteredResults.forEach(function(value, index) {
// TODO
});
javascript
![Page 20: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/20.jpg)
어떻게 팀에 도입을? .filter()
case class Result(id: Int, invoice: String)
val results = List(Result(1, "-"), Result(2, "6899134605305"),
Result(3, "-"), Result(4, "6899134605370"))
val filteredResults = results.filter(_.invoice == "-")
Scala
![Page 21: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/21.jpg)
어떻게 팀에 도입을? .map()
var pKeys = ['12ABcd34', '3AD893NV', 'ab89ceab'];
pKeys = pKeys.map(function(pKey) {
return pKey.toUpperCase();
});
javascript
![Page 22: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/22.jpg)
어떻게 팀에 도입을? .map()
val pKeys = List("12ABcd34", "3AD893NV", "ab89ceab")
val capitalPKeys = pKeys.map(_.toUpperCase())
Scala
![Page 23: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/23.jpg)
어떻게 팀에 도입을? .reduce() .fold()
var results = [
{id:1, amount:15, productId:1},
{id:2, amount:17, productId:2}
];
var totalAmount = 0;
results.forEach(function(value, index) {
totalAmount += value.amount;
});
var totalAmount = results.reduce(function(acc, item) {
return acc + item.amount;
}, 0);
javascript
![Page 24: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/24.jpg)
어떻게 팀에 도입을? .reduce() .fold()
case class Result(id: Int, amount: Int, productId: Int)
val results = List(Result(1, 15, 1), Result(2, 17, 2))
val totalAmount = results.foldLeft(0)((acc, item) => acc +
item.amount)
Scala
![Page 25: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/25.jpg)
그럼 그냥 javascript를
함수형 언어처럼 쓰면 되지 않나요?
![Page 26: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/26.jpg)
왜 Scala?
함수형 프로그래밍 언어? side effect 없는 프로그래밍을 지원하고 장려하는 언어
그래서 Scala?Java라는 OOP 세상을 떠나 FP라는 순수 세상으로 다리 역할
※참고https://medium.com/@jooyunghan/어떤-프로그래밍-언어들이-함수형인가-fec1e941c47f#.i4q8rr5t8http://blog.jenkster.com/2015/12/which-programming-languages-are-functional.html
![Page 27: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/27.jpg)
스타트업 1인 개발 극복기하드웨어 스타트업의 소프트웨어 이야기
![Page 28: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/28.jpg)
시작은?
복 기
![Page 29: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/29.jpg)
조인 이전 상황은?
1차 스위처 신청 15분만에 판매 완료
2차 스위처 신청 8분만에 판매 완료
원래 잘 되고 있었어요..
![Page 30: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/30.jpg)
조인 당시 상황은?
정말?
![Page 31: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/31.jpg)
조인 당시 상황은?
이미 레거시 서버/인프라로 운영되고 있던 제조/이벤트/스위처 시스템
레거시의 모든것을 알고 계셨던 담당자의 부재
iOS 개발자 1분, Android 개발자 1분, 펌웨어 개발자 1분
나홀로 레거시 분석하고, 사고 수습해야 하는 상황
프로세스의 부재
疊疊山中
![Page 32: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/32.jpg)
개선할 문제는?
스위처 앱/서버 사용 불안정
생산/공정 자동화 부재
이벤트 신청 서버 불안정
개발환경(서버) 부재
프로세스 부재
문제의 인프라
사용중인 기능보다 미사용 기능이 더 많은 서버
...
疊疊山中
![Page 33: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/33.jpg)
제약은 없나?
몇백명 기존 유저들의 서비스 사용 유지
매월 2배씩 증가하는 유저 감안
팀원들의 수작업 제거
곧 닥쳐올 새로운 제품 R&D
...
疊疊山中
![Page 34: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/34.jpg)
그래, 다 하려고 하지 말자
![Page 35: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/35.jpg)
1차 목표
![Page 36: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/36.jpg)
2.5개월, 유저들의 불만‘만’ 없애자
![Page 37: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/37.jpg)
개선할 문제는?
스위처 앱/서버 사용 불안정
생산/공정 자동화 부재
이벤트 신청 서버 불안정
개발환경(서버) 부재
프로세스 부재
문제의 인프라
사용중인 기능보다 미사용 기능이 더 많은 서버
...
疊疊山中
![Page 38: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/38.jpg)
문제의 인프라
‘기본만 지키자’
![Page 39: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/39.jpg)
스위처/이벤트 서버
고민1. 설계부터 변경할 것인가?고민2. 레거시를 재활용 할 것인가?고민3. 어떤 기능부터 (재)개발할 것인가?
![Page 40: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/40.jpg)
스위처/이벤트 서버 설계부터..
● DB 테이블 중복 컬럼 난무
● 다음 제품 확장성
● 불필요한 코드 생성의 근본적 원인
● 계속 불필요한 코드(a.k.a. 똥) 누적
● 변경 규모가 (아직) 크지 않음
● 사용자가 (아직) 많지 않음
● 기존 코드 로직 변경
● 사용 중인 기능에 대한 리스크
변경할 이유 변경하지 말아야할 이유
![Page 41: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/41.jpg)
스위처/이벤트 서버 레거시를..
● 기본 템플릿 재활용 가능 ● 설계 변경으로 로직 변경 발생
● 리팩토링 시간 > 새로 구현
● 불필요한 코드 난무
○ 테스트용 코드 (테스트 코드X)
○ 기능하지 않는 코드
재활용 할 이유 재활용 하지 말아야할 이유
![Page 42: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/42.jpg)
스위처/이벤트 서버 어떤 기능부터..
당연히,
고객님들이 사용하고 있는 기능진짜로
![Page 43: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/43.jpg)
스위처/이벤트 서버 어떤 기능부터..
개발된 기능
개발되었지만
기능하지 않는 기능(?)
고객들이
실제 사용중인 기능
CS 문의가
많은 (아직없는)기능
![Page 44: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/44.jpg)
선택과 집중으로
무사히 1차 목표 달성!
![Page 45: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/45.jpg)
2차 목표, 2.5개월
‘제조/공정’‘어드민’자동화로
멤버들의 수작업을 줄이자
![Page 46: track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, 박미정](https://reader033.vdocuments.net/reader033/viewer/2022042517/58a190051a28ab97118b49dd/html5/thumbnails/46.jpg)
2차 목표 달성으로
현재 5,000명의 고객을 확보!