[go] Go 언어를 사용한 RESTful API의 데이터 모델링

RESTful API를 개발할 때 데이터 모델링은 매우 중요한 과정입니다. Go 언어는 강력한 타입 시스템과 구조체를 제공하여 데이터 모델링을 효과적으로 수행할 수 있습니다. 이 문서에서는 Go 언어를 사용하여 RESTful API의 데이터 모델링을 하는 방법에 대해 알아보겠습니다.

구조체를 사용한 모델 정의

Go 언어에서는 구조체(struct)를 사용하여 데이터 모델을 정의합니다. 구조체는 필드(field)가 있는 사용자 정의 데이터 타입입니다. 각 필드는 해당 모델의 속성(attribute)을 나타내며, 필드의 타입을 통해 데이터의 형식을 지정할 수 있습니다.

type User struct {
    ID       int    `json:"id"`
    Name     string `json:"name"`
    Email    string `json:"email"`
    Password string `json:"-"`
}

위의 예시에서는 User라는 구조체를 정의하고 있습니다. 이 구조체는 ID, Name, Email, Password라는 필드를 가지고 있습니다. 각 필드는 해당 모델의 속성을 나타내며, 필드의 이름과 타입을 명시합니다. 추가로 필드의 태그를 사용하여 JSON 시리얼라이즈(serialization) 및 디시리얼라이즈(deserialization)를 지정할 수 있습니다.

컨트롤러에서 모델 사용

RESTful API의 컨트롤러(controller)에서는 데이터 모델을 사용하여 요청에 대한 처리를 수행합니다. Go 언어에서 컨트롤러는 함수로 구현되며, 요청 데이터를 받아 처리한 후 응답을 생성합니다.

아래는 User 모델을 사용한 예시입니다.

func CreateUser(w http.ResponseWriter, r *http.Request) {
    var user User

    // 요청 바디에서 JSON을 읽어와 user 객체에 저장합니다.
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        // 에러 처리
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // user 객체를 데이터베이스에 저장하고 응답을 생성합니다.
    // ...

    // 성공적인 응답 전송
    w.WriteHeader(http.StatusOK)
    json.NewEncoder(w).Encode(user)
}

위의 예시에서는 CreateUser라는 컨트롤러 함수를 정의하고 있습니다. 이 함수는 요청 바디에서 전달된 JSON 데이터를 User 구조체로 디시리얼라이즈한 후 데이터베이스에 저장합니다. 성공적인 응답을 생성하기 위해 http.StatusOK 상태 코드와 JSON 형식으로 직렬화된 User 객체를 전송합니다.

데이터 유효성 검사

데이터 유효성 검사는 RESTful API의 핵심적인 부분 중 하나입니다. Go 언어에서는 구조체의 필드에 struct 태그를 사용하여 간단한 유효성 검사를 수행할 수 있습니다.

type User struct {
    ID       int    `json:"id"`
    Name     string `json:"name" validate:"required"`
    Email    string `json:"email" validate:"required,email"`
    Password string `json:"-" validate:"required"`
}

위의 예시에서는 validate라는 구조체 태그를 사용하여 필드의 유효성을 검사합니다. required는 필수 속성을 나타내며, email은 이메일 형식인지 확인합니다. 이러한 태그를 사용하면 데이터 유효성 검사를 수행할 수 있으며, 필요에 따라 직접 유효성 검사를 구현할 수도 있습니다.

결론

Go 언어를 사용하여 RESTful API의 데이터 모델링을 수행하는 방법을 알아보았습니다. 구조체를 사용하여 데이터 모델을 정의하고, 컨트롤러에서 모델을 활용하여 요청에 대한 처리를 수행할 수 있습니다. 또한 데이터 유효성 검사를 통해 데이터의 무결성을 보장할 수 있습니다. 이러한 기술들을 통해 Go 언어로 안정적이고 효율적인 RESTful API를 개발할 수 있습니다.

참고문헌: