Programming/PHP

[PHP] #15 PHP로 JSON 응답처리, 파싱부터 API 응답까지 완벽 정리!

TOASTDEV 2025. 7. 26. 16:00
반응형

 

 

안녕하세요, 토스트 데브입니다!
웹 개발에서 빠질 수 없는 데이터 형식, 바로 JSON입니다.
PHP에서도 JSON 데이터를 쉽게 주고받을 수 있으며, API 연동이나 프론트-백엔드 통신에서 필수적으로 사용됩니다.

 

 

✅ JSON이란?

JSON (JavaScript Object Notation)은 데이터를 구조화된 텍스트 형태로 표현하는 형식입니다.
HTML보다 가볍고, XML보다 간결하며, 거의 모든 언어에서 쉽게 파싱할 수 있어 API 통신에 가장 널리 사용됩니다.

 

 

✅ PHP에서 JSON 파싱 (디코딩) – json_decode()

예: JSON 문자열 → PHP 객체

$json = '{"name": "토스트", "email": "toast@example.com"}';
$data = json_decode($json);

echo $data->name;  // 출력: 토스트

예: JSON 문자열 → 연관 배열

$data = json_decode($json, true);  // true = 배열 반환
echo $data["email"];  // 출력: toast@example.com

 

 

✅ PHP에서 JSON 생성 (인코딩) – json_encode()

$user = [
  "name" => "toastdev",
  "email" => "toast@example.com"
];

echo json_encode($user);

📌 예시 결과 

{"name":"toastdev","email":"toast@example.com"}

 

 

✅ JSON 인코딩 옵션

json_encode() 함수에는 다양한 옵션 플래그를 사용할 수 있습니다.

옵션 설명
JSON_PRETTY_PRINT 보기 좋게 들여쓰기된 출력
JSON_UNESCAPED_UNICODE 한글을 유니코드로 이스케이프하지 않음
JSON_UNESCAPED_SLASHES 슬래시(/)를 이스케이프하지 않음
JSON_NUMERIC_CHECK 문자열 숫자를 자동으로 숫자로 변환

예제

$data = ["이름" => "토스트", "사이트" => "https://toast.dev"];

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

 

 

✅ JSON 응답을 활용한 간단한 PHP API 구현

1. API 응답용 PHP 파일 (예: user-api.php)

<?php
header('Content-Type: application/json; charset=utf-8');

$user = [
  "name" => "토스트",
  "email" => "toast@example.com",
  "joined" => date("Y-m-d")
];

echo json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>

📌 header('Content-Type: application/json')를 꼭 설정해야 브라우저와 클라이언트가 JSON임을 인식합니다.

 

 

✅ JSON 데이터 검증 (Validation)

입력으로 받은 JSON이 올바른지 확인할 수 있습니다.

$json = file_get_contents("php://input");
$data = json_decode($json, true);

if (json_last_error() !== JSON_ERROR_NONE) {
  echo json_encode(["error" => "잘못된 JSON 형식입니다."]);
  exit;
}

📌 json_last_error()와 json_last_error_msg()를 사용하면 디버깅이 쉬워집니다.

 

 

✅ 보안 고려사항

1. ❗ XSS(크로스사이트 스크립팅)

JSON 출력 시 HTML과 결합하면 스크립트 삽입 공격에 노출될 수 있습니다.
htmlspecialchars() 또는 JSON 전용 Escape 처리를 적용하세요.

$safe = htmlspecialchars($data["comment"], ENT_QUOTES, "UTF-8");

 

2. ❗ CSRF 공격

JSON API에서도 CSRF 토큰을 검증하는 습관을 들이세요.
예: POST 요청 시 헤더 또는 본문에 토큰 포함 후 서버에서 검증.

 

3. ❗ 민감한 데이터 포함 금지

API 응답 시 비밀번호, 토큰, 내부 정보 등 민감한 데이터가 포함되지 않도록 주의하세요.

unset($user["password"]);  // 반드시 제거

 

4. ❗ JSONP (callback) 사용 금지

옛날 방식인 JSONP는 CORS 보완이 아닌 보안 구멍이 될 수 있습니다.
JSONP는 반드시 피하고, CORS 정책을 설정하는 방식을 사용하세요.

 

 

✨ 마무리 요약

  • ✅ json_decode()는 문자열 → PHP 객체/배열
  • ✅ json_encode()는 PHP 배열/객체 → JSON 문자열
  • ✅ JSON 응답 시 Content-Type 헤더는 필수
  • ✅ json_last_error()로 에러를 확인하고 방어 코드를 작성
  • ✅ 보안상 XSS, CSRF, 민감 정보 노출에 특히 주의!

 

 

REST API등 다양한 API 환경이 XML과 JSON 형식으로 이루어 지기 때문에 웹 배우시는 여러분들 께서는 XML과 JSON에 대해 꼭 자세히 이해하고 넘어가는 것이 좋습니다. 

 

#PHPJSON #json_decode #json_encode #PHPAPI #JSON응답 #PHP보안 #XSS방지 #CSRF방지 #웹개발기초 #프로그래밍입문 #PHP기초 #toastdev #API보안 #JSON검증

반응형