Linux Bash shell script

Bash Script에서 `curl`과 `jq` 사용법 [ 외부 프로그램 활용하기 ]

임베디드 친구 2025. 2. 8. 10:53
728x90
반응형

Bash 스크립트는 단순히 명령어를 나열하는 수준을 넘어 외부 프로그램을 활용하여 더욱 강력하고 유연한 스크립트를 작성할 수 있습니다. 특히 API 호출 및 JSON 데이터 처리를 위해 curljq는 매우 유용합니다. 이번 포스팅에서는 이 두 가지 프로그램을 사용하는 방법과 예제를 통해 실용적인 스크립트를 작성하는 방법을 알아보겠습니다.


1. curl의 소개 및 기본 사용법

curl은 URL을 통해 데이터를 전송하거나 가져오는 데 사용되는 명령어입니다. HTTP, HTTPS, FTP 등 다양한 프로토콜을 지원합니다.

1.1 curl의 기본 형식

curl [옵션] [URL]

1.2 주요 옵션

  • -X: 요청 메서드 지정(GET, POST, PUT, DELETE 등)
  • -d: POST 요청 시 전송할 데이터 지정
  • -H: 헤더 정보 추가
  • -o: 출력 결과를 파일로 저장
  • -s: 진행 상태나 에러 메시지를 숨김 (silent mode)

1.3 간단한 예제: 웹 페이지 가져오기

curl -s https://jsonplaceholder.typicode.com/posts/1

위 명령어는 JSONPlaceholder라는 테스트 API에서 특정 게시글의 데이터를 가져옵니다.


2. jq의 소개 및 기본 사용법

jq는 JSON 데이터를 필터링, 변환, 출력하는 데 사용되는 프로그램입니다. JSON 데이터를 다루는 작업이 많은 경우 매우 유용합니다.

2.1 jq의 기본 형식

jq [필터 표현식]

2.2 주요 기능

  • 특정 키의 값 추출: .key
  • 배열의 요소 접근: [index]
  • 조건부 필터링: select(조건)
  • 새로운 JSON 생성: {key: value}

2.3 간단한 예제: JSON 데이터에서 특정 값 추출

curl -s https://jsonplaceholder.typicode.com/posts/1 | jq '.title'

위 명령어는 게시글 데이터에서 title 값을 추출합니다.


3. 실용적인 예제: API 데이터 가공하기

이번에는 curljq를 조합하여 JSON 데이터를 가져오고 가공하는 스크립트를 작성해 보겠습니다.

3.1 스크립트 예제: 특정 유저의 게시글 가져오기

#!/bin/bash

# 특정 사용자 ID
USER_ID=1

# API URL
API_URL="https://jsonplaceholder.typicode.com/posts"

# 사용자 ID로 필터링된 게시글 가져오기
response=$(curl -s "${API_URL}?userId=${USER_ID}")

# 게시글의 ID와 제목 출력
echo "사용자 ID ${USER_ID}의 게시글 목록:"
echo "$response" | jq -r '.[] | "ID: \(.id), Title: \(.title)"'

실행 결과 (예시)

사용자 ID 1의 게시글 목록:
ID: 1, Title: sunt aut facere repellat provident occaecati excepturi optio reprehenderit
ID: 2, Title: qui est esse
...

3.2 스크립트 예제: 새로운 게시글 생성

#!/bin/bash

# API URL
API_URL="https://jsonplaceholder.typicode.com/posts"

# POST 데이터 생성
NEW_POST=$(jq -n \
  --arg userId "1" \
  --arg title "New Post Title" \
  --arg body "This is the content of the new post." \
  '{userId: $userId, title: $title, body: $body}')

# POST 요청 보내기
response=$(curl -s -X POST -H "Content-Type: application/json" -d "$NEW_POST" "$API_URL")

# 응답 출력
echo "새 게시글 생성 결과:"
echo "$response" | jq

실행 결과 (예시)

새 게시글 생성 결과:
{
  "id": 101,
  "userId": "1",
  "title": "New Post Title",
  "body": "This is the content of the new post."
}

4. 추가 팁

4.1 에러 처리

curljq를 사용할 때 발생할 수 있는 에러를 처리하는 방법도 중요합니다.

#!/bin/bash

API_URL="https://jsonplaceholder.typicode.com/posts/1"

# API 호출
response=$(curl -s -w "%{http_code}" -o temp.json "$API_URL")
status_code=${response: -3}

if [ "$status_code" -eq 200 ]; then
  cat temp.json | jq
else
  echo "API 호출 실패. 상태 코드: $status_code"
fi

rm -f temp.json

4.2 jq 필터 고급 활용

  • 특정 키 제외: . | del(.key)
  • 조건부 배열 필터링: .[] | select(.userId == 1)

결론

curljq를 활용하면 Bash 스크립트에서 API 호출과 JSON 데이터 처리를 손쉽게 구현할 수 있습니다. 위의 예제를 참고하여 여러분의 프로젝트에 맞는 스크립트를 작성해 보세요.

반응형