본문 바로가기

분류 전체보기

(317)
# GraphQL/GraphQL.js 아마존 AWS AppSync 시작하기 아마존 AppSync란? AWS AppSync는 아마존에서 제공하는 서버리스 GraphQL 서비스입니다. (= GraphQL As a service)아마존에서 사용되는 자원들을 쉽게 GraphQL에 부착할 수 있다는 것이 큰 장점이며,완전 관리형으로 동작하기 때문에 유지보수 비용도 크지 않습니다. 아래부터는 기본적인 GraphQL 지식이 있다는 가정하에 진행되므로,아직 GraphQL이 무엇인지 모르시는 분은 여기를 한번 살펴봐주세요. 요금 상세 GraphQL 서비스를 이용한 만큼 비용이 결정됩니다.쿼리와 뮤테이션 호출한 횟수 1백만 건당 4.00 USD 실시간 업데이트 (서브스크립션) 연결된 시간 1백만 분당 0.08 USD 수신된 자료 1백만 건당 2.00 USD ** 5kb 이하의 데이터는 1건으로 ..

2019. 12. 26. 17:29

# Tech/NodeTS 타입스크립트 런타임 타입 가드 타입 체크는 컴파일에 이루어진다. 타입스크립트의 타입 체크는 Only 컴파일 시간에 이루어집니다. 컴파일 시간에는 비교적 엄격하게 타입체크를 하는편이지만, 그 외에는 타입체크가 거의 없다시피 하기때문에, 런타임시에는 진짜 그 타입이 맞는지 체크하는 것이 어렵습니다. 이 와중에 any가 포함되면 믿었던 컴파일 타입체크도 무용지물이 되는데, 아래 코드가 오류없이 컴파일되는것만 봐도 알 수 있습니다. interface Args { n: number; s: string; } let invaildArgs: any = { num: 3, str: "str" }; let fakeArgs: Args = invaildArgs; console.log(fakeArgs.n, fakeArgs.s); 위의 코드에서 fakeArgs..

2019. 12. 17. 20:27

# GraphQL/GraphQL.js 타입스크립트 GraphQL Cursor Based Pagination 커서 기반 페이지네이션 커서 기반 페이지네이션은 각 엔티티에 고유한 커서값을 할당하고, 기준 커서값과 사이즈로 다음 페이지를 가져오는 방식입니다. 오프셋 기반 페이징은 중간에 새로운 데이터가 삽입되면, 다음 페이지를 조회했을 때, 이전에 봤던 데이터가 포함되어 있을 수 있습니다. 몇 번째 페이지에서 몇 건 방식으로 가져오기 때문입니다. 하지만 커서 기반 페이지네이션은 그 데이터 다음에서 몇 건 방식으로 가져오기 때문에, 항상 새로운 데이터만 가져옴을 확신할 수 있습니다. 시나리오 유명한 게임인 League of Legned의 캐릭터 이름이 오름차순으로 정렬되어 배열로 주어집니다. 어떤 캐릭터 이후의 몇 명을 한페이지로 가져오고, 이것을 다음 검색에도 활용하기 위해, 다음 첫번째 캐릭터를 추가적으로 반환해..

2019. 12. 16. 02:48

# GraphQL/GraphQL.js 타입스크립트 GraphQL Scalar Type 클래스 스칼라 값이란? 순수한 데이터 값을 나타내며, 프리미티브primitive 자료형과 비슷하다고 볼 수 있습니다.정수 Int문자열 String불리언 Boolean소수형 숫자 Float아이디 ID 스칼라 값을 반환하는 필드는 더 이상 쿼리를 뻗어나갈 수 없기 때문에 리프 노드leaf node라고 부릅니다. 필드가 아니라 노드인 이유는, GraphQL 쿼리가 내부적으로는 트리구조로 표현되기 때문입니다. 사용자 정의 스칼라 Custom Scalar 프로그래머는 임의의 스칼라 타입을 만들 수 있습니다. 먼저 스키마 정의 언어SDL로 표현하면 다음과 같습니다. 다만, 이대로는 사용할 수 없으며 스칼라 값을 어떻게 표현하고 어떻게 해석할건지에 대한 로직이 필요합니다. 스칼라 타입에 로직을 할당하는 방법은 언어마다 다르..

