Node Developer Connect

Play Node 발표내용 정리

playnode

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 요청
{
me {
name: ,
company:
}
}

// 응답
{
me {
name: "김세준",
company: "학생"
}
}

// 해당유저의 정보만 요청가능하다
{
{
user(id=1) {
name: "김세준",
company: "학생"
}
}
}

Post /graphql을 통해 여러개의 component를 1개로 보내준다.

GraphQL은 강력한 TypeSystem으로 적용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 형태
type Query {
cart: Cart
}
type Cart {
products: [product] !
shippingAddess: String!
}
type Product {
imageUrl: String!,
description: String!
}

// 요청

{
{
cart
}
}

Mutation 기존의 것을 변형해서 가져온다.

Mutation

1
2
3
4
5
6
7
8
9
10
11
mutation {
createProduct({
input: {
desciption: "clothes"
}
})
}{
price {
product
}
} => client가 원하는 데이터

GraphQL의 최대의 강점은 Client가 원하는 값을 딱 그정도만 준다. 단 서버단에서 미리 맞춰야한다.

Relay : passing 역할을 합니다.

Client가 요청한 데이터를 중간에 Relay가 가로챈다

Relay의 요구사항
특정한 id에 대해 요청을 하고 그에대한 응답을 해야합니다.

Serverless

Functions이 핵심 기능이다. input은 event이다.

  1. 서버관리의 모든걸 클라우드에게 맡기자
  2. 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 작성된 부하 테스트 도구

Share