문자열로 반환 시 jq: parse error: Invalid numeric literal 문제 해결

문자열로 반환 시 jq: parse error: Invalid numeric literal 문제 해결

문자열로 반환 시 jq: parse error: Invalid numeric literal 문제를 해결하는 방법에 대해서 정리해 봤습니다.
2026.02.04

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 문자열로 반환 시 jq: parse error: Invalid numeric literal 문제를 해결하는 방법에 대해서 정리해 봤습니다.

문제 발생

다음 명령어를 입력하면 결과는 문제 없이 출력되지만

aws kms get-key-policy \
  --key-id [KeyID] \
  --policy-name default \
  --output text | jq .

에러 메시지가 하나 출력됩니다.

jq: parse error: Invalid numeric literal at line 28, column 0

문제 해결

왜 이런 문제가 발생할까요?

--output text 옵션은 KMS policy를 JSON 문자열로 반환하는데, policy 내용 다음에 추가적인 개행이나 빈 줄이 포함됩니다.

# AWS CLI의 실제 출력 구조
{
  "Version": "2012-10-17",
  ...
}

[빈 줄 또는 추가 텍스트] ← jq가 이 부분을 파싱하려다 실패

jq는 유효한 JSON만 파싱할 수 있기 때문에, JSON 이후의 불필요한 텍스트를 만나면 파싱 에러를 발생시킵니다.

실제로는 어떻게 동작하나?

  • Policy JSON은 정상적으로 파싱되어 출력됨
  • 그 다음 빈 줄이나 추가 텍스트를 jq가 파싱하려다 실패
  • Exit code가 비정상(non-zero)으로 종료

결과만 보면 사람이 보기에는 정상 (policy 내용 확인 가능)이지만,스크립트나 자동화에서는 실패로 간주합니다.

해결방법 1: 에러 출력 무시 (비추천)

aws kms get-key-policy \
  --key-id [KeyID] \
  --policy-name default \
  --output text | jq . 2>/dev/null
  • 장점: 간단함
  • 단점: 실제 jq 에러도 숨겨져서 디버깅 어려움

해결방법 2: --query 옵션 사용

aws kms get-key-policy \
  --key-id [KeyID] \
  --policy-name default \
  --query Policy \
  --output text | jq .

--query Policy로 policy 부분만 추출하여 불필요한 텍스트 제거합니다.

해결방법 3: JSON output 사용 (추천)

aws kms get-key-policy \
  --key-id [KeyID] \
  --policy-name default \
  --output json | jq -r .Policy | jq .

# 또는 더 간단하게:

aws kms get-key-policy \
  --key-id [KeyID] \
  --policy-name default | jq -r .Policy | jq .
  • --output json (또는 기본값): AWS CLI가 JSON 형식으로 응답 반환
  • jq -r .Policy: Policy 필드를 raw string으로 추출
  • jq .: 추출한 policy를 pretty-print

해결방법 4: 가장 간단한 방법 (실용적)

aws kms get-key-policy \
  --key-id [KeyID] \
  --policy-name default | jq -r .Policy | jq .
  • AWS CLI 기본 출력이 JSON이므로 --output json 생략 가능
  • 에러 없이 안정적으로 동작
  • 가독성 좋음

마무리

현재 명령어(--output text | jq .)를 사용해도 policy 내용은 정상적으로 확인할 수 있습니다. 에러 메시지는 무시하고 출력된 policy 내용만 확인하면 됩니다.

하지만 스크립트나 자동화 환경에서는 에러가 발생하지 않는 방법을 사용하는 것이 좋습니다. 되도록이면 에러가 출력되지 않도록 합시다.

この記事をシェアする

FacebookHatena blogX

関連記事