Graphql은 페이스북에서 만든 쿼리 언어입니다.웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적입니다.클라이언트 시스템에서 작성하고 호출합니다.
REST API는 URL, METHOD등을 조합하기 때문에 다양한 Endpoint가 존재 합니다.반면, graphql은 단 하나의 Endpoint가 존재 합니다.또한, graphql API에서는 불러오는 데이터의 종류를 쿼리 조합을 통해서 결정 합니다.예를 들면, REST API에서는 각 Endpoint마다 데이터베이스 SQL 쿼리가 달라지는 반면, graphql API는 graphql 스키마의 타입마다 데이터베이스 SQL 쿼리가 달라집니다.
testImplementation group: 'com.h2database', name: 'h2', version: '1.4.200' // 예제 database로 활용
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.4.3'
implementation group: 'com.graphql-java-kickstart', name: 'graphql-spring-boot-starter', version: '11.0.0'
implementation group: 'com.graphql-java-kickstart', name: 'graphql-java-tools', version: '11.0.0'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
spring boot 설정 추가(application.yml or application.properties)
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driverClassName: org.h2.Driver
hikari:
maximum-pool-size: 24
h2:
console:
enabled: true
jpa:
generate-ddl: true
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
format_sql: true
show-sql: true
graphql:
servlet:
enabled: true
mapping: /graphql
corsEnabled: false
cors:
allowed-origins: <http://localhost:8080>
allowed-methods: GET, HEAD, POST, PATCH
exception-handlers-enabled: true
context-setting: PER_REQUEST_WITH_INSTRUMENTATION
async-mode-enabled: true
tools:
schema-location-pattern: "**/*.graphqls"
introspection-enabled: true
Member와 Role의 도메인과 해당 데이터를 채워주는 data를 만듭니다.
@Builder
@Entity
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String loginId;
private String password;
private String name;
@OneToMany
@JoinColumn(name = "memberId", referencedColumnName = "id", insertable = false, updatable = false)
private List<Role> role;
}