Ruby의 내장 JSON 모듈은 C로 구현되어 빠르고, 기본적으로 안전하며, 심볼화, 사용자 정의 객체 클래스 지원 등 다양한 기능을 제공합니다. 2025-2026년 벤치마크에서도 Oj와 같은 최적화된 대안과 동등하거나 우수한 성능을 보여주며 유지보수가 간편합니다.
기본 파싱 및 심볼 키 사용
require 'json' 후 JSON.parse를 사용하여 JSON 문자열을 Ruby 객체로 변환합니다. 대부분의 Ruby 개발자는 symbolize_names: true 옵션을 사용하여 심볼 키 해시를 선호합니다.
ruby
require 'json'
data = JSON.parse('{"name": "Alice"}', symbolize_names: true)
# data[:name] # => "Alice"
파일에서 파싱
Ruby 2.6+부터는 JSON.parse_file을 사용하여 파일을 직접 파싱할 수 있습니다.
ruby
# data = JSON.parse_file('config.json', symbolize_names: true)
중첩 데이터 안전하게 처리
dig 메서드(Ruby 2.3+)를 사용하여 중첩된 해시와 배열에서 NoMethodError 없이 안전하게 값을 추출할 수 있습니다. 값이 없으면 nil을 반환하며, 기본값을 지정할 수도 있습니다.
ruby
response = JSON.parse(api_response, symbolize_names: true)
user_email = response.dig(:data, :user, :profile, :email)
오류 처리
외부 소스에서 오는 JSON은 유효하지 않을 수 있으므로, 항상 JSON.parse 호출을 begin...rescue JSON::ParserError 블록으로 감싸서 예외를 처리해야 합니다.
ruby
begin
data = JSON.parse(user_input, symbolize_names: true)
rescue JSON::ParserError => e
# 오류 처리 로직
data = {}
end
고급 파싱 옵션 및 모범 사례
JSON.parse는 create_additions, max_nesting 등 다양한 고급 옵션을 지원합니다. 2026년의 모범 사례는 다음과 같습니다:
-
symbolize_names: true를 항상 사용합니다. -
dig로 중첩 구조를 안전하게 탐색합니다. -
대규모 JSON 파싱 전 입력 크기를 검증합니다.
-
입력 인코딩이 UTF-8인지 확인합니다.
-
성능 병목 현상이 명확하지 않다면 표준 라이브러리를 선호합니다.
-
공개 API에는
strict: true모드를 사용합니다. -
파싱 실패를 기록하고 엣지 케이스를 테스트합니다.