전체 글
-
Parameter Decorator추가graphst프로젝트 2023. 8. 14. 21:18
graphst를 쓰는데 한 가지 불편한 점이 있었습니다. @FieldResolver({ parent: () => Comment, returnType: () => GraphQLNonNull(GraphQLBoolean), }) isMyComment(post: Comment, _: null, context: AuthContext): boolean { if (!context.auth) { return false; } return post.userId === `${context.auth.id}`; } @Query({ returnType: () => GraphQLNonNull(getObjectSchema(User)), }) async getUser(_: null, __: null, context: VerifiedA..
-
API서버 배포하기(Docker + Aws + Github)graphst프로젝트 2023. 8. 11. 19:16
※ 리눅스 EC2 인스턴스가 준비되어 있다는 가정하에 작성되었습니다. 이제 코드를 다 짰으니 접근할 수 있게 서버를 띄워야겠죠 AWS에서 제공하는 EC2 인스턴스를 사용할 겁니다. EC2 인스턴스 관련 포스팅은 워낙 양이 방대하니 제가 설명하는 것보단 월씬 양질의 정보를 얻을 수 있을 테니 따로 다루진 않겠습니다. 일단 인스턴스를 연결하고 시작하겠습니다. aws에서 연결할 수 있게 친절하게 알려줄 겁니다. ssh -i "graphst.pem" .amazonaws.com Docker Install 인스턴스에 docker를 설치해 줄 겁니다. EC2에 docker를 설치하는 방법 또한 조금만 검색해 보면 많이 나오니 apt에 도커 레포지토리를 설정해서 docker를 설치하고 와주세요. Github Actio..
-
graphst를 사용한 API서버(graphst-api)와 리펙토링graphst프로젝트 2023. 8. 10. 19:43
이번 포스팅에선 graphst를 사용해 만든 API에서 graphst를 어떤 식으로 활용해야 할지 살펴보고 graphst를 사용해 리펙토링까지 해보는 시간까지 가져보겠습니다. 자세한 코드는 github를 참고해주세요 import { GraphstServer } from 'graphst'; import { DataSource } from 'typeorm'; import { UserResolver } from './user/resolver/user.resolver'; import { JwtMiddleware } from './jwt/jwt.middleware'; const dataSource = new DataSource({ ... }); dataSource .initialize() .then(() => {..
-
schema, resolver 자동생성 (2) ...또 Circulargraphst프로젝트 2023. 8. 9. 19:36
저번 포스팅에 이어 schema를 만드는 코드를 살펴보겠습니다. 🤚아래 코드는 이해를 위해 아주아주 간략화된 코드로 실제코드와 많이 다릅니다. 원리는 같아요. 실제코드 // @ObjectType을 사용해 저장된 모든 값을 불러옵니다. const objects = this.storage.getObjectTypeAll(); objects.forEach(({ target, name }) => { // @FieldResolver를 사용해 부모가 target인 모든 데이터를 가져옴 const fieldResolverProps = this.storage.getFieldResolver(target) const fieldProps = this.storage.getResolver(target) // getSchema를 ..
-
schema, resolver 자동생성 (1)graphst프로젝트 2023. 8. 9. 16:15
이번 포스팅에선 지난 포스팅에서 살펴본 데코레이터로 수집한 데이터를 이용해 schema와 resolver를 생성해 주는 코드를 살펴보겠습니다. Resolver getMethod(props: Omit[]) { const resolverMethods: { [key: string]: Function } = {}; props.forEach(({ name, fn, middlewares }) => { const methodName = typeof name === 'symbol' ? name.toString() : name; if (fn) { resolverMethods[methodName] = ( parent: any, args: any, context: any, info: any ) => middlewareExe..
-
graphst decorator 살펴보기graphst프로젝트 2023. 8. 8. 00:32
이전 포스팅에선 컨테이너를 만드는 코드를 살펴봤습니다. 이번 포스팅에선 데코레이터를 사용해 schema와 resolver를 자동으로 생성해 주는 코드를 살펴보기 전에 graphst에서 사용하는 데코레이터의 사용법을 간단히 확인하겠습니다. 들어가기 전에... graphql엔진 은 gql요청을 해석후 schema와 대조해 해당 schema와 쌍을 이루는 resolver 메서드를 호출합니다. req.on('end', async () => { const { query, variables } = JSON.parse(body); const result = await graphql( graphqlSchema, query, null, context, variables ); ... res.end(JSON.stringif..
-
graphql 프레임워크 개발기(Container)graphst프로젝트 2023. 8. 7. 21:27
1년 만에 포스팅입니다. 그동안은 회사를 다니느라(변명입니다.) 블로그를 방치했지만 최근에 만든 프레임워크를 공유하고 싶어 글을 씁니다. 만들게 된 계기? 이전에 nest.js를 주제로 스터디를 했었는데 회사에서 쓰는 건 아니지만 개인적으로 API를 만든다고 한다면 nest.js 쓰고 있어서 대강 사용방법은 알고 있었습니다. 스터디에선 nest를 직접 뜯어서 내부 구현을 탐구하는 방식으로 진행했는데 코드가 너무 복잡하고 왜 이렇게 구현해야 했을까... 싶은 생각이 들어 직접 구현해 보면 제작자의 의도를 알 수 있을 듯했습니다. Nestjs는 Restfull, Graphql둘다 지원하지만 Yoga, TypeGraphql같은 Graphql Server Framework를 목표로 만들었습니다. 해당 프로젝트는..
-
비동기적 배열추가 오류 해결(크롬개발자도구)FRONT 2022. 2. 14. 18:31
오류 카테고리에 넣을지 프론트 카테고리에 넣을지 고민을 해봤지만 좀더 자바스크립트의 근본적인 문제를 다루게 될 것 같아 프론트 카테고리에 작성한다 토이프로젝트의 장바구니를 구현하고 있을 때 발생한 오류로 세부페이지에서 제품을 추가하면 장바구니 리듀서에 담긴후 장바구니 페이지에서 리듀서에 담긴 배열들을 map함수로 돌아 api에 값을 요청해서 제품리스트를 가져오는 그런 로직을 만들고 있었다. const getchDetailProduct = async (basketItem: BasketReducerPropType, i: number) => { await axios .get(`http://localhost:3000/api/detailProduct/${basketItem.product_id}`) .then((r..