공부를 시작하게 된 이유

클라이언트와 소통시, 불필요한 데이터를 주고 받을 경우가 생기는 것에 대해서 해결할 수 있는 방법을 모색하다가 GraphQL에 대한 기술에 흥미가 생기기 시작했습니다. 항상 데이터를 주고받을때마다 불필요한 데이터를 삭제하기 위해서 새로운 Response 데이터를 생성하여 리턴하는 구조에 대해서 불편함을 느꼈고, 이를 해결할 수 있는 방법이 무엇이 있을까 고민하다가 해당 강의를 찾게 되었고, 2025년 2월 기준 OTT 점유울 시장의 압도적인 1위인 Netflix 라는 기사를 보게 되었고, Netflix가 대용량 트래픽을 어떻게 처리하는지에 대해서 궁금증을 갖게 되어 해당 강의를 시청하게 되었습니다.

Netflix DGS의 기능

1~8번만 강의에서 다룰 내용

  1. 어노테이션 기반 프로그래밍
  2. 테스트 프레임 워크
  3. 코드 생성기
  4. GraphQL Subscription
  5. 파일 업로드
  6. 에러 핸들링
  7. Java용 GraphQL 클라이언트
  8. 모니터링 및 트래이싱
  9. GraphQL Federation과의 수윈 통합
  10. 인터페이스/유니온 타입에 대한 자동 지원
  11. Spring Security와의 통합

GraphQL 서버 개발 시 접근 방식

권장 ( 스미카 우선 개발 )

  1. 스키마 우선 개발
    • 정의 : 스키마 파일을 생성하고, 스키마 언어를 사용해서 API의 스키마를 수동으로 정의
    • 스키마 중심 개발의 강점
    • 명시적 정의를 통한 API 구조 파악
    • 설계의 일관성을 유지할 수 있다.
    • 개발 생산성 및 신뢰성 증가. ( Swagger Code Generator, 자동 문서화 등이 스키마 기반으로 작동 )
    • 변경 사항 비교가 용이하다.
    • MSA 환경인 Federated GraphQL에서는 여러 팀의 협업해야 하므로 스키마 변경을 명확히 이해하고 추적하는데 용이하다
  2. 코드 우선 개발
    • 스키마 파일 없이 스키마를 자바나 코틀린 언어로 작성하고, 런타임에 생성

1강 프로젝트 생성

  1. 프로젝트 생성 시, Netflix DGS와 Spring Web을 Dependency에 추가하여 프로젝트를 생성한다.
  2. build.gradle.kts 파일에 Kotlin일 경우 allOpen에 annotation(“jakarta.persistence.Entity”)를 추가한다.
    • 코틀린에서 해당 설정을 해두지 않으면 LAZY 로딩을 설정해놓은 경우 연관관계가 정상적으로 작동하지 않을 수 있다. (필수)
  3. resources 하위에 schema 디렉토리를 생성한다.
  4. Schema 파일 생성 전 색인 생성을 위해 IntelliJ 마켓플레이스에서 DGS를 추가해준다.
  5. Schema에 schema.graphqls 파일을 생성 한 후, 스키마를 생성합니다.
  6. 이후에 Client 도구인 Altair를 이용하여 localhost:8080/graphql 을 입력한 후 Reload DOGS를 입력하면 생성된 Schema를 확인할 수 있습니다.

altairImg

  1. GraphQL voyager 에 접속하셔서 Schema 파일을 복사 한 후, CHANGE SCHEMA -> SQL에 복사한 schema.graphql을 입력하면 아래와 같이 구조를 알 수 있습니다.


궁금증과 느낀점

  1. GraphQL voyager가 ERD를 대체할 수 있는 것인지에 대해서 의문을 갖게 되었다.
  2. 프론트 개발자의 입장에서 새로운 기술인 GraphQL 요청에 대해서 새로운 구조를 작성해야 하는지? 또는 불편하게 느끼지 않을지?..

출처 : Burger님의 인프런 강의를 보고 공부한 내용을 기록합니다.
깃허브 : 1강 넷플릭스 DGS 프로젝트 생성