Backend/Spring Cloud

Spring Cloud Netflix Eureka - 개념 및 프로젝트 생성

야뤼송 2022. 3. 25. 16:11
반응형
해당 내용은 인프런 이도원님의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)"를 듣고 정리한 내용입니다.

 

1. Spring Cloud Netflix Eureka란?

  • Netflix Eureka란?
    • 넷플릭스에서 MSA를 위해 Spring Cloud에 기부한 오픈 소스이다.
    •  MSA에서 회원, 상품, 주문 등등 각각의 서비스들에 대한 정보를 저장하여 외부에서 서비스 호출 시 그에 맞는 서비스 서버로 전달해주는 미들웨어이다.

2. Service Discovery?

    • Client가 서비스를 호출할 때 서비스의 위치(즉, IP와 PORT 정보)를 알아야 호출할 수 있는데 이러한 정보들을 저장, 관리하는 것을 Service Discovery라고 한다.
    • 구현 방법은 크게 Client-side Discovery 방식과 Server-side Discovery 방식이 있다.
    • Client-side Discovery
      • Client 서비스가 Service Registry에서 서비스의 위치를 찾아서 호출하는 방식으로 대표적으로 Netflix Eureka가 있다.
      • Service 인스턴스의 위치는 인스턴스가 생성될 때 regitry에 등록되고, 인스턴스가 종료될 때 registry에서 삭제된다.
      • 장점
        • 상대적으로 간단하다.
        • 클라이언트가 사용가능한 서비스를 알고 있어 서비스별로 개별적인 로드밸런싱 방법을 선택할 수 있다.
      • 단점
        • Client와 service registry간에 의존성이 발생한다.
        • Client에서 service를 찾는 로직, 즉 discovery 로직을 구현해야한다.
  • Server-Side Discovery
    • 클라이언트가 별도의 로드밸런스를 통해 서비스 요청을 보내면 로드밸런서가 service Registry에 서비스 네트워크 주소를 질의한 후 사용가능한 서비스로 요청을 라우팅한다. 대표적으로는 AWS Elastic Load Balancer(ELB)가 있다.
    • Client-Side Discovery와 동일하게 각 서비스는 Service Registry에 등록되고 해제된다.
    • 장점
      • discovery 관련된 세부 내용을 클라이언트로 분리할 수 있다.
      • Client는 discovery 로직을 구현할 필요 없다.
    • 단점
      • 로드밸런서는 배포환경에 구축되어야 한다.
      • 서비스 디스커버리가 죽게되면 전체 시스템이 동작하지 않기 때문에 높은 가용성이 요구되며 관리가 필요하다.

3.Spring Cloud와 Spring Boot와의 호환성 

  • Spring Cloud에서 지원되는 Spring Boot의 버전이 별로도 존재하기 때문에 맞는 버전을 선택하여야 한다.

https://spring.io/projects/spring-cloud

4. Spring Cloud Netflix Eureka 프로젝트 생성 및 기본 설정

  1. 신규 프로젝트 생성
    •  Spring 프로젝트 생성
      프로젝트 구성 시 이도원 강사님이 Maven 프로젝트로 구성하였기에 동일하게 Maven 프로젝트로 생성
    • 스프링부트의 버전은 위에서 이야기 것과 같이 Spring Cloud 버젼별로 동작하는 스프링 Boot 버젼이 존재하기에 이 프로젝트는 Spring Cloud를 2020.0 버전을 사용할 예정이라 Boot Version을 2.5로 선택.
      해당 프로젝트에서는 Eureka만 구축할 예정이기에 Dependecies에 Eureka만 선택하여 프로젝트 생성
  2.  Eureka 서비스 레지스트리 등록
    • Eureka 서버를 사용하기 위해서는 Eureka 서비스 레지스트리 등록이 필요하다.
      SpringBootApplication 내에 @EnableEurekaServer 어노테이션 추가를 통해 레지스트리 등록을 한다. 
  3. Spring 프로퍼티 설정
    • Eureka 서비스를 위한 프로퍼티 설정을 한다. *.properties 또는 *.yml 파일로 설정을 하며 해당 프로젝트에서는 yml 파일을 이용하여 설정한다.
    •  server.port : 하나의 웹서비스처럼 서버 역할을 해야하므로 서버를 올리기 위한 port를 지정한다.
    •  spring.application.name : 어플리케이션 이름을 지정한다.
    •  eureka.client.register-with-eureka
      - true가 default 값이다.
      - Eureka 클라이언트 역할을 수행하기 위한 설정 값으로 서버 역할만 수행하기 때문에 false로 설정한다. 
    •  eureka.client.fetch-registry
      - true가 default값
      - service registry에 있는 정보를 가져올지에 대한 설정으로 false 설정 시 Eureka server를 호출하지 않게 된다.
      - true 시에는 Eureka Client가 service registry에서 변경 사항 여부 재확인.
  4. Eureka 서버 run 및 정상 여부 확인
    • 브라우저에서 위에서 설정한 포트로 어플리케이션이 정상적으로 호출되는지 확인한다.
      정상적으로 실행 시 아래와 같은 화면이 보여지게 된다.

 

반응형