[GraphQL] Subscription: Realtime, 양방향 통신 서버
요즘 웹사이트 이용하다보면, Socket 통신이 요즘 트렌드 인것 같다. 익숙해져서 일까? GraphQL공부할겸, Todo list를 만드는데,새로고침 해야지만 업데이트가 반영되는 것이 눈에 영 거슬리고, 지나칠 수가 없다. 서버에서 클라이언트로 메시지를 보내기 위해서,GraphQL의 Subscription 이라는 섹션 을 공부했다. 과거에, nodeJS에서는 채팅서버 구현해서, 서비스 해본적이 있었는데,또 다른 library를 쓰니깐, 용어부터, 참 새롭다 Express, Socket.io 조합 에서는 이벤트 리스너를 등록하고, 서버에서 이벤트를 발생시킬 수도 있어서, 직관적이었고, 사용하기 쉬웠다. 그런데, ApolloQL에서는, 서버에서 어떻게 클라이언트로 이벤트를 날리겠다는 건지, 메카니즘이..
2024. 9. 12.
[GraphQL] Link와 Middleware에 대해서
GraphQL을 공부하는 중에, 좀 많이 헤맸다.NodeJS 라던가, Spring이라던가, 내가 일반적으로 접해본, 프레임워크랑 생리가 많이 달라서,진도가 많이 안나갔다.특히, Error 메시지가 분명히 클라이언트로 전달되고 있는 것을 확인하는데, (network tab에서도)비동기 통신을 실행하고 있는 코드까지, 오질 않았다. (참고 https://scribbler-jimmy.tistory.com/60)중간에 Error 메시지가 변경되고 있었는데, 이런 경험은 또 처음해보는 터라 많이 당황했다.그러던 중, 이미 GraphQL문서에, 이러한 상황을 다루는 효과적인 API 들이 있음을 알게되었다. Links최종 endPoint까지 가기 전에, 중간단계에서 필요한 Logic이 실행되는 Middleware ..
2024. 8. 27.
[GraphQL] Error handling, 서버 Response는 array 인데, 클라이언트에선 다른 응답을 받을 때
GraphQL을 공부하고 있는데,Authorization 을 위한, 미들웨어를 달고 있다.쿠키에, JWT 토큰을 검증하는 미들웨어를 달았는데,Error 가 Client레벨에서, 타입이 계속 바뀐다. (Error Type으로 출력이 됨, console에서) 나는, 클라이언트에서 status code 가 401 으로 나올 때, Not Authorized 처리를 하고 싶은 건데,이렇게 나오니, 분기를 할수가 없다. 무슨 이야기인고 하니,산 너머 산인듯처음에는, 구글 Oauth2를 GraphQL 에서 사용해보려고 삽질했는데,넘어오니까, 생각치도 못한 곳에서 에러를 발견하게 된다. ------해결 문제의 해결은, 클라이언트랑, 서버랑 연결할 때 ApolloClient 객체에, link를 설정해주면 됨.apol..
2024. 8. 9.
[nodejs] sequelize, 커스텀 외래키, 다대다 관계 설정
다대다 관계(Many to Many)를 설정해 주기 위해서 모델 클래스 내부에 있는 belongsToMany(Model, Option)을 사용하면 된다. Option 에는, through 옵션을 사용해서 junction Table을 지정해주어야 한다. 같은 테이블을 ManyToMany로 쓴다면, as 옵션을 통해서, Allias 를 주어야 한다. 인터프리터/컴파일러가 다른 테이블로 식별할 수 있도록 예) user 를 sender와 receiver로 Mail이라는 junction table에 넣고 싶은 경우, OnDelete, OnUpdate등의 옵션을 통해서, 참조하고 있는 필드가 삭제된 경우에 대해 대응 할 수 있다 (REGISTRICT, CASCADE, SET NULL )module.exports =..
2021. 8. 12.
typescript, node.js ,express 서버사이드 환경설정[2020.12.06]
1. express, @types/express 모듈, typescript, typescript config 생성 create express, @types/express modules, typescript and typescript config $ npm init -y && npm express @types/express typescript && tsc --init; 2. 개발폴더 src, 배포폴더 dist 생성 create src folder for resources and dist folder for diployed files $ mkdir dist && mkdir src 3. src/index.ts, src/Main.ts 생성 후, 내용 채워넣는다. create src/index.ts and src..
2020. 12. 6.