티스토리 뷰
728x90
✅ Path Variable이란?
path variable은 URL 경로의 일부로 동적인 값을 전달하기 위한 방법입니다. 예를 들어 /users/123에서 123은 id라는 path variable입니다. RESTful API에서 자원을 명확하게 식별하기 위한 URL 패턴으로 널리 사용됩니다.
1. Path Variable을 사용하는 이유
① RESTful한 API 설계
- GET /users/123: ID가 123인 사용자를 조회
- DELETE /products/987: ID가 987인 상품 삭제
- HTTP 메서드(GET, POST, PUT, DELETE)와 결합하여 자원 중심의 API 구조를 설계할 수 있습니다.
② 자원의 명확한 식별
- URL을 통해 특정 자원을 바로 가리킵니다.
- 예: /articles/2024, /orders/1001/items/3
③ 깔끔하고 직관적인 URL 구조
- /users/10 vs /users?id=10 → 더 직관적이고 구조화된 표현 가능
④ 라우팅 및 처리 최적화
- 대부분의 웹 프레임워크(Spring, Express, FastAPI 등)에서 라우팅을 빠르고 효율적으로 처리할 수 있도록 최적화되어 있음.
⑤ 계층 구조 표현에 유리
- /companies/1/departments/2/employees/3처럼 자원의 계층적 관계를 표현 가능
⑥ SEO와 공유에 유리
- 의미 있는 URL을 통해 검색엔진 최적화(SEO) 및 사용자에게 가독성 높은 링크 제공
2. 대규모 시스템에서의 영향 및 고려사항
✅ 성능 및 구조적 장점
🔹 빠른 라우팅 처리
- path variable은 정적 라우팅보다 느릴 수 있지만 대부분의 프레임워크에서 정규식 기반으로 고성능 매칭 최적화를 지원
🔹 캐싱 최적화에 유리
- URL 자체에 고유성이 있으므로 CDN 또는 Reverse Proxy 캐시 키로 활용하기 좋음
- 예: /products/123 → 상품 상세페이지 캐싱
⚠️ 확장성과 유지보수에서의 주의사항
🔸 URL 구조의 과도한 복잡성
- 너무 많은 중첩된 path variable은 유지보수 어려움
- 예: /a/b/c/d/e/f/{id} → 명세 관리와 테스트 복잡도 상승
🔸 민감 정보 노출 가능성
- path variable은 URL에 그대로 노출되므로, 로그, 히스토리, 서버 로그 등에 민감정보가 남을 수 있음
- 주민번호, 암호화되지 않은 사용자 정보 등은 query/body에 담아야 안전함
🔸 API 버전 관리 어려움
- 구조를 잘못 설계하면 확장 시 전체 URL을 변경해야 할 수 있음
- /v1/users/123 → /v2/users/123/details처럼 버전 전략 명확히 필요
🔸 문서화와 명세화 어려움
- Swagger/OpenAPI 등을 활용해 명확하게 정의해야 협업 및 유지보수가 수월함
3. Best Practices (대형 시스템 대응 전략)
항목 | 권장 사항 |
URL Depth | 가급적 2~3단계로 유지 |
Query vs Path | 리소스 ID는 path, 필터/정렬은 query param |
민감 정보 | path로 전달하지 말고 query/body로 대체 |
API 문서화 | OpenAPI(Swagger), Postman 등으로 명세화 |
캐싱 전략 | path 기반 캐시 키 활용 (CDN, Nginx 등) |
버전 관리 | /v1/, /v2/ 명확히 구분하여 확장성 확보 |
728x90
'Programming' 카테고리의 다른 글
CRON / Scheduler (1) | 2025.04.17 |
---|---|
Thread / Coroutine / Green Thread (0) | 2025.04.17 |
APISIX Lua 플러그인: RESTHeart 데이터 Kafka 및 외부 API 전송 튜토리얼 (0) | 2025.04.16 |
Kafka Connect의 SMT(Single Message Transform)를 활용하여 RESTHeart에 HTTP 요청(조회/등록/수정/삭제) (0) | 2025.04.15 |
Spring Boot로 RESTHeart CRUD (Create, Read, Update, Delete) (0) | 2025.04.14 |