💻 쇼핑몰 자동화 & 웹 개발 가이드

[PHP API] 개발자를 위한 REST API 최적화 팁

rhandy 2025. 4. 29. 07:10
728x90

빠르고, 가볍고, 유지보수도 쉬운 REST API를 원하신다면 지금 이 팁들을 반드시 확인하세요.

안녕하세요, 저는 PHP로 다양한 프로젝트를 진행하면서 수많은 REST API를 만들어왔어요. 처음에는 작동만 하면 됐지만, 트래픽이 늘고 클라이언트가 다양해질수록 속도, 확장성, 응답 구조까지 고민하게 되더라고요. 특히 API가 느려지거나 인증 문제가 생기면 클라이언트에서 바로 항의가 들어오니까요.

그래서 오늘은 PHP 기반 REST API를 실무에서 최적화하기 위한 핵심 팁들을 정리해보았습니다. 캐싱, SQL 최적화, 응답 포맷, 헤더 처리, 보안까지 실제로 적용 가능한 팁들이니 꼭 한 번 체크해보세요!

1. 요청 캐싱으로 속도 향상

데이터가 자주 바뀌지 않는 API라면 캐싱만으로도 서버 부담을 확 줄일 수 있습니다. 특히 조회(GET) API는 Redis, Memcached 또는 간단한 파일 캐싱을 도입하면 속도가 눈에 띄게 빨라져요.

  • 파일 캐시: 간단하고 빠르게 구현 가능
  • Redis: 대규모 서비스에 적합, TTL 설정 유연
  • Cache-Control, ETag 헤더로 클라이언트 측 캐싱도 가능
// 간단한 파일 캐시 예제
$cacheKey = 'user_list_cache.json';
if (file_exists($cacheKey) && time() - filemtime($cacheKey) < 60) {
  echo file_get_contents($cacheKey);
  exit;
}
// 캐시가 없을 경우 DB 조회 후 저장
$data = fetchUsersFromDB();
file_put_contents($cacheKey, json_encode($data));
echo json_encode($data);

2. 데이터베이스 쿼리 최적화 전략

API 속도를 떨어뜨리는 가장 큰 요인 중 하나는 비효율적인 SQL 쿼리입니다. 복잡한 조인, 인덱스 누락, SELECT * 남발 등은 반드시 개선해야 해요.

비효율적인 쿼리 개선된 쿼리
SELECT * FROM users SELECT id, name, email FROM users
WHERE email = 'abc@test.com' WHERE email = 'abc@test.com'
+ (email 컬럼 인덱스 생성)

또한, LIMIT + OFFSET을 활용한 페이징 처리도 서버 부하를 줄이는 중요한 전략 중 하나입니다.

728x90

3. JSON 응답 구조 최소화

REST API의 응답은 간결하고 명확해야 합니다. 과도한 중첩 구조나 사용하지 않는 필드는 제거하세요. 프론트엔드에 맞춰 필요한 데이터만 전달하면 전송 속도도 빨라지고 처리도 쉬워져요.

  • 중첩 구조 최소화: {"user":{"name":"홍길동"}}{"name":"홍길동"}
  • 불필요한 필드 제거: 사용하지 않는 데이터는 포함하지 말기
  • JSON_UNESCAPED_UNICODE 옵션으로 한글 깨짐 방지
$data = ['id' => 1, 'name' => '홍길동'];
echo json_encode($data, JSON_UNESCAPED_UNICODE);

4. 불필요한 헤더 제거

API 응답에서 필요하지 않은 HTTP 헤더가 너무 많이 포함되면, 패킷 사이즈가 커지고 보안적으로도 취약해질 수 있어요. X-Powered-By, Server 등의 헤더는 숨기거나 제거하는 것이 좋습니다.

// Apache나 Nginx 설정에서 제거 가능
// PHP에서는 이와 같이 헤더를 명시적으로 제거
header_remove("X-Powered-By");
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");

또한, CORS 관련 헤더는 필요할 때만 추가해야 하며, Access-Control-Allow-Origin: *은 임시 테스트 외에는 지양해야 합니다.

5. 인증과 토큰 처리 보안 강화

REST API에서 인증은 매우 중요한 부분입니다. 특히 JWT 토큰을 사용할 경우, 유효성 검사, 만료 시간, 서명 검증, 토큰 재사용 방지까지 철저히 관리해야 합니다.

