PHP PHP로 GraphQL 서버 직접 구현하기
페이지 정보

영삼이
본문
✅ PHP로 GraphQL 서버 직접 구현하기
GraphQL은 REST보다 유연하고 효율적인 데이터 질의 방식으로, 복잡한 API 응답을 클라이언트가 직접 설계할 수 있게 해줍니다. PHP에서도 GraphQL 서버를 직접 구현할 수 있으며, 여기서는 의존성 최소화 + 직접 구현 기반으로 소개합니다.
📦 필요한 라이브러리
PHP에서 GraphQL을 구현하기 위해 가장 널리 사용되는 라이브러리는 webonyx/graphql-php 입니다.
composer require webonyx/graphql-php
🧱 1. 간단한 User 타입 정의
[code=php]
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
$userType = new ObjectType([
'name' => 'User',
'fields' => [
'id' => Type::nonNull(Type::int()),
'name' => Type::string(),
'email' => Type::string(),
]
]);
[/code]
🔍 2. Query 타입 정의
[code=php]
$queryType = new ObjectType([
'name' => 'Query',
'fields' => [
'user' => [
'type' => $userType,
'args' => [
'id' => Type::nonNull(Type::int())
],
'resolve' => function ($root, $args) {
// DB나 모델에서 조회
return [
'id' => $args['id'],
'name' => 'Kim',
'email' => 'kim@example.com'
];
}
]
]
]);
[/code]
⚙️ 3. 스키마 + 실행 처리
[code=php]
use GraphQL\Schema;
use GraphQL\GraphQL;
$schema = new Schema([
'query' => $queryType
]);
$rawInput = file_get_contents('php://input');
$input = json_decode($rawInput, true);
$query = $input['query'];
$result = GraphQL::executeQuery($schema, $query);
$output = $result->toArray();
header('Content-Type: application/json');
echo json_encode($output);
[/code]
📤 4. 요청 예시
POST /graphql
Content-Type: application/json
{
"query": "{ user(id: 1) { name, email } }"
}
✅ GraphQL vs REST 비교
항목 | REST | GraphQL |
---|---|---|
데이터 형태 | 고정된 구조 | 클라이언트가 정의 |
다중 요청 | 여러 API 호출 | 단일 요청 |
오버페치 | 자주 발생 | 거의 없음 |
문서화 | 별도 필요 | 스키마 기반 자동 문서화 가능 |
🧠 실무 적용 팁
-
쿼리 depth 제한 (무한 중첩 공격 방지)
-
인증 미들웨어로 사용자 확인
-
응답 캐싱은 복잡하므로 개별 리졸버 단위로 적용
-
Laravel에서는 Lighthouse 패키지를 추천
🧠 요약
-
webonyx/graphql-php
로 PHP에서도 완전한 GraphQL 서버 구현 가능 -
Query, Type, Schema를 구성하고
GraphQL::executeQuery
로 실행 -
REST의 단점을 보완하며 클라이언트 자유도가 높은 API 설계 가능
- 이전글PHP에서 캐시 전략 세분화 하기 (Opcode, DB, 파일 등) 25.03.28
- 다음글PHP + Docker 환경 최적화 꿀팁 25.03.28
댓글목록
등록된 댓글이 없습니다.