Eureka를 이용한 서버 간 통신하기 (http 통신) + Swagger로도 테스트

sua·2022년 12월 17일
0

우당탕탕 개발

목록 보기
2/3

11월 18일에 진행했던 Eureka를 이용한 http통신 과정을 작성해 보겠다.
'채삐' 프로젝트에서 해당 통신이 필요했던 이유는 사용자가 닉네임 변경시(ae_SpringServer 서비스 기능) 해당 사용자가 작성했던 커뮤니티 게시글에도 닉네임 변경이 적용되게(ae_communityServer 서비스 기능) 하기 위함이다.

여기서 클라이언트 A는 ae_SpringServer(식단 및 사용자 서비스), 클라이언트 B는 ae_communityServer(커뮤니티 서비스)를 지칭한다.

클라이언트 A에서 클라이언트 B 호출 성공하기

클라이언트 A에서 EurekaClientConfig 클래스 만들기

  1. cofing 패키지 밑에 eureka 패키지 만들기

  2. EurekaClientConfig 클래스 만들기

    → RestTemplate 빈을 생성하고 리본 인터셉터가 이 빈에 동작할 수 있도록 @LoadBalanced를 추가한다.


클라이언트 A에 클라이언트 B를 호출할 컴포넌트 생성

  1. component 패키지 생성

  2. CommunityDiscoveryClient 컴포넌트 생성


클라이언트 B에서 userIdx에 해당하는 < posting >, < comment >에 nickname update하게 하는 api 만들기

EurekaApiController 생성하기


RequestMapping의 주소로 /eureka를 하여 통신할 수 있도록 한다.


update api 생성 (updateNickname)


처음에 requestparam으로 했었는데 url에서 한글이 깨지는 문제가 발생하기 때문에 requestbody로 nickname을 받도록 변경하였었다.


Posting, Comment Service 파일에 updateNickname 메소드 추가



게시글과 댓글에 닉네임을 업데이트할 수 있도록 서비스 코드를 작성한다.


Posting, Comment 레포지토리에 update 쿼리 메소드 추가

게시글과 댓글에 닉네임을 업데이트할 수 있도록 레포지토리 코드를 작성한다.
userIdx와 전 nickname이 일치하는 posting과 comment의 nickname을 바뀐 nickname으로 update하는 쿼리를 작성하면 된다.


Swagger 테스트해보기


Swagger에서는 성공했었는데 DB에서는 업데이트가 안돼서 쿼리문에서 where nickname 구문을 삭제하고 userIdx가 일치하는 경우에만 nickane을 업데이트 시키도록 수정하였다.

그랬더니 성공했다. db에서 nickname이 수아였는데 sua로 변경됨!

한글 닉네임으로도 수정이 잘되는지 확인해보겠다.
스웨거 테스트 다시 고고


루피짱짱으로 바꾸도록 요청을 보냈고 db를 확인해보면 루피짱짱으로 바뀐 것을 알 수 있다.



클라이언트 A에서 userIdx, 이전 nickname, 새 nickname을 넘겨서 클라이언트 B에서 받아 OK 응답 날리기

클라이언트 B를 호출하는 코드를 마무리해 보겠다.

RestTemplate으로 클라이언트 B로 통신하는 updateNickname 메소드 추가


jwt를 만들어서 보내야 하나 싶었으나, gateway 서버의 존재로 인해서 보안성이 충족되고 여기서는 private하게 통신을 하고 있기 때문에 그냥 userIdx랑 nickname을 보내도 되겠다는 생각이 들어서 두개만 보내기로 결정하였다.


Post 메소드 사용과 RequestBody를 보내기 위해 로직 추가


1. baseUrl 변수를 호출하고자 하는 서비스 이름인 ae-communityServer를 호스트명으로 지정하고, communityServer에서 사용할 api 매핑 url인 eureka를 적어서 지정하기
2. requestHeader에 Content-Type을 json으로 설정해서 json으로 requestbody 보낼 수 있게 지정함.
3. params(우리는 update된 nickname이 있음)가 null이 아닐 때 params와 requestHeaders를 같이 묶어서 requestEntity라는 객체를 만들게 함.
4. 마지막으로 restTemplate의 exchange 메소드를 이용해서 ae-communityServer로 통신하게 함. 첫번째 매개변수는 baseUrl을 넣어서 해당 URL로 통신하게 하고 두번째 매개변수는 HTTP 메소드를 지정하는데 우린 POST를 지정함. 그리고 3번에서 만든 requestEntity를 지정함


작성한 updateNickname을 3-2 회원 정보 수정 api에서 회원정보수정 서비스 코드를 호출하기 전에 먼저 호출해서 서버 통신을 하게 하기


테스트 해보기


먼저 클라이언트 A의 api인 사용자 정보 업데이트를 이용하여 사용자 닉네임을 변경하도록 포스트맨에 요청을 보낸다. 그러면 일단 회원 정보 수정이되었다고 OK 응답이 온 것을 알 수 있다.

DB에도 반영이 되었는지 확인해 보면 루피짱으로 닉네임이 잘 변경된 것을 알 수 있다.

클라이언트 B인 커뮤니티 서버에서 로그도 확인해보면 사용자 닉네임 업데이트 쿼리가 잘 날라감을 알 수 있다.

이상으로 유레카를 이용한 서버 간 http 통신을 완료하였다!!

profile
가보자고

0개의 댓글