개발 메모장

[Spring Cloud] Eureka Server / Client 구성하기 본문

Server

[Spring Cloud] Eureka Server / Client 구성하기

Delon 2020. 8. 12. 23:57

Eureka(유레카) 란

 

Eureka는 넷플릭스에서 공개한 OSS Service Registry이다.

마이크로 서비스를 하다보면 내부 서비스들끼리 통신을 할 경우가 발생한다. 

A서버에서 B서버로 요청할 때 만약 IP주소로 요청을 하게 된다면 B의 IP가 변경되었을 때 A에 있는 B의 IP 정보도 수정해야 한다.

IP로 요청

그래서 Service Registry를 사용할 경우

service registry

A서버와 B서버가 올라오면서 Service Registry에 서버 정보를 등록하고 각각의 서버는 Service Registry 에 등록되어 있는 서비스 이름으로 호출할 수 있게 된다.

 

Eureka는 이렇게 기본적으로 Service Registry / Service Discovery 역할을 한다.

 

그럼 이제 이 Eureka 서버를 생성하는법을 알아보자 


For Server

 

1. 프로젝트 생성

프로젝트는 IDE 나 https://start.spring.io/를 통해 생성할 수 있다.  이번에는 IntelliJ 로 프로젝트를 생성했다.

dependency

사실 Dependency는 매우 단순하다. 

Spring Cloud에 Eureka Server 만 있어도 된다. 하지만 누구나 접근해서 등록되어 있는 서버 정보를 확인하는 것을 막기 위하여 위하여 spring security도 포함하였다. 

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
implementation 'org.springframework.boot:spring-boot-starter-security'

 

2. Eureka Server 시작 

먼저 Application에 @EnableEurekaServer를 추가한다.

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }

}

보안을 위한 Config파일을 추가한다.

 

@EnableWebSecurity
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf()
                .disable()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }
}

spring security를 추가하면 기본적으로 csrf가 동작한다. 그래서 접근을 하려면 토큰이나 별다른 인증방식이 필요한데 이부분을 해제하고 대신 모든 요청에 대헤서 인증을 하도록 추가한다.

 

 

그리고 application.yml 에 기본정보를 설정을 해준다.

spring:
  security:
    user:
      name: admin
      password: admin
      
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

server:
  port: 8761

register-with-eureka : eureka에 등록여부를 정한다. 이 서버는 본인 자신이기에 등록하지 않는다.

fetch-registry : registry의 항목을 로컬로 캐시할것인지 정한다. 이것도 필요 없으므로 하지 않는다. 

그리고  접속을 위한 user 정보를 입력한다. 그리고 실행!

 

http://localhost:8761 접속

 

로그인

그리고 위에 설정한 정보로 로그인한다.

그럼 이렇게 eureka서버가 올라온 것을 확인할 수 있다. 이러면 서버는 끝났다.

 

 


For Client

 

1. Dependency 추가

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

서비스를 eureka에 등록하기 위하여 위 디펜던시를 추가한다.

 

2. 설정 추가

@SpringBootApplication
@EnableEurekaClient
public class EurekaclientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaclientApplication.class, args);
    }

}

@EnableEurekaClient를 추가해서 Client로 등록한다.

 

그리고 application.yml에 추가한다.

server:
  port: 8888

spring:
  application:
    name: eureka-client

eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone : http://admin:admin@localhost:8761/eureka/
  instance:
    hostname: localhost

eureka.client.service-url.defaultZone 에 유레카 서버의 인증정보와 함께 유레카 서버를 등록한다. 그리고 실행!!!

 

다시 http://localhost:8761/ 접속

서비스 등록

그럼 YML에서 등록한 이름으로 유레카 서버에 등록이 된걸 볼 수 있다. 

Comments