Spring Micro Service with gRPC 프로젝트 설정

2021. 4. 13. 23:09Spring Micro Services/gRPC

반응형

이 프로젝트를 시작하는 이유는 기존의 Micrso Service 또는 외부 API 연동은 RESTful 방식을 많이 사용해 왔는데 얼마전 udemy 에서 gRPC강의를 들은 후 프로젝트에 적용하기 위해 시작하게 되었다.

 

강의를 들은 다음에 의문점은 실제 DB에 연동하였을때는 어떻한 성능을 보일지 궁금 하여서 이 부분에 대한 성능 검증을 할려고 한다.

서비스아키텍처 

아키텍처1

RESTful 서비스 Flow

관련 Maven Module

- order_app

- payment-rest-server

 

아키텍처2

gRPC 서비스 Flow

관련 Maven Module

- order_app

- payment-grpc-server

 

아키텍처3

gRPC With Ribbon 서비스 Flow

관련 Maven Module

- order_app

- payment-load-balance

- payment-grpc-client

- payment-grpc-server

프로젝트구조

위의 서비스 아키텍처 바탕으로 Maven Module 프로젝트생성

 

 

 

 

 

 

 

 

 

 

proto module은 proto 파일 관리 및 genereated 소스 관리

원래는 proto 파일은 클라이언트쪽에서도 동일하게 생성 해야 하지만 본 프로젝트에서는 maven module로 관리하므로 서버에서만 생성한다.

개발환경

IDE: IntelliJ IDEA 2021.1.1 (Community Version)

Java Version: 9.0.4

DBMS: PostgreSQL

 

※ http2 사용을 위해서는 java9 이상을 설치하여야만 한다. 사용하지 않은 경우는 9이하를 설치해도 괜찮다.

테이블생성

테이블은 성능테스트를 위해 간단히 주문정보를 저장하는 테이블과 결제승인정보를 저장하는 테이블 두개를 생성한다.

 

01.시퀀스생성

CREATE SEQUENCE orderm_id_seq;

 

02.orderm

DROP TABLE public.orderm;

CREATE TABLE public.orderm (
  id integer NOT NULL DEFAULT nextval('orderm_id_seq'),
  order_no character varying(15) NOT NULL, 
  order_amt bigint NOT NULL, 
  order_dtm character varying(14) NOT NULL,
  aprval_no character varying(15) NULL,
  create_dtm TIMESTAMP default now()::timestamp
)
TABLESPACE pg_default;

COMMENT ON TABLE public.orderm IS '주문';
COMMENT ON COLUMN public.orderm.id IS 'ID';
COMMENT ON COLUMN public.orderm.order_no IS '주문번호';
COMMENT ON COLUMN public.orderm.order_amt IS '주문금액';
COMMENT ON COLUMN public.orderm.order_dtm IS '주문일자';
COMMENT ON COLUMN public.orderm.aprval_no IS '승인번호';
COMMENT ON COLUMN public.orderm.create_dtm IS '생성일시';

ALTER TABLE public.orderm ADD
  CONSTRAINT orderm_pk PRIMARY KEY ( id );

 

03.payment_approval

DROP TABLE public.payment_approval;

CREATE TABLE public.payment_approval (
  aprval_no character varying(15) NOT NULL, 
  aprval_amt bigint NOT NULL, 
  aprval_dtm character varying(14) NOT NULL,
  create_dtm TIMESTAMP default now()::timestamp  
)
TABLESPACE pg_default;

COMMENT ON TABLE public.payment_approval IS '결제승인';
COMMENT ON COLUMN public.payment_approval.aprval_no IS '승인번호';
COMMENT ON COLUMN public.payment_approval.aprval_amt IS '승인금액';
COMMENT ON COLUMN public.payment_approval.aprval_dtm IS '승인일자';
COMMENT ON COLUMN public.payment_approval.create_dtm IS '생성일시';

ALTER TABLE public.payment_approval ADD
  CONSTRAINT payment_approval_pk PRIMARY KEY ( aprval_no );    

 

keystore 생성

http2 테스트를 위해서 keystore 파일 생성

생성명령어: keytool -genkey -alias roopy -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000

반응형

'Spring Micro Services > gRPC' 카테고리의 다른 글

gRPC VS REST 성능 테스트II  (0) 2021.05.20
proto module  (0) 2021.05.08
gRPC VS REST 성능 테스트I  (0) 2021.04.15