제육's 휘발성 코딩
반응형

1. Eureka Server 생성

image

  • Discovery Service 역할을 하는 서버 프로젝트를 생성하자. IntelliJ에서 Spring Initializr를 사용하여 프로젝트를 생성하자. Spring Cloud와 Spring Boot 버전이 서로 다르면 오류가 발생하므로 버전 확인을 하자.

image

  • Eureka Server 라이브러리를 의존성으로 주입해주자.

2.  

3. pom.xml

<code />
<?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.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>discoveryservice</artifactId> <version>0.0.1-SNAPSHOT</version> <name>discoveryservice</name> <description>discoveryservice</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.4</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>
  • 의존성 주입으로 자동 생성되는 pom.xml은 다음과 같다.

4.  

5. application

<code />
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); } }
  • @EnableEurekaServer 어노테이션을 추가하자. 해당 어노테이션을 추가하면 Eureka Server를 사용할 수 있게끔 지원해준다.

6.  

7. application.yml

<code />
server: port: 8761 spring: application: name: discoveryservice eureka: client: # eureka의 registry에 등록할지 여부 설정 register-with-eureka: false # eureka의 registry에 있는 정보를 가져올지 여부 설정 fetch-registry: false
  • eureka server를 사용할 yml 설정을 추가하자.

8.  

9. Eureka Client 여러 개 생성

image

  • Discovery Service 생성 때와 동일하게 새로운 프로젝트를 생성하자. 서비스명은 User Service로 지정했다.

image

  • 클라이언트 단에선 Discovery를 Eureka Discovery Client 라이브러리로 의존성을 주입하자. 추가로 필요한 라이브러리도 추가하였다.

10. pom.xml

<code />
<?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.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>user-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>user-service</name> <description>user-service</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </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> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
  • 자동으로 생성된 기본 pom.xml은 다음과 같다.

11.  

12. application

<code />
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } }
  • Discovery Server 단과 다르게 클라이언트 단에서는 @EnableDiscoveryClient 어노테이션을 추가하자.

image

  • 서버단을 실행하고, 클라이언트 단을 이어서 실행하면, 다음과 같이 디폴트 페이지로 Eureka 대시보드를 볼 수 있다. 가운데 status에서 UP은 현재 동작중인 서버를 의미하며, DOWN은 동작중이지 않은 서버를 의미한다.

 

image

  • 클라이언트를 여러 대 작동해보자. 첫 번째 방법으로 IntelliJ 상단에 Edit Configuration 에서 서버를 복제한 후 VM 옵션을 추가하여 실행하는 방법이 있다. 포트를 기존과 다르게 변경해야 된다.

 

<code />
mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'
  • 두 번째 방법으론 터미널에서 mvn 방식으로 실행하는 방법이다.

 

image

  • 클라이언트를 4대 띄우고 서버에서 조회해보면 다음과 같이 4개의 클라이언트가 조회 된다.

 

<code />
server: port: 0 # 랜덤 포트 할당 spring: application: name: user-service eureka: instance: instance-id: ${spring.cloud.clien.hostname}:${spring.application.instance_id:${random.value}} client: # Eureka 서버 등록 register-with-eureka: true # Eureka 서버로부터 인스턴스 정보를 주기적으로 가져오는 기능 fetch-registry: true # Eureka 서버 위치 등록 service-url: # endpoint 지정 defaultZone: http://127.0.0.1:8761/eureka
  • 포트 설정 없이 클라이언트를 띄울 때 마다 랜덤한 포트를 지정하고 싶으면 application.yml에서 다음과 같이 랜덤 포트를 지정해줌으로 설정할 수 있다.

13. REFRENCE

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/unit/68386

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^