인프런의 "Spring Cloud로 개발하는 마이크로서비스" 강의를 보고 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4
앞서 포스팅에서는 구성한 쇼핑몰의 User 등록 부분을 구현하였고, 이번 포스팅에서는 유저 조회와 Catalog와 Order Service를 구현합니다.
사용자 조회 시에는 사용자 등록하는 API와 uri는 동일하지만 http method만 GET으로 변경하여 사용합니다.
사용자 조회 기능을 구현하기 전에 먼저 User Microservice를 API Gateway Service에 추가해주어야 합니다.
health 체크를 위한 간단한 api를 controller에 구현합니다.
user-service의 이름으로 등록되는 User Microservice를 라우팅 정보에 등록해줍니다.
등록된 정보에 따라 게이트웨이를 거치면 포트에 상관없이 user-service로 포워딩이 됩니다.
서버 재시작 후 게이트웨이의 포트로 uri에 접속했을 때, 503에러가 발생하는 이유는 다음과 같습니다.
User Microservice가 재기동 되기 직전에 Eureka 서버에 unregist를 요청하고, 재기동 되면서 새로운 인스턴스 정보를 regist합니다.
이때, API Gateway는 아직 이전 정보를 갖고 있는 상태이기 때문에 User Service가 아직 정상적으로 준비되지 않아 503 에러가 발생합니다.
사용되는 Dependency는 User Service에 사용된 것과 동일합니다.
서버 시작 시 데이터베이스에 데이터를 넣기 때문에, ddl-auto를 create-drop으로 설정하여 데이터베이스를 지우고 시작하는 방식으로 설정합니다.
프로젝트 시작시 h2 데이터베이스의 위의 데이터를 추가합니다.
생성한 객체를 다른 서버에서 사용할 수 있기 때문에 Serailizable을 구현합니다.
Service 인터페이스를 만들어 위와 같이 메소드를 구현합니다.
상품 정보를 조회하는 컨트롤러를 구현합니다.
data.sql에 등록한 데이터가 서버 시작 시 h2 Database에 등록된 것을 확인할 수 있습니다.
게이트웨이의 application.yml 파일에 Catalog Service 라우팅 정보를 등록합니다.
gateway의 port 번호로 API를 호출하게 되면 등록된 상품 정보를 확인할 수 있습니다.
역시 Dependency는 위의 두 서비스와 동일합니다.
게이트웨이의 application.yml에 Order Microservice의 라우팅 정보를 추가합니다.
Eureka 서버인 8761포트로 접속하면 4개의 서비스가 등록된 모습을 볼 수 있습니다.
gateway의 포트인 8000번에 order-service의 주문 등록 api를 호출하여 주문을 등록할 수 있습니다.
동일하게 GET 메소드로 gateway에 호출하면 등록된 주문을 확인할 수 있습니다.