일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
- API문서화
- circuitbreaker
- SpringBoot
- 좋은코드란
- Java
- 마이크로서비스패턴
- cannot import name
- 일급함수
- 객체비교
- 컨트리뷰팅
- bulk_create
- 함수형프로그래밍
- IOC
- Spring
- Npoem
- 운영체제
- n poem
- GraphQL
- resilience4j
- 주니어개발자
- Not Null constraint failed
- circular dependency
- 2차원배열 정렬
- 상속모델
- 토이프로젝트
- django
- 프로젝트설정
- bean-validator
- DI
- 쿼리셋합치기
- Today
- Total
코딩 하는 가든
springboot + graphql 시작하기(2) - graphql 스키마 작성하기 본문
[n poem]springboot + graphql
이전글 에서 프로젝트의 구조에 대해서 살펴보았다.
다시 복습을 해보자면 프로젝트는 크게 Domain / Service / Resolver 의 세 패키지 단위로 나뉘며 요청이 들어왔을 때 Resolver의 어느 메소드를 호출할 것인지는 미리 정해놓은 Schema에 의해서 결정이 된다. 이번에는 이 Schema를 어떻게 정의하는지에 대해 알아보겠다.
우선 스키마는 resources/graphql 디렉토리 안에 *.graphqls 라는 확장자로 파일을 만들어 작성해야 한다.
우리는 크게 오브젝트에 관한 스키마, 쿼리 요청에 대한 스키마, 뮤테이션 요청에 대한 스키마를 작성 할 것이다.
아래와 같은 Poem이라는 Entity가 있다고 가정 하자. (아래 엔터티는 실제 N poem 프로젝트 중 poem의 초기 구조)
@Entity
public class Poem{
// 생성자는 생략
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "word_id", nullable = false, updatable = false)
private Word word;
private String content;
private Double timeSpent;
}
오브젝트의 스키마는 아래와 같이 작성 한다.
type 클래스명 {
멤버변수명 : 리턴타입
}
위 규칙에 따라 작성한 Poem의 스키마는 아래와 같다.
type Poem {
id: ID!, // ! 키워드는 이 필드가 non-nullable 한 것을 나타낸다.
word: Word!, // 한 필드는 또다른 타입을 리턴 할 수 있다.
content: String!,
timeSpent: Float! // graphql의 타입엔 Double이 없다. 멤버변수가 double형이어도 Float 라고 타입을 작성 해 주도록 하자
}
Query 요청에 대한 스키마는 아래와 같이 작성한다.
type Query {
호출할 메소드 : 리턴타입
}
type Query {
poems: [Poem] // resolver의 poems 라는 메소드를 찾아 호출 한다. 리턴 타입은 Poem 타입의 리스트 형태이다.
}
Query의 요청은 아래와 같이 보낸다.
query{
메소드명{
가져올 데이터
}
}
위 poems 메소드는 아래와 같이 호출할 수 있다.
Mutation 요청에 대한 스키마는 아래와 같이 작성한다.
type Mutation {
호출할 메소드(파라미터명: 파라미터 타입) : 리턴타입 // 파라미터가 객체단위일 경우 스키마를 따로 정의 해줘야 한다.
}
type Mutation {
// Mutaion resolver의 writePoem 메소드를 호출한다.
// writePoem메소드의 인자로는 PoemSaveRequestDto 타입을 넘겨준다.
// writePoem의 결과는 엔터티의 ID를 반환한다.
writePoem(entitySaveDto: PoemSaveRequestDto!): ID!
// Mutaion resolver의 registerWord 메소드를 호출한다.
// registerWord 인자로는 WordSaveRequestDto 타입을 넘겨준다.
// registerWord 결과는 엔터티의 ID를 반환한다.
registerWord(entitySaveDto: WordSaveRequestDto!): ID!
}
Mutaion의 요청은 아래와 같이 보낸다.
mutation 메소드명(value : 타입){
메소드명(스키마에 정의한 인자 이름 : value)
}
"value": {
"파라미터 스키마 타입의 필드": "값"
}
Graphql에서 Mutation에 파라미터로 객체 (Dto같은...)를 넘길 때에는 그 객체에 대한 스키마도 정의 해 주어야 한다.
input 파라미터타입 {
필드명: 타입
}
위 registerWord에 넘겨준 WordSaveRequestDto는 아래의 스키마에 의해 정의된 타입이다.
input WordSaveRequestDto{
text: String!
}
이번에는 간단하게 그래프큐엘의 스키마를 어떻게 작성하는지에 대해 보았고 본격적으로 서비스 로직에 의해 요청을 보내면 응답이 어떻게 오는지는 다음 글에서 비교해 보도록 하겠다.
'프로젝트 > N poem' 카테고리의 다른 글
springboot + graphql 시작하기(1) - 프로젝트 구조에 대해 알아보기 (0) | 2020.05.13 |
---|---|
spring boot + graphql 프로젝트 설정 해보기 (0) | 2020.04.26 |
GITHUB protected branch를 설정 해 보자 (0) | 2020.04.25 |
시작 N poem 프로젝트 (0) | 2020.04.24 |