오늘의하루

Spring Cloud Eureka와 Go의 만남 본문

Spring

Spring Cloud Eureka와 Go의 만남

오늘의하루_master 2025. 1. 6. 13:49
반응형

최근 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-client

2. 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를 설정합니다.
반응형
Comments