쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
해당 지식과 관련있는 인기재능

 기본으로 사용될 운영체제는 CentOS, Ubuntu 입니다.   기본 패키지 : Apache + ​mariaDB ​+ php + sendmail (5만)&nbs...

Eureka: 서비스 레지스트리 및 검색 시스템 구축

2024-09-29 04:24:49

재능넷
조회수 330 댓글수 0

Eureka: 서비스 레지스트리 및 검색 시스템 구축 🚀

 

 

마이크로서비스 아키텍처가 현대 소프트웨어 개발의 중심으로 자리 잡으면서, 서비스 디스커버리와 로드 밸런싱의 중요성이 더욱 부각되고 있습니다. 이러한 환경에서 Netflix Eureka는 강력하고 신뢰할 수 있는 서비스 레지스트리 및 검색 시스템으로 주목받고 있습니다. 이 글에서는 Eureka의 개념부터 구축 방법, 그리고 실제 운영에 이르기까지 상세히 다루어 보겠습니다. 🌟

💡 Tip: Eureka를 통한 서비스 레지스트리 구축은 마이크로서비스 아키텍처의 핵심 요소입니다. 이는 재능넷과 같은 복잡한 플랫폼에서 특히 유용할 수 있으며, 다양한 서비스 간의 원활한 통신과 확장성을 보장합니다.

1. Eureka 개요

Eureka는 AWS 클라우드에서 중간 계층 서버의 로드 밸런싱과 페일오버를 목적으로 Netflix에서 개발한 REST 기반 서비스입니다. 주요 특징은 다음과 같습니다:

  • 서비스 등록 및 해제의 자동화
  • 상태 모니터링을 통한 서비스 가용성 확인
  • 분산 시스템에서의 고가용성 보장
  • 클라이언트 측 로드 밸런싱 지원

Eureka는 서비스 인스턴스의 동적인 추가 및 제거를 지원하여, 클라우드 환경에서의 탄력적인 확장을 가능하게 합니다.

Eureka 아키텍처 개요 Eureka Server Service A Service B Service C Service D Eureka 서비스 레지스트리

위 다이어그램은 Eureka 서버를 중심으로 여러 마이크로서비스가 등록되고 상호작용하는 모습을 보여줍니다. 각 서비스는 Eureka 서버에 자신의 정보를 등록하고, 필요할 때 다른 서비스의 정보를 조회할 수 있습니다.

2. Eureka 서버 구축

Eureka 서버를 구축하는 과정은 다음과 같습니다:

  1. Spring Boot 프로젝트 생성
  2. 의존성 추가
  3. 애플리케이션 설정
  4. Eureka 서버 활성화

2.1 Spring Boot 프로젝트 생성

Spring Initializr를 사용하여 새로운 Spring Boot 프로젝트를 생성합니다. 프로젝트 생성 시 다음 설정을 선택합니다:

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 2.5.x 이상
  • Packaging: Jar
  • Java: 11 이상

2.2 의존성 추가

pom.xml 파일에 Eureka 서버 의존성을 추가합니다:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

또한, Spring Cloud 버전을 관리하기 위해 다음 속성을 추가합니다:

<properties>
    <spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>

<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>

2.3 애플리케이션 설정

application.properties 또는 application.yml 파일에 Eureka 서버 설정을 추가합니다:

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.server.wait-time-in-ms-when-sync-empty=0

이 설정은 다음을 의미합니다:

  • 서버 포트를 8761로 설정 (Eureka의 기본 포트)
  • 자기 자신을 Eureka 서버에 등록하지 않도록 설정
  • 레지스트리 정보를 로컬에 캐싱하지 않도록 설정
  • 초기 동기화 대기 시간을 0으로 설정

2.4 Eureka 서버 활성화

메인 애플리케이션 클래스에 @EnableEurekaServer 어노테이션을 추가하여 Eureka 서버를 활성화합니다:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

이제 애플리케이션을 실행하면 Eureka 서버가 구동됩니다. 브라우저에서 http://localhost:8761로 접속하면 Eureka 대시보드를 확인할 수 있습니다.

Eureka 서버 구축 과정 프로젝트 생성 의존성 추가 설정 추가 서버 활성화 Eureka 서버 http://localhost:8761

3. Eureka 클라이언트 구현

Eureka 서버가 준비되었다면, 이제 Eureka 클라이언트를 구현하여 서비스를 등록해 보겠습니다. Eureka 클라이언트는 서비스 인스턴스를 Eureka 서버에 등록하고, 필요할 때 다른 서비스의 정보를 조회하는 역할을 합니다.

3.1 클라이언트 프로젝트 설정

