[go] Go 언어를 사용한 RESTful API의 데이터 유효성 검증 방법

RESTful API를 개발할 때는 데이터의 유효성을 검증하는 것이 매우 중요합니다. Go 언어는 강력한 유효성 검사 라이브러리를 제공하고 있으며, 이를 활용하여 API에서 전달받은 데이터를 쉽게 검증할 수 있습니다. 이번 글에서는 Go 언어를 사용하여 RESTful API의 데이터 유효성을 검사하는 방법에 대해 알아보겠습니다.

1. 구조체(Struct)를 활용한 데이터 모델링

API에서 전달받은 데이터를 검증하기 위해 먼저 데이터 모델을 만들어야 합니다. Go 언어에서는 구조체(Struct)를 사용하여 데이터의 형식을 정의할 수 있습니다. 예를 들어, 사용자의 이름과 이메일을 포함하는 데이터를 검증하기 위한 모델을 아래와 같이 정의할 수 있습니다.

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

위 코드에서 User 구조체는 NameEmail 필드로 구성되어 있습니다. 이때 json 태그를 사용하여 JSON으로 마샬링될 때의 필드 이름을 지정할 수 있습니다.

2. 유효성 검증 라이브러리 사용

Go 언어는 데이터의 유효성을 검증하기 위한 다양한 라이브러리를 제공합니다. 이 중에서 validator 라이브러리를 사용하여 데이터를 검증해보겠습니다. validator 라이브러리는 필드의 유효성을 검사하기 위해 태그를 사용합니다.

import "github.com/go-playground/validator/v10"

func ValidateUser(user User) error {
    validate := validator.New()
    
    err := validate.Struct(user)
    if err != nil {
        return err
    }
    
    return nil
}

위 코드에서 ValidateUser 함수는 전달받은 User 구조체의 유효성을 검사합니다. validate.Struct() 함수를 호출하여 구조체의 필드에 정의된 유효성 검사 조건을 확인합니다. 만약 유효하지 않은 데이터가 전달된다면, err 변수에 오류 정보가 담겨 반환됩니다.

3. API 핸들러에서 유효성 검증하기

데이터 모델과 유효성 검증 함수를 정의한 후에는 실제 API의 핸들러에서 이를 활용하여 데이터의 유효성을 검증할 수 있습니다.

import "net/http"

func CreateUserHandler(w http.ResponseWriter, r *http.Request) {
    var user User
    
    // 전달받은 데이터를 구조체에 바인딩합니다.
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        http.Error(w, "Invalid request body", http.StatusBadRequest)
        return
    }
    
    // 데이터의 유효성을 검증합니다.
    err = ValidateUser(user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    
    // TODO: 사용자 생성 로직을 구현합니다.
    
    w.WriteHeader(http.StatusCreated)
}

위 코드에서 CreateUserHandler 함수는 사용자를 생성하는 API 핸들러입니다. 핸들러에서는 json.NewDecoder() 함수를 사용하여 전달받은 데이터를 User 구조체에 바인딩하고, ValidateUser() 함수를 호출하여 데이터의 유효성을 검증합니다. 만약 유효성 검증에 실패한다면, 적절한 HTTP 응답을 반환하여 클라이언트에게 알릴 수 있습니다.

마무리

Go 언어를 사용한 RESTful API에서 데이터의 유효성을 검증하는 방법에 대해 알아보았습니다. 구조체를 활용하여 데이터 모델을 정의하고, validator 라이브러리를 사용하여 유효성 검사를 수행할 수 있습니다. 이를 통해 API의 안정성과 신뢰성을 높일 수 있습니다.

더 자세한 내용은 아래의 참고 자료를 확인해주세요.