[go] Go에서 JSON 데이터 유효성 검사하기

Go 언어를 사용하여 JSON 데이터의 유효성을 검사하는 것은 매우 중요합니다. 이 작업을 수행하는 방법에 대해 알아보겠습니다.

JSON 데이터 유효성 검사

Go에서 JSON 데이터의 유효성을 검사하는 방법 중 하나는 encoding/json 패키지의 Unmarshal 함수를 사용하는 것입니다. Unmarshal 함수는 JSON 데이터를 Go의 데이터 구조체로 변환하는 데 사용됩니다. 이 때, 유효하지 않은 JSON 데이터가 들어오면 오류가 발생하게 됩니다.

다음은 예제 코드입니다.

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	jsonData := []byte(`{"name":"Alice","age":30}`)
	var p Person
	err := json.Unmarshal(jsonData, &p)
	if err != nil {
		fmt.Println("유효성 검사 오류:", err)
		return
	}
	fmt.Println("이름:", p.Name)
	fmt.Println("나이:", p.Age)
}

위 예제에서는 Unmarshal 함수를 사용하여 주어진 JSON 데이터를 Person 구조체로 변환하고 있습니다. 만약 JSON 데이터가 유효하지 않다면 오류가 반환됩니다.

추가적인 유효성 검사

실제 개발 환경에서는 필드 간의 관계나 형식적 유효성을 검사할 때가 많습니다. 이를 위해 struct 태그와 사용자 정의 유효성 검사 함수를 사용할 수 있습니다. struct 태그를 사용하여 필드의 유효성 규칙을 정의하고, 사용자 정의 함수를 통해 원하는 추가적인 유효성 검사를 수행할 수 있습니다.

예를 들어, 다음은 Person 구조체에 추가적인 유효성 검사를 수행하는 예제 코드입니다.

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name" validate:"required"`
	Age  int    `json:"age" validate:"gte=0,lte=130"`
}

func (p *Person) Validate() error {
	// 사용자 정의 유효성 검사 수행
	if p.Name == "" {
		return fmt.Errorf("이름은 필수 항목입니다.")
	}
	return nil
}

func main() {
	jsonData := []byte(`{"name":"Alice","age":150}`)
	var p Person
	err := json.Unmarshal(jsonData, &p)
	if err != nil {
		fmt.Println("유효성 검사 오류:", err)
		return
	}
	err = p.Validate()
	if err != nil {
		fmt.Println("추가적인 유효성 검사 오류:", err)
		return
	}
	fmt.Println("이름:", p.Name)
	fmt.Println("나이:", p.Age)
}

위 예제에서는 struct 태그를 사용하여 Name 필드가 필수이고, Age 필드가 0 이상 130 이하여야 함을 정의하고 있습니다. 또한 Validate 함수를 통해 추가적인 유효성 검사를 수행하도록 정의하고 있습니다.

결론

Go 언어에서 JSON 데이터의 유효성을 검사하는 방법에 대해 알아보았습니다. 기본적인 유효성 검사는 encoding/json 패키지의 Unmarshal 함수를 통해 수행 가능하며, 추가적인 유효성 검사는 struct 태그와 사용자 정의 함수를 활용하여 수행할 수 있습니다. JSON 데이터가 올바른 형식을 갖도록 유효성 검사를 수행하여 안정적인 프로그램을 개발하는 데 도움이 될 것입니다.

참고문헌: