b2b marketing org design - play.node...

43
함수형 프로그래밍 라이브러리 Ramda.js와 함께하는 간단 API 서버 만들기 한현섭 ([email protected])

Upload: others

Post on 01-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍라이브러리

Ramda.js와함께하는간단 API 서버만들기

한현섭 ([email protected])

Page 2: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

발표자소개

•현 TELEPASEE 개발자

•어쩌다 보니 처음 배우려고 한프로그래밍 언어가…

•OOP, 함수형 다 시도해 해볼 수 있는 JavaScript가너무 좋습니다. (node.js 만세)

• But… 뭔 소린지 몰라서 결국 열혈C 부터 하게 됨

Page 3: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍

Page 4: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

잠깐…

•Arrow Function

x => x * 2

function (x) {return x * 2;

}

= (x) => (x * 2)

(x) => { return x * 2;}

Page 5: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍특징 – 순수함수

•Pure Function

Page 6: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍특징 – 일급함수

•First-Class Function

Page 7: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍특징

•Persistent Immutable Data

•영속적이고 불변한 데이터

Page 8: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍특징

Page 9: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍특징

f ∘ 𝑔 ∘ ℎ (𝑥)

f(𝑥) 𝑔(𝑥) ℎ(𝑥)

Page 10: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

함수형프로그래밍

•더 나은 강의들

•Functional Programming Principles in Scala• https://www.coursera.org/learn/progfun1

•자바스크립트로 알아보는 함수형 프로그래밍• https://www.inflearn.com/course/함수형-프로그래밍

Page 11: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

오늘의 Library

Ramdahttp://ramdajs.com/

Page 12: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Ramda

Page 13: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Ramda

Maintenance문제도 있고…

성능향상을시켜보자underscore로는제대로된함수형코딩이어렵다!

좀더함수형코딩스타일을지원하자

lodash/fp

Ramda

Page 14: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Ramda vs

> R.map( x => x * 2, [1, 2, 3] );

> [2, 4, 6]

> _.map( [1, 2, 3], x => x * 2 );

> [2, 4, 6]

Page 15: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Ramda의 함수들은 모두 자동적으로 Curry 됩니다.

Page 16: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE
Page 17: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

와 함께하는 간단 API

간단한 채팅 REST API Spec.

Page 18: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

와 함께하는 간단 API

우선 서버를 설정합시다.

위와 같이 패키지들을 설치해주시고

Page 19: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

r_exam/router.js

Router GET /messages | POST /message

Page 20: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator GET /messages

Page 21: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator POST /message

Page 22: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator Refactoring

Page 23: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator Refactoring

Page 24: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator Refactoring

Page 25: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.path

Page 26: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.path

Page 27: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.isNil

Page 28: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.isNil

Page 29: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.compose

Page 30: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.compose

f 𝑔 ℎ 𝑥 = f ∘ 𝑔 ∘ ℎ (𝑥)

Page 31: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.compose

Page 32: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.last

Page 33: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator with

Page 34: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.curry

Page 35: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.curry

Page 36: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Curried

Page 37: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.allPass

Page 38: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

R.allPass

Page 39: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Validator POST /message

Page 40: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Try Ramda – Ramda REPL

Page 41: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Try Ramda – 이럴때 좋아요.

•아래는 모두 실 사용예입니다.

•문자열 합칠 때

•중첩배열을 다루는 스크립트 짤 때

•함수형으로 짜다가 디버깅 할 때

•Doc내용이 뭔 소린지 도통 모를 때

Page 42: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE

Ramda Cookbook

Page 43: B2B Marketing Org Design - play.node 2017playnode.io/2017/slides/RAMDA_HAN.pdfRamda.js와함께하는간단API 서버만들기 한현섭(han@telepasee.com) 발표자소개 •현TELEPASEE