새로운 Spring Boot 프로젝트를 생성하고, 다음 의존성을 추가합니다:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3.2 애플리케이션 설정

application.properties 또는 application.yml 파일에 다음 설정을 추가합니다:

spring.application.name=my-service
server.port=8080
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

이 설정은 다음을 의미합니다:

  • 서비스 이름을 'my-service'로 설정
  • 서비스 포트를 8080으로 설정
  • Eureka 서버의 URL을 지정

3.3 Eureka 클라이언트 활성화

메인 애플리케이션 클래스에 @EnableDiscoveryClient 어노테이션을 추가하여 Eureka 클라이언트를 활성화합니다:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class MyServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyServiceApplication.class, args);
    }
}

이제 애플리케이션을 실행하면 자동으로 Eureka 서버에 등록됩니다. Eureka 대시보드에서 등록된 서비스를 확인할 수 있습니다.

Eureka 클라이언트 등록 과정 Eureka Server My Service Register Other Service Discover Eureka Dashboard Instances: - MY-SERVICE - OTHER-SERVICE

4. Eureka의 고가용성 구성

실제 운영 환경에서는 단일 Eureka 서버로는 충분하지 않습니다. 고가용성을 보장하기 위해 Eureka 서버를 클러스터로 구성해야 합니다. 이를 통해 한 서버가 다운되더라도 시스템이 계속 작동할 수 있습니다.

4.1 Eureka 서버 클러스터 구성

Eureka 서버 클러스터를 구성하려면 각 서버가 서로를 인식하도록 설정해야 합니다. 예를 들어, 두 개의 Eureka 서버를 구성한다고 가정해 봅시다.

첫 번째 Eureka 서버 (eureka-server-1) 설정:

spring.application.name=eureka-server-1
server.port=8761
eureka.instance.hostname=eureka-server-1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://eureka-server-2:8762/eureka/

두 번째 Eureka 서버 (eureka-server-2) 설정:

spring.application.name=eureka-server-2
server.port=8762
eureka.instance.hostname=eureka-server-2
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://eureka-server-1:8761/eureka/

이 설정을 통해 두 Eureka 서버는 서로를 피어로 인식하고 정보를 동기화합니다.

4.2 클라이언트 설정 변경

클라이언트 애플리케이션에서는 모든 Eureka 서버의 주소를 지정해야 합니다:

eureka.client.service-url.defaultZone=http://eureka-server-1:8761/eureka/,http://eureka-server-2:8762/eureka/

이렇게 설정하면 클라이언트는 두 Eureka 서버 중 하나가 다운되어도 다른 서버를 통해 서비스 디스커버리를 계속할 수 있습니다.

Eureka 고가용성 구성 Eureka Server 1 Eureka Server 2 Sync Service A Service B Service C 고가용성 Eureka 구성

5. Eureka의 자가 보호 모드

Eureka는 네트워크 문제나 기타 이슈로 인해 등록된 인스턴스들과의 통신이 어려워질 때 "자가 보호 모드(Self-Preservation Mode)"로 전환됩니다. 이 모드에서 Eureka는 등록된 인스턴스들의 정보를 계속 유지하며, 일시적인 네트워크 문제로 인해 서비스가 제거되는 것을 방지합니다.

5.1 자가 보호 모드의 작동 원리

  1. Eureka 서버는 클라이언트로부터 주기적으로 하트비트를 받습니다.
  2. 일정 시간 동안 예상된 하트비트의 수보다 적은 수의 하트비트를 받으면 자가 보호 모드로 전환됩니다.
  3. 자가 보호 모드에서는 인스턴스 등록 정보를 삭제하지 않고 유지합니다.
  4. 네트워크 상태가 정상화되면 자동으로 일반 모드로 복귀합니다.

5.2 자가 보호 모드 설정

관련 키워드

  • Eureka
  • 마이크로서비스
  • 서비스 디스커버리
  • 로드 밸런싱
  • Spring Cloud
  • Netflix OSS
  • 고가용성
  • 자가 보호 모드
  • 모니터링
  • 클라우드 네이티브

지식의 가치와 지적 재산권 보호

자유 결제 서비스

'지식인의 숲'은 "이용자 자유 결제 서비스"를 통해 지식의 가치를 공유합니다. 콘텐츠를 경험하신 후, 아래 안내에 따라 자유롭게 결제해 주세요.

자유 결제 : 국민은행 420401-04-167940 (주)재능넷
결제금액: 귀하가 받은 가치만큼 자유롭게 결정해 주세요
결제기간: 기한 없이 언제든 편한 시기에 결제 가능합니다

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

📚 생성된 총 지식 8,549 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2024 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창