MSA 전환 - Eureka

Haechan Kim·2024년 3월 9일

MSA 전환

목록 보기
2/7

Eureka 서버 역할

  • MSA 구성하는 모든 서비스 모니터링 역할 뿐 아니라
  • 현재 존재하는 마이크로 서비스 목록 gateaway에 알려줘 원활한 스케일 아웃 동작 하도록.
    • msa는 컨테이너들이 자동으로 스케일 아웃
    • 스케일 아웃으로 새로 생긴 서버는 SCG가 모름. Eureka가 알려줘야 함.

Eureka 서버 생성

  • 필수 의존성
    • Eureka Server
    • Spring Security
  • Main 클래스에 @EurekaEnableServer 어노테이션 등록
  • Eureka 설정
    • application.properties
server.port=8761

eureka.client.register-with-euerka=false
eureka.client.fetch-registry=false
  • 시큐리티 설정
 @Configuration
@EnableWebSecurity
public class SecurityConfig {

    // 인코딩
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {

        return new BCryptPasswordEncoder();
    }

    // 시큐리티 필터
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf((auth) -> auth.disable());
        // 모든 경로에 대해 특정 권한 필요
        http.authorizeHttpRequests((auth) -> auth.anyRequest().authenticated());
        // httpBasic 통한 로그인
        http.httpBasic(Customizer.withDefaults());

        return http.build();
    }

    // 이 내부에 접근할 수 있는 id, pw
    // 한두개이기 때문에 인메모리로 저장
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user1 = User.builder()
                .username("admin")
                .password(bCryptPasswordEncoder().encode("1234"))
                .roles("ADMIN")
                .build();

        return new InMemoryUserDetailsManager(user1);
    }
}

접속 후 eureka 대시보드. 현재는 연결된 인스턴스 없음.

Eureka 클라이언트

MSA 구성 요소 중 모니터링 원하는 요소에 Eureka 클라이언트 설정 진행해 등록.

  • 필수 의존성
    • Eureka Discovery Client

  • build.gradle
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.3'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

repositories {
	mavenCentral()
}

ext {
	set('springCloudVersion', "2023.0.0")
}

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

tasks.named('test') {
	useJUnitPlatform()
}
  • Main 클래스에 @EnableDiscoveryClient 어노테이션 등록

Eureka 서버와 연결

  • application.properties
server.port=8080
spring.application.name=ms1

eureka.client.register-with-eureka=true #유레카 서버에 등록할지 여부
eureka.client.fetch-registry=true #유레카 서버의 정보를 가져올지 여부
eureka.client.service-url.defaultZone=http://아이디:비밀번호@아이피:8761/eureka #유레카 서버 주소

서버를 실행하면 eureka 대시보드에서 인스턴스가 뜨는 것을 확인할 수 있음.

0개의 댓글