EduClass Project

[Project] (4) API 구현(@RequestParam vs @PathVariable)

sagecode 2025. 2. 7. 16:42

@GetMapping 사용법

@GetMapping("/api/problem-set/{id}")
public ResponseEntity<ProblemSetResponse> getProblemSet(@PathVariable Long id) {
    ProblemSet problemSet = problemSetService.getProblemSet(id); // 서비스에서 문제지 조회
    return ResponseEntity.ok(new ProblemSetResponse(problemSet));
}
동작 방식
  • GET /api/problem-set/1 이런 요청이 들어오면
    • {id}에 1이 들어감
    • @PathVariable Long id가 1을 받음
    • problemSetService.getProblemSet(1)이 실행됨

@RequestParam과 차이점은?

  1. @PathVariable → URL 경로에 포함된 값을 받아옴
  2. @RequestParam → 쿼리 파라미터 값을 받아옴

@PathVariable 예제

@GetMapping("/api/problem-set/{id}")
public ResponseEntity<ProblemSetResponse> getProblemSet(@PathVariable Long id) {
    return ResponseEntity.ok(problemSetService.getProblemSet(id));
}
  • 요청 URL: GET /api/problem-set/1
  • id 값은 URL의 일부로 전달됨 (/1)

@RequestParam 예제

@GetMapping("/api/problem-set")
public ResponseEntity<ProblemSetResponse> getProblemSet(@RequestParam Long id) {
    return ResponseEntity.ok(problemSetService.getProblemSet(id));
}
  • 요청 URL: GET /api/problem-set?id=1
  • id 값은 쿼리 파라미터로 전달됨 (?id=1)

왜 @PathVariable을 써야 할까?

  • RESTful API 원칙에 맞게 GET /resource/{id} 형태로 표현
  • URL 자체가 리소스의 계층을 나타내므로 더 직관적이고 의미가 명확
  • @RequestParam보다 리소스를 명확하게 식별하는 데 유리

즉, 특정 문제지(ProblemSet)를 가져오는 API라면 @PathVariable을 쓰는 게 더 적절하다.