Play Node 발표내용 정리
GraphQL + Relay + Serverless
필요한 리소스만 요청하고 사용하는 API 만들기
장바구니 개발시 Component : cart, proudectlist, productdata 등등
단점 : 모바일에서 네트워크 콜을 4가지를 해야하는데 이것이 네트워크가 안좋을때 받기가 힘들다.
해결법 : queryString? => 장기적 개발이 힘들다.
해결법 : custom된 endpoint를 생성한다 기기별로(모바일, 웹 등등) => 여러개의 엔드포인트를 만들기에는 문제가 있다.
해결법 : BFF(soundcloud) 모바일을 위해 최적화된 endpoint를 만들어준다. => 고객마다 needs가 달라서 어렵다.
BFF? 프론트엔드를 중심으로 백엔드가 들어간다.
최고의 해결법 : GraphQL => A Query Language for API
API를 위한 질의 언어
1 | // 요청 |
Post /graphql을 통해 여러개의 component를 1개로 보내준다.
GraphQL은 강력한 TypeSystem으로 적용된다.
1 | // 형태 |
Mutation 기존의 것을 변형해서 가져온다.
Mutation
1 | mutation { |
GraphQL의 최대의 강점은 Client가 원하는 값을 딱 그정도만 준다. 단 서버단에서 미리 맞춰야한다.
Relay : passing 역할을 합니다.
Client가 요청한 데이터를 중간에 Relay가 가로챈다
Relay의 요구사항
특정한 id에 대해 요청을 하고 그에대한 응답을 해야합니다.
Serverless
Functions이 핵심 기능이다. input은 event이다.
- 서버관리의 모든걸 클라우드에게 맡기자
- Event가 발생할때만 사용하기 때문에 Price가 적어진다. => 실행시간, 메모리 소비량, 요청 횟수를 줄인다.
GrapeQL
하나의 Endpoint에 모든 CRUD, 혹은 그에 속하기 애매한 모든 행위를 담음 POST의 경우 HTTP Payload를 적극적으로 활용
application/json
application/graphql
함수형 프로그래밍
함수형 프로그래밍 특징 - 순수 함수
일급객체 = 변수에 저장할 수 있는가, 파라미터로 전달할 수 있는가, return value로 사용될 수 있을까
Persistent Immutable Data = 지속적이고 불변하는 데이터
함수형 프로그래밍이란? 데이터를 가공하는 컨베이어 벨트같은 것이다.
인프런 함수형-프로그래밍
Ramda
- 실용적인 함수형 프로그래밍 라이브러리
- Ramda의 함수들은 모두 자동적으로 Curry 됩니다.
R.isNil, R.path, R.compose(a,b,c,d)
1 | R.compose(R.isNil, R.path(["req", "query", itemName]))(httpParam); |
Node.js API 서버 성능 개선기
서버 하나의 한계 파악
병목구간 확인
코드 개선 후 비교
ARTILLERY.IO => Node.js 작성된 부하 테스트 도구