-
Spring Cloud Eureka와 Go의 만남Spring 2025. 1. 6. 13:49728x90반응형
최근 Go 언어에 대한 흥미가 생겨 간단한 API 서버를 Go로 만들고 이를 Spring Eureka에 등록해보자는 생각이 들어서 이에 대한 방법을 작성했습니다.
1. 필요한 Package
Go에서 사용할 패키지는 Gin과 eureka-client이며 설치하려면 Go 모듈을 사용하여 필요한 의존성들을 추가해야 합니다.
go get github.com/gin-gonic/gin go get github.com/xuanbo/eureka-client2. Go 구현 코드
package main import ( "fmt" "log" "net" "vaultis-go-module/module/decryption" "github.com/gin-gonic/gin" eureka "github.com/xuanbo/eureka-client" ) func main() { // 사용 가능한 포트 동적 할당 // 포트 0으로 바인딩하면 OS가 사용 가능한 포트를 자동으로 할당 // Spring의 server.port=0 과 같은 역할 listener, err := net.Listen("tcp", ":0") if err != nil { log.Fatalf("포트 바인딩 오류: %v", err) } port := listener.Addr().(*net.TCPAddr).Port // 닫아주지 않으면 사용중이라는 오류가 발생한다. listener.Close() // Eureka 클라이언트 설정 client := eureka.NewClient(&eureka.Config{ // Eureka 서버 URL DefaultZone: "http://127.0.0.1:8761/eureka/", // 애플리케이션 이름 App: "decryption-go", // 동적으로 할당된 포트 사용 Port: port, // 갱신 주기 RenewalIntervalInSecs: 10, // 서비스 등록 주기 DurationInSecs: 30, Metadata: map[string]interface{}{ // 서비스 버전 정보 "VERSION": "0.1.0", // 노드 그룹 ID (여러 인스턴스가 있을 경우 구분용) "NODE_GROUP_ID": 0, // 서비스가 속한 제품 코드 "PRODUCT_CODE": "DEFAULT", // 제품의 버전 코드 "PRODUCT_VERSION_CODE": "DEFAULT", // 서비스가 운영되는 환경 코드 (예: "PROD", "DEV") "PRODUCT_ENV_CODE": "DEFAULT", // 서비스의 버전 코드 "SERVICE_VERSION_CODE": "DEFAULT", }, }) client.Start() // Gin 라우터 설정 r := gin.Default() r.POST("/decryption", decryption.Decrypt) log.Printf("서버가 포트 %d에서 실행 중입니다.", port) r.Run(fmt.Sprintf(":%d", port)) }코드 설명
- Port 동적 할당
- net.Listen("tcp", ":0")을 사용하여 OS에서 사용 가능한 포트를 자동 할당 받습니다.
- 추후 스케일 아웃시 포트 충돌을 방지할 수 있습니다.
- Eureka Client 설정
- eureka.NewClient() 메소드를 사용하여 Eureka Client를 설정합니다.
728x90반응형'Spring' 카테고리의 다른 글
Spring Controller Advice: Global vs. Custom Advice (0) 2025.03.20 [Rest Docs]Test 없는 API 문서는 시한폭탄 (0) 2025.02.26 [레거시 리팩토링] 상속을 넘어 컴포지션으로 가보자 (0) 2024.12.17 DTO(Data Transfer Object)를 쓰는 이유? (1) 2024.11.11 BeanPostProcessor 사용법: 빈 초기화 과정에서의 조작과 시점 이해하기 (0) 2024.11.07 - Port 동적 할당