Go는 성능과 간결함을 겸비한 프로그래밍 언어로, 마이크로서비스 아키텍처에 적합한 다양한 기능을 제공합니다. 이번 글에서는 Go를 사용하여 마이크로서비스를 구축하는 단계별 접근법을 소개하겠습니다.

1. 프로젝트 구성

마이크로서비스를 구축하기 위해 먼저 프로젝트 구조를 설정해야 합니다. 다음과 같은 디렉토리 구조를 추천합니다.

my-microservice/
├── cmd/
│   └── myservice/
│       └── main.go
├── internal/
│   └── service/
│       ├── service.go
│       └── handler.go
├── go.mod
└── go.sum
cmd/ 디렉토리에는 애플리케이션의 진입점인 main.go 파일이 위치하고, internal/ 디렉토리에는 서비스의 비즈니스 로직과 핸들러가 포함됩니다. Go 모듈을 사용할 것이므로 go.mod와 go.sum 파일도 필요합니다.

2. Go 모듈 세팅

Go의 모듈 시스템을 사용하여 프로젝트를 초기화합니다. 다음 명령어를 입력하여 Go 모듈을 생성합니다.

go mod init my-microservice

이 명령어는 go.mod 파일을 생성하여 프로젝트의 의존성을 관리합니다.

3. 기본 서비스 구현

이제 internal/service/service.go 파일을 생성하여 기본 서비스를 구현합니다.

package service

import "fmt"

type MyService struct{}

func (s *MyService) SayHello(name string) string {
    return fmt.Sprintf("Hello, %s!", name)
}

위 코드에서는 MyService 구조체와 SayHello 메서드를 정의하여 사용자가 입력한 이름에 인사하는 기능을 구현했습니다.

4. HTTP 핸들러 작성

이제 HTTP 요청을 처리할 핸들러를 작성해 보겠습니다. internal/service/handler.go 파일에 다음 코드를 추가합니다.

package service

import (
    "net/http"
    "github.com/gorilla/mux"
)

func NewRouter() mux.Router {
    r := mux.NewRouter()
    s := &MyService{}

    r.HandleFunc("/hello/{name}", func(w http.ResponseWriter, r http.Request) {
        vars := mux.Vars(r)
        name := vars["name"]
        message := s.SayHello(name)
        w.Write([]byte(message))
    }).Methods("GET")

    return r
}

위에서 작성한 코드에서는 Gorilla Mux 패키지를 사용하여 라우터를 생성하고, "/hello/{name}" 경로에 대한 GET 요청을 처리합니다. 사용자의 요청에 따라 인사 메시지를 반환합니다.

5. 애플리케이션 진입점 정의

마지막으로 cmd/myservice/main.go 파일을 작성하여 애플리케이션의 진입점을 정의합니다.

package main

import (
    "log"
    "net/http"
    "my-microservice/internal/service"
)

func main() {
    router := service.NewRouter()
    log.Println("Starting server on :8080")
    if err := http.ListenAndServe(":8080", router); err != nil {
        log.Fatal(err)
    }
}

이 코드는 HTTP 서버를 8080 포트에서 실행하고, 앞서 정의한 라우터를 사용하여 요청을 처리합니다.

6. 서버 실행 및 테스트

이제 애플리케이션을 실행해 보겠습니다. 아래 명령어를 입력하여 서버를 시작합니다.

go run ./cmd/myservice

브라우저에서 http://localhost:8080/hello/YourName으로 접속하면 "Hello, YourName!" 메시지를 확인할 수 있습니다.

마무리

이번 글에서는 Go로 마이크로서비스를 구축하는 기본적인 방법을 소개했습니다. Go의 간결한 문법과 강력한 성능 덕분에 마이크로서비스 아키텍처를 구현하는 데 매우 적합한 언어입니다. 이를 통해 더욱 확장 가능하고 유지보수하기 쉬운 애플리케이션을 개발할 수 있습니다. 다음 단계로는 데이터베이스 연결, 인증 및 권한 부여, 로깅과 같은 기능을 추가하여 보다 복잡한 서비스를 만들어 보세요.