InfoGrab DocsInfoGrab Docs

JSON 개발 가이드라인

요약

GitLab에서는 방대한 양의 JSON 데이터를 처리합니다. 이 클래스는 기본 JSON 클래스 호출, .to_json 호출 등을 대체하여 사용해야 합니다. 차이점은 모든 JSON 처리를 Gitlab::Json을 통해 수행함으로써 내부적으로 사용하는 gem을 교체할 수 있다는 점입니다.

GitLab에서는 방대한 양의 JSON 데이터를 처리합니다. 대용량 JSON 인코딩 또는 디코딩 시 최적의 성능을 보장하기 위해, 기본 메서드 대신 자체 JSON 클래스를 사용합니다.

Gitlab::Json#

이 클래스는 기본 JSON 클래스 호출, .to_json 호출 등을 대체하여 사용해야 합니다. .parse, .generate, .dumpJSON이 제공하는 대부분의 공개 메서드를 구현하며, 응답 결과는 기본 클래스와 완전히 동일합니다.

차이점은 모든 JSON 처리를 Gitlab::Json을 통해 수행함으로써 내부적으로 사용하는 gem을 교체할 수 있다는 점입니다. 기본 json gem 대신 C 확장을 사용하는 oj를 사용하여 현저히 빠른 성능을 제공합니다.

이 클래스가 만들어진 이유는, GitLab 애플리케이션의 오랜 역사로 인해 기본 json gem을 oj로 단순 교체하는 것이 불가능했기 때문입니다:

  • 응답 결과에 대한 정확한 기댓값을 갖는 테스트 케이스가 방대하게 존재합니다.

  • 서로 다른 JSON 프로세서 간, 특히 포매팅과 관련하여 미묘한 차이가 있습니다.

Gitlab::Json 클래스는 이러한 점을 고려하여 사용 사례에 따라 어댑터를 유연하게 변경할 수 있으며, 구식 포매팅 기댓값도 처리할 수 있습니다.

Gitlab::Json::PrecompiledJson#

이 클래스는 Grape 프레임워크에 대한 훅에서 사용됩니다. 이미 생성된 JSON이 응답 반환 시 JSON 생성 과정을 다시 한 번 거치지 않도록 보장합니다.

Gitlab::Json::LimitedEncoder#

이 클래스는 JSON을 생성하되, 결과 JSON이 너무 커지면 오류를 발생시키는 데 사용할 수 있습니다. .encode 메서드의 기본 제한값은 25 MB이지만, 메서드 사용 시 이 값을 사용자 정의할 수 있습니다.

JSON 개발 가이드라인

GitLab v19.1
원문 보기
요약

GitLab에서는 방대한 양의 JSON 데이터를 처리합니다. 이 클래스는 기본 JSON 클래스 호출, .to_json 호출 등을 대체하여 사용해야 합니다. 차이점은 모든 JSON 처리를 Gitlab::Json을 통해 수행함으로써 내부적으로 사용하는 gem을 교체할 수 있다는 점입니다.

GitLab에서는 방대한 양의 JSON 데이터를 처리합니다. 대용량 JSON 인코딩 또는 디코딩 시 최적의 성능을 보장하기 위해, 기본 메서드 대신 자체 JSON 클래스를 사용합니다.

Gitlab::Json#

이 클래스는 기본 JSON 클래스 호출, .to_json 호출 등을 대체하여 사용해야 합니다. .parse, .generate, .dumpJSON이 제공하는 대부분의 공개 메서드를 구현하며, 응답 결과는 기본 클래스와 완전히 동일합니다.

차이점은 모든 JSON 처리를 Gitlab::Json을 통해 수행함으로써 내부적으로 사용하는 gem을 교체할 수 있다는 점입니다. 기본 json gem 대신 C 확장을 사용하는 oj를 사용하여 현저히 빠른 성능을 제공합니다.

이 클래스가 만들어진 이유는, GitLab 애플리케이션의 오랜 역사로 인해 기본 json gem을 oj로 단순 교체하는 것이 불가능했기 때문입니다:

  • 응답 결과에 대한 정확한 기댓값을 갖는 테스트 케이스가 방대하게 존재합니다.

  • 서로 다른 JSON 프로세서 간, 특히 포매팅과 관련하여 미묘한 차이가 있습니다.

Gitlab::Json 클래스는 이러한 점을 고려하여 사용 사례에 따라 어댑터를 유연하게 변경할 수 있으며, 구식 포매팅 기댓값도 처리할 수 있습니다.

Gitlab::Json::PrecompiledJson#

이 클래스는 Grape 프레임워크에 대한 훅에서 사용됩니다. 이미 생성된 JSON이 응답 반환 시 JSON 생성 과정을 다시 한 번 거치지 않도록 보장합니다.

Gitlab::Json::LimitedEncoder#

이 클래스는 JSON을 생성하되, 결과 JSON이 너무 커지면 오류를 발생시키는 데 사용할 수 있습니다. .encode 메서드의 기본 제한값은 25 MB이지만, 메서드 사용 시 이 값을 사용자 정의할 수 있습니다.