API Gateway를 거치게 되면 요청 URI를 분석하고 적절한 서비스로 호출할 수 있도록 중간에 Service Mesh 계층을 거치게되는데
Service Mesh에는 Configuration, Routing, Instrumentation, AuthN/AuthZ, Discovery, Load Balancing, Resiliency, Encryption 등 중간의 MSA의 인프라 즉, 미들웨어 역할을 하고있다.
- 프록시 역할, 인증, 권한 부여, 암호화, 서비스 검색, 요청 라우팅, 로드 밸런싱 등의 역할을 수행합니다.
- 자가 치유 복구 서비스를 구현할 수 있다.
- 서비스간의 통신과 관련된 기능을 자동화 해준다.
우선, PC가 하나만 있다고 가정하고 진행하기 때문에 개발 진행 시 PORT를 다르게 하여 진행해야됩니다.
만약, 가상으로 여러 IP를 할당 받아서 진행했다면 굳이 그럴필욘 없습니다.
각 서비스의 인스턴스들을 기준으로 설정된 URL들을 기록하고 Load Banalncer에서 요청을 통해 어느 서버에 호출 되어질 지 다시 Service Discover에 등록된 서버를 가져와서 연결해주는 역할을 한다.
EcommerceDiscoveryService
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ecommerce</groupId>
<artifactId>discoveryservice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>discoveryservice</name>
<description>discoveryservice</description>
<properties>
<java.version>11</java.version>
<spring-cloud.version>2020.0.0</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
DiscoveryserviceApplication.java
>> @EnableEurekaServer 어노테이션 설정
package com.ecommerce.discoveryservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryserviceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryserviceApplication.class, args);
}
}
application.yml
포트설정 및 유레카 설정 처리
server:
port: 8761
spring:
application:
name: discoveryservice
# eureka의 자기 자신을 등록하는 것을 제외
eureka:
client:
register-with-eureka: false
fetch-registry: false
http://localhost:8761 실행 결과
SpringBoot MSA (6) - API Gateway Service Filter (1) | 2023.10.09 |
---|---|
SpringBoot MSA (5) - API Gateway Service (0) | 2023.10.03 |
SpringBoot MSA (4) - UserService / Load Balancer (0) | 2023.10.03 |
SpringBoot MSA (3) - Service Discovery에 UserService 등록하기 (0) | 2023.10.03 |
SpringBoot MSA (1) - Cloud Native Architecture (1) | 2023.10.03 |
댓글 영역