2019. 12. 15. 23:21

# GraphQL/GraphQL.js 타입스크립트 GraphQL Enum Type 클래스 열거형 열거형에 대한 기본적인 설명은 생략합니다. SDL 스펙에서는 아래처럼 열거형을 선언할 수 있지만, 값은 리졸브되지 않는다는 점에 유의해야 하며, 구현체마다 리졸브 방식이 다릅니다. 아래는 이메일 열거형 타입을 타입스크립트로 구현한 예제입니다. let MailType = new GraphQLEnumType({ name: "MAIL", values: { NAVER: { value: "@naver.com" }, GOOGLE: { value: "@gmail.com" }, DAUM: { value: "@daum.net" } } }); 열거형 타입은 GraphQLObject를 요구하는 장소에 사용될 수 있습니다. 아래는 매개변수로 사용된 예제입니다. let query = new GraphQLObjectTyp..

2019. 12. 15. 21:04

# GraphQL/GraphQL.js 타입스크립트 GraphQL 재귀호출 recursion 재귀적으로 반환할 수 있을까? 어떤 상황에서는 재귀적인recursive 반환이 필요할 수 있습니다. 아래의 시나리오를 살펴봅시다. 위의 스키마 정의 언어SDL로 표현되는 재귀적 가산기가 있습니다. add로 숫자를 더할때마다 history에 추가되고, total은 지금까지의 모든 숫자를 더해서 반환해야 합니다. 예시 출력 : 이 가산기를 어떻게 GraphQL로 표현할 수 있을까요? (ERROR) 정의되기 전에 사용하지 마세요! 평범한 방법으로 adder를 만들려고 시도하면, 십중팔구 다음과 같은 에러가 뜹니다. Block-scoped variable 'adder' used before its declaration.ts(2448) 선언이 끝나고 사용하세요. Variable 'adder' is used bef..

2019. 12. 15. 20:28

# GraphQL/GraphQL.js 타입스크립트 GraphQL Resolve Parameter 정보 Resolve 함수의 파라미터 정보 리졸브 함수의 파라미터는 다음과 같습니다.parent: any 부모 오브젝트 타입에서 반환된 객체. args : any 현재 오브젝트 타입의 args에 명시된 파라미터의 값 context : Context 오브젝트 타입들이 읽고/쓸수있는 공통객체. 대표적으로 활용되는 상황은 세션의 값. info : GraphQLResolveInfo 현재 리졸브 단계에 대한 자세한 정보가 들어있음. parent? args? 먼저 요약하자면, 현재 오브젝트 타입의 args에 명시된 내용이 args로 들어가고, 부모 오브젝트 타입이 리턴한 내용이 parent로 들어갑니다. 예시를 살펴봅시다. let book = new GraphQLObjectType({ name: "book", fields..

2019. 12. 15. 18:44

# GraphQL/GraphQL.js 타입스크립트 GraphQL Input Object Type 클래스 필드에 Args 전달하기 필드에 args 속성을 기술하면 매개변수를 사용할 수 있으며, 매개변수는 resolve에서 2번째 인자로 전달됩니다. let tuple = new GraphQLObjectType({ name: "tuple", fields: { x: { type: GraphQLString }, y: { type: GraphQLInt } } }); let query = new GraphQLObjectType({ // name pattern // ^[_a-zA-Z][_a-zA-Z0-9]*$ name: "pass_argument_query", description: "필드에 매개변수를 전달한다.", fields: { pass: { type: tuple, args: { x: { type: GraphQLS..

2019. 12. 14. 17:39