1. 개요

1.1. 목적

  • 간단한 실습 방법을 제시하여 GraphQL을 Java 환경에서 경험해 볼 수 있도록 합니다.

1.2. 독자

  • SW 개발자

1.3. 참고 문서

2. 실습 환경

2.1. 시스템 정보

서버: Ubuntu 20.04 LTS

  • OpenJDK 11
  • GraphQL Java 실습 예제

클라이언트: Windows 10

  • GraphQL Playground

2.2. 소프트웨어 설치

2.2.1. OpenJDK 11

1) 아래 명령을 실행하여 OpenJDK 11을 설치합니다.

2.2.2. GraphQL Java 실습 예제

1) 아래 명령을 실행하여 실습 예제를 복제합니다.

2.2.3. GraphQL Playground

1) …


Airbnb convention을 참고했습니다.

0. 기본 명명 규칙

  • 객체, 함수, 인스턴스는 camelCase
  • 클래스, 생성자는 PascalCase
  • 참조를 this에 저장하지말고 화살표함수나 bind 함수를 사용합시다.
// bad 
function foo() {
const self = this;
return function () {
console.log(self);
};
}
// bad
function foo() {
const that = this;
return function () {
console.log(that);
};
}
// good
function foo() {
re …


GraphQL의 기본타입들을 설명하기 전에 Spring Boot와 어떻게 연결되는지 대략 파악하면 이 문법을 어디서, 어떤 목적으로 쓰는지 명확히 알 수 있을 것 같습니다.

GraphQL과 Spring Boot

기존 API에서는 요청이 들어오면 url이 해당 Controller에 매핑되어 요청을 처리했습니다.

그러나 graphQL을 사용한 API에선 Controller가 사라지고 대신 모든 요청이 하나의 endpoint(“/graphql”)로 통일되면서 약속한 문법에 따른 요청을 (controller대신) Resolver에서 처리합니다.

이때 약속한 문법에 해당되는 것이 graphQL이며 적용되는 변화는

  • BE에서 요청 받는 controller부분
  • FE에서 요 …


GraphQL 이란 ?

  • 페이스북에서 개발하여 발표한 “API를 위한 쿼리 언어”

→ GraphQL은 API에 있는 데이터에 대해서 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공합니다.

핵심 : 클라이언트가 직접 어떤데이터가 필요한지 명시할 수 있도록 합니다

탄생 배경 (REST API 와 비교)

  • OverFetching

기존의 REST API를 사용할 경우 클라이언트는 불필요한 정보를 전달받는 문제점이 있었습니다.

가령 MemberList 중 id 만을 필요로 한다면 API를 새로 생성하거나 List를 받은 후 2차 가공을 해야하는 불필요한 작업 시간이 낭비되었습니다.

graphQL은 클라이언트 측에서 받고싶은 데이터만을 정의하므로 이러한 OverF …


Google style guide를 참고한 code convention입니다.

0. 명명규칙

  • 클래스 (PascalCase)
    - ex: AuthController.java
    - implementation: Interface를 구현하는 클래스는 interface이름+Impl을 규칙으로 함
  • 메소드 (camelCase)
    - 기능적 행위보단 달성하려는 목적을 나타내도록 명명(그래야 목적 달성을 위해 부족한 부분이 좀 한 눈에 보일 것 같습니다)
    ex: findAndUpdateUserPointByUserId → updateUserPoint
    - 맥락상 행위의 대상이 명확한 경우 대상 클래스 이름은 포함하지 말 것.
    ex: UserService.class …


API 서비스를 개발하고 이에 대한 접근 권한을 제어하기 위하여 JSON Web Token(JWT)을 활용할 수 있습니다. 이 문서에서는 JWT 토큰의 생성과 유효성 확인 과정을 그림과 Python 코드를 사용하여 설명합니다. 전자서명 알고리즘으로는 HS256을 사용하였습니다.

토큰 생성

토큰 유효성 확인


환자 질병 유무 데이터가 주어질 때 환자별로 스피너를 시행하고 그 결과에 따라 질병 유무를 그대로 기록하거나 반대로 기록하여 공개합니다.

이 문서에서는 공개 데이터로부터 그것을 얻게 될 가능성이 가장 높은 원본 데이터가 무엇인지 추정하고 가능성의 정도를 정량화하여 제시합니다.

1. 공개 데이터

어떤 원본 데이터에 대하여 환자별로 스피너를 시행하고 데이터를 처리한 결과를 공개합니다.


환자 질병 유무 데이터가 주어질 때 환자별로 스피너를 시행하고 그 결과에 따라 질병 유무를 그대로 기록하거나 반대로 기록합니다.

이 문서에서는 스피너 시행으로 발생할 수 있는 모든 경우에 대하여 데이터 처리를 하고 질병 보유 환자 수가 어떻게 달라지는지 살펴봅니다. 그리고 스피너의 밝은 부분이 차지하는 비율이 50%가 아니라는 점이 질병 보유 환자 수에 어떤 영향을 미치는지에 대해서 확률을 계산하여 제시합니다.

1. 원본 데이터 준비


1. 소개

환자 질병 유무 데이터에 불확실성을 추가하여 공개함으로써 개별 환자의 질병 유무 확정을 어렵게 만들 수 있습니다.

예를 들어 어떤 병원이 데이터 분석을 목적으로 10000명의 환자 데이터세트를 만들 때 무작위로 약 1000명을 선택하고 그들의 질병 유무를 반대로 바꾼다고 생각해 봅시다. 변경된 데이터세트와 함께 무작위 선택 방법도 공개하지만 어떤 환자의 질병 유무를 바꾸었는지는 공개하지 않습니다. 이로 인해 공개된 데이터세트만을 가지고서는 특정 환자의 질병 유무를 100% 확신할 수 없게 됩니다.

이러한 특성을 가지는 데이터세트를 Differentially Private Data라고 하고 이와 같은 개인정보보호를 Dif …

SNPLab Inc.

온-디바이스 마이데이터 앱

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store