일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- re.split
- 백준 16235
- JVM
- 백준 파이썬
- 웹어플리케이션 서버
- 백준 16236
- sql 기술면접
- Spring
- 백준 15685
- 백준
- Kotlin
- spring oauth
- java 기술면접
- 백준 16719
- 백준 19238
- 프로그래머스
- MySQL
- Coroutine
- MSA
- 프로래머스
- java
- spring security
- spring cloud
- with recursive
- 파이썬
- JPA
- Spring Boot
- 백준 17779
- 백준 17626
- springboot
- Today
- Total
시작이 반
[MSA] Spring Cloud ( Service 등록 ) 본문
지금까지 API Gateway, Discovery 를 만들었다.
이번에는 간단한 User-Service, order_service, catalog-service를 만들고 API와 Discovery에 등록해 볼 것이다.
USER-SERVICE
사용할 APIs (함수 내용은 설명하지 않겠습니다.)
기능 | URI | HTTP Method |
사용자 정보 등록 | /user-service/users | POST |
전체 사용자 조회 | /user-service/users | GET |
사용자 정보, 주문 내역 조회 | /user-service/users/{user_id} | GET |
작동 상태 확인 | /user-service/health_check | GET |
환영 메시지 | /user-service/welcome | GET |
(디스커버리에 서비스를 등록하기 위해서는 Eureka Discovery Client 디펜던시가 필요함)
우선 main class에 @EnableDiscoveryClient를 사용하여 유레카 서버에 등록할 준비를 한다.
(최신 Spring Boot에서는 이 어노테이션을 등록하지 않아도 자동으로 등록된다.)
application.yml에 유레카 서버주소를 알려준다.
server:
port: 0
spring:
application:
name: user-service
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password:
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
eureka:
instance:
lease-renewal-interval-in-seconds: 1
lease-expiration-duration-in-seconds: 2
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
(기존에 설명했던거 제외)
server.port : 서버 포트는 0으로 해놓으면 랜덤값이 할당된다.
instance-id : 인스턴스 아이디는 gateway에 나오는 서비스의 이름이다. 개발자가 원하는 것으로 작성하면됨
사용될 DB는 H2를 사용할 것이다. (나중에 바뀔수도 있음...)
서비스의 함수들을 다 만들었다면
이제 서비스를 API-Gateway 에 등록한다.
uri에 원래는 주소를 써야하지만 lb(로드밸런싱)을 통해서 서비스의 어플리케이션 이름을 통해 등록할 수 있다. 이러면 자동으로 주소가 들어간다.
gateway를 통해 user-service 접근 (user등록 POST)
gateway를 통해 user-service 접근 (user확인 GET)
CATALOG-SERVICE
사용할 APIs (함수 내용은 설명하지 않겠습니다.)
기능 | URI | HTTP Method |
상품 목록 조회 | /catalog-service/catalogs | GET |
작동상태 확인 | /catalog-service/health_check | GET |
application.yml에 유레카 서버주소를 알려준다.
server:
port: 0
spring:
application:
name: catalog-service
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
initialization-mode: always
jpa:
hibernate:
ddl-auto: create-drop
show_sql: true
generate-ddl: true
eureka:
instance:
lease-renewal-interval-in-seconds: 1
lease-expiration-duration-in-seconds: 2
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
logging:
level:
com.example.catalogservice: DEBUG
해당 API에 필요한 서비스들을 만든다.
서비스의 함수를 다 만들었으면
API-Gateway에 catalog-service를 등록한다.
gateway를 통해 catalog-service 접근 (상품 조회 GET)
ORDER-SERVICE
사용할 APIs (함수 내용은 설명하지 않겠습니다.)
기능 | URI | HTTP Method |
사용자 별 상품 주문 | /order-service/{user_id}/orders | POST |
사용자 별 주문 내역 조회 | /order-service/{user_id}/orders | GET |
작동상태 확인 | /order-service/health_check | GET |
마찬가지로 Eureka Discovery Client 를 디펜던시로 등록
application.yml에 유레카 서버주소를 알려준다.
server:
port: 0
spring:
application:
name: order-service
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
show_sql: true
generate-ddl: true
eureka:
instance:
lease-renewal-interval-in-seconds: 1
lease-expiration-duration-in-seconds: 2
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
logging:
level:
com.example.orderservice: DEBUG
해당 API에 필요한 서비스들을 만든다.
서비스의 함수를 다 만들었으면
API-Gateway에 catalog-service를 등록한다.
gateway를 통해 order-service 접근 (상품 주문 POST)
gateway를 통해 order-service 접근 (해당유저 상품 조회 GET)
모든 서비스 실행
여기까지는 일단 서비스가 다 별개로 동작을 한다.
즉, 원래는 유저가 하나의 상품을 주문한다면 catalog에 있는 물품의 수량이 변해야 하지만 아직 이러한 구현은 되어있지 않다.
이를 위해서는 하나의 서비스에서 다른 서비스의 api를 호출하여 통신하는 Feign Client(rest) 방식이 있으며,
또한 Kafka(메시지 큐잉 서비스)를 통해 비동기로 data를 동기화 시키는 방식이 있다.
<참고 : Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)>
'Programming > MSA' 카테고리의 다른 글
[MSA] Spring Cloud ( Config, Cloud bus ) (0) | 2021.08.07 |
---|---|
[MSA] Spring Cloud ( Config, actuator refresh ) (0) | 2021.08.07 |
[MSA] Spring Cloud ( Gateway Filter ) (0) | 2021.08.03 |
[MSA] Spring Cloud ( API Gateway ) (0) | 2021.08.02 |
[MSA] Spring Cloud ( Eureka Service Discovery ) (0) | 2021.08.02 |