oto/services/core/cmd/oto-core/main.go
toki 8ecb101a17 feat(core): OTO Core 초기 서버를 추가한다
독립 Control Plane 마이그레이션에서 core-service 기반을 검증할 수 있도록 health/readiness 엔드포인트와 로컬 실행 진입점을 먼저 마련한다.
2026-06-05 08:24:45 +09:00

52 lines
1.1 KiB
Go

package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/toki/oto/services/core/internal/httpserver"
)
func main() {
addr := os.Getenv("OTO_CORE_ADDR")
if addr == "" {
addr = "127.0.0.1:8080"
}
log.Printf("Starting OTO Core server on %s", addr)
server := httpserver.NewServer(addr)
// Channel to listen for errors from the server run
serverError := make(chan error, 1)
go func() {
if err := server.Start(); err != nil {
serverError <- err
}
}()
// Channel to listen for interrupt signals
shutdownSignal := make(chan os.Signal, 1)
signal.Notify(shutdownSignal, os.Interrupt, syscall.SIGTERM)
select {
case err := <-serverError:
log.Fatalf("Server error: %v", err)
case <-shutdownSignal:
log.Println("Shutting down server gracefully...")
// Set a timeout context for graceful shutdown
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Printf("Error during graceful shutdown: %v", err)
os.Exit(1)
}
log.Println("Server stopped")
}
}