취약한 방식 권장 방식
쿼리스트링에 토큰 전달
?token=abc
Authorization 헤더 사용
Bearer abc
JWT 검증 없이 단순 문자열 비교 JWT 라이브러리로 서명, 만료 등 검증
토큰 재사용 방지 미적용 DB 또는 Redis에 블랙리스트 관리

보안에 취약한 API는 실무에서 가장 먼저 문제가 됩니다. 인증만큼은 꼼꼼하게 점검하고 구성하세요.

 

 

PHP preg_replace() 함수로 패턴 치환

PHP에서 문자열을 다룰 때, 특정 패턴을 찾아 다른 문자열로 치환(Replace) 해야 하는 경우가 많습니다.예를 들어, HTML 태그 제거, 공백 제거, 특정 단어 필터링, 정규식 기반 문자열 변환 등에 사용

rhandykim.tistory.com

6. 최적화를 위한 체크리스트 요약

  • GET 요청은 반드시 캐싱을 고려했는가?
  • DB 쿼리는 필요한 필드만 SELECT하며 인덱스를 활용했는가?
  • JSON 응답은 불필요한 중첩 없이 간결한가?
  • 응답 헤더에서 민감하거나 불필요한 정보는 제거했는가?
  • 토큰은 헤더로 전달되며 검증 로직은 신뢰할 수 있는가?

이 항목들만 제대로 체크해도 여러분의 PHP REST API는 성능과 보안 모두 한층 업그레이드될 거예요!

 

Q 캐시를 쓰면 데이터가 바뀌어도 갱신이 안 되지 않나요?

맞습니다. 그래서 TTL(Time To Live)을 설정하거나, 데이터 변경 시 캐시 파일을 지우는 방식으로 처리합니다. Redis에서는 key를 만료시키거나 덮어쓰기도 쉽습니다.

A TTL을 설정하거나 업데이트 시 캐시를 삭제하세요!
Q JSON 데이터 크기가 클수록 느려지나요?

맞습니다. 특히 모바일 환경에서는 전송량이 성능에 영향을 줍니다. 중첩된 구조, 불필요한 필드는 꼭 제거하세요. 필요한 필드만 보내는 게 핵심이에요.

A 필요한 데이터만 추려서 가볍게 보내는 게 핵심입니다!
Q PHP에서 JWT는 어떤 라이브러리를 쓰면 좋을까요?

firebase/php-jwt가 가장 널리 쓰이며 신뢰도도 높습니다. Composer로 쉽게 설치할 수 있고, 서명/검증/만료시간 설정이 간편해요.

A firebase/php-jwt를 강력 추천합니다!
Q API 응답 속도는 어느 정도면 적당한가요?

보통 300ms 이하가 이상적이며, 100ms 이내라면 매우 우수한 속도입니다. 1초를 넘는 응답은 사용자가 체감할 수 있어 개선이 필요해요.

A 300ms 이내를 목표로 최적화해보세요!
Q 헤더 최적화는 실제 성능에 큰 영향을 줄까요?

응답 헤더 자체는 데이터 크기에 비해 작지만, 반복 요청이 많거나 CDN 연동 시에는 중요해집니다. 또한, 보안 측면에서도 꼭 신경 써야 할 부분입니다.

A 헤더는 보안과 CDN 활용 시 반드시 신경 써야 해요!

 

처음엔 단순히 "동작하는 API"만 만들면 되는 줄 알았어요. 그런데 서비스가 커지고 사용자 수가 늘어나다 보니, 성능과 보안이 진짜 중요하다는 걸 깨달았죠. Redis 캐시만 적용해도 조회 속도가 10배 빨라졌고, 쿼리를 최적화하니까 서버 CPU 사용률이 확 줄었어요. JSON 응답도 한결 가볍게 만들고 나니까, 모바일에서도 반응 속도가 체감될 정도로 빨라졌고요.

이번 글에 정리한 팁들은 저도 실무에서 직접 써보고 효과 본 것들이에요. 여러분의 PHP API가 더 빠르고 안전하게 동작하길 바라며, 지금부터 하나씩 적용해보세요. 작은 변화가 API 전체의 품질을 바꿉니다. 💡

728x90