ohjinhokor / gRPC

인턴십에서 진행했던 '고객사에게 제공될 라이브러리(grpc 이용)를 만드는 과정'을 소규모 프로젝트로 재현했습니다.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

gRPC를 사용해서 고객사에게 제공할 라이브러리 만들기




인턴십에서 진행했던 '라이브러리를 만드는 과정'을 소규모 프로젝트로 재현

  • 기존 rest로 제공되던 API를 gRPC를 이용하여 제공합니다.

  • 고객사에서는 서버의 ip, port를 신경쓰지 않아도 됩니다.

   

라이브러리 목적

  • 속도

  • 고객사의 편의

  • 함수 호출의 제어권을 얻기 위함

    • ex) 제공하는 jar 파일에 캐시를 적용. 고객사에서 짧은 시간내에 동일한 요청을 여러 번 하는 경우 캐싱된 데이터를 반환하도록 하여 서버에 들어오는 Request를 줄임

   

기존 제공하던 Public API

  • 클라우드 서비스를 이용하여 서버를 배포한 상태입니다.

  • Http 헤더에 고객사 별로 제공된 key 값을 넣으면 각 고객사의 정보를 반환해주는 API입니다.

스크린샷 2022-07-15 오전 12 17 07

스크린샷 2022-07-15 오전 12 30 00

   

고객사에게 제공할 라이브러리 예시

  • 기존 제공하던 API와 같은 역할의 코드 작성 (key를 넣으면 고객사의 정보 반환)

  • 스프링에 의존적이지 않은 라이브러리를 만들기 위해 @GrpcService 어노테이션을 사용하는 대신, ip주소와 port를 하드코딩 하였습니다.

  • Channel을 직접 생성한 후 stub을 연결합니다. stub을 통해 메서드를 호출한 후 결과를 반환합니다.

  • gRPC 포트는 9090으로 했습니다.

스크린샷 2022-07-18 오후 6 14 52

   

의존성 추가 후 메서드를 호출하는 과정

  • 순서

1) 고객사에서 라이브러리 추가

스크린샷 2022-07-17 오후 8 38 46

2) 라이브러리 안에 있는 메서드 호출

스크린샷 2022-07-18 오후 6 21 54

3) postman으로 테스트

image

4) 성공!

스크린샷 2022-07-17 오후 8 42 26

   

서버 API 호출 횟수 제어(cache 이용)

<캐시 적용 전>

  • 고객사의 코드 변경(한 번에 10번의 호출)

스크린샷 2022-07-17 오후 10 06 15

  • API 호출 횟수를 체크하기 위해 서버 코드 변경

스크린샷 2022-07-17 오후 10 15 04

  • 서버 재배포 후 Test 결과 로그 확인

스크린샷 2022-07-17 오후 10 18 30

  • 수행 시간

스크린샷 2022-07-17 오후 10 08 19

<캐시 적용>

  • 라이브러리에 캐시 적용

    • 다른 라이브러리 사용을 줄이기 위해 캐시를 직접 구현했습니다
  • 코드 설명

    • 캐싱이 되어있다면 캐싱된 데이터 반환
    • 캐싱이 되어있지 않다면 캐싱 후 데이터 반환

스크린샷 2022-07-18 오후 6 55 43

  • setCache 메서드

    • 자바가 제공하는 Timer Util클래스를 이용해서 캐시 구현
    • 캐시 유효 시간 10초.

스크린샷 2022-07-18 오후 7 00 36

   

<캐시 적용 후 테스트>

  • 고객사 코드 실행

스크린샷 2022-07-18 오후 7 16 16

  • 서버 재배포 후 Test 결과 로그 확인

    • 10번의 요청 중 1번의 request만 서버로 들어온 것을 알 수 있음

스크린샷 2022-07-18 오후 7 07 15

  • 수행 시간

    • 캐시 적용 후 수행 시간 단축 : 967433000ns -> 9042ns

스크린샷 2022-07-18 오후 7 11 36

About

인턴십에서 진행했던 '고객사에게 제공될 라이브러리(grpc 이용)를 만드는 과정'을 소규모 프로젝트로 재현했습니다.


Languages

Language:Java 100.0%