안녕하세요, 토스트 데브입니다!
웹 개발에서 빠질 수 없는 데이터 형식, 바로 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검증
'Programming > PHP' 카테고리의 다른 글
[PHP] #14 PHP로 XML 응답 처리 하는 방법, 외부 데이터 읽기 및 파싱 가이드! (0) | 2025.07.25 |
---|---|
[PHP] #13 PHP 세션(Session)과 쿠키(Cookie) 완벽 이해하기 (2) | 2025.07.24 |
[PHP] #12 PHP 폼 데이터 입력 검증 및 보안, 안전한 웹 개발의 시작 (0) | 2025.07.23 |
[PHP] #11 PHP 폼 데이터 처리, GET과 POST 처리 방식까지 완벽정리! (2) | 2025.07.22 |
[PHP] #10 PHP 함수(Function), 정의, 호출, 매개변수, 변환값, 배열 변환까지 완벽 정리! (0) | 2025.07.21 |