sdy

add new error case

......@@ -66,4 +66,70 @@ React Hook 을 사용할 때는 몇가지 규칙이 있다.
(참고 : https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level)
가장 기본적으로 hook 은 어떤 조건문 이나, 반복문 등 에서 사용되선 안된다.
어떤 함수 내부적으로 소속된 형식에서 hook 을 쓰는 것이 아닌 hook 은 항상 top-level 에 존재해야한다.
\ No newline at end of file
어떤 함수 내부적으로 소속된 형식에서 hook 을 쓰는 것이 아닌 hook 은 항상 top-level 에 존재해야한다.
- 5. WS 과 HTTP
GraphQL Yoga 에는 자체적인 Websocket 기능과 HTTP 기능이 동시에 들어 있다
그래서 GraphQL Yoga 를 통해서 BE Server 를 테스트 할때,
별도의 설정을 하지 않아도 쿼리 구문만 잘 작성하면 Subscription 이 별 문제없이 실행되었다.
그러나 FE Server 와 BE 를 통합시킬때는 다르다.
FE 는 이 프로젝트에서 React 만을 사용하였기 때문에, 자체적인 WS 기능이 없다
그래서 Apollo 를 통해서 React 와 BE 가 서로 연결되어야 한다
하지만, BE 는 이 프로젝트에서 두 가지 네트워크 (WS, HTTP) 를 동시에 가지기 때문에,
Apollo-boost 에서 제공하는 Apollo-Client 만으로는 이 두개를 동시에 커버하기 어렵다.
(Apollo-Boost 의 Client 는 link 에 대한 설정 값이 없다,
좀 더 low-level 로 접근 해야 하기 때문에 Apollo-Client 모듈에서 불러와야 한다.
참조 : https://www.apollographql.com/docs/react/migrating/boost-migration/)
그래서, apollo-boost 대신에 apollo-client 모듈로 접근을 해야 하며,
이 프로젝트에서 고려해야할 옵션 사항으로는
1. 캐시 메모리를 사용하는 것
2. Request Header 를 사용할 수 있어야 하는 것.
3. link 값을 부여해줄 수 있어야 하는것
4. client State 를 사용할 수 있어야 하는 것
을 선정할 수 있다.
캐시 메모리는
import { InMemoryCache } from "apollo-cache-inmemory";
이 모듈로 해결하고
Header 는
const request = async (operation) => {
const token = await AsyncStorage.getItem('token');
operation.setContext({
headers: {
authorization: token
}
});
};
로 잡아주고
3. link 값은
const httpLink = new HttpLink({
uri: "http://localhost:4000/",
});
const wsLink = new WebSocketLink({
uri: "ws://localhost:4000/",
options: {
reconnect: true,
},
});
const terminatingLink = split(
({ query: { definitions } }) =>
definitions.some((node) => {
const { kind, operation } = node;
return kind === "OperationDefinition" && operation === "subscription";
}),
wsLink,
httpLink
);
값으로 처리하며,
4. 마지막 client state 는
import { withClientState } from 'apollo-link-state';
모듈을 이용한다.
......