본문 바로가기
springboot

[springboot] 쿼리스트링(Query String)과 주소변수매핑(Path variable)

by 개발LOG 2025. 1. 14.
반응형

Spring Boot에서 URL 매핑을 사용할 때, 쿼리스트링Path Variable (/book/{bookId})은 URL에서 데이터를 전달하는 두 가지 주요 방법입니다. 이들의 차이점과 사용 사례를 설명하겠습니다.

1. 쿼리 스트링 (Query String)

쿼리 스트링은 URL에서 "?" 기호 뒤에 key-value 쌍으로 데이터를 전달하는 방식입니다. 여러 개의 파라미터를 **"&"**로 구분하여 전달할 수 있습니다. 쿼리 스트링은 URL의 끝에 위치하며, 서버에서 해당 파라미터들을 추출하여 처리합니다.

예시:

http://example.com/books?title=java&author=John

위 URL에서 쿼리 스트링은 ?title=java&author=John 부분입니다. 이 URL은 titleauthor 파라미터 값을 서버로 전달합니다.

특징:

  • 가독성: URL 끝에 데이터가 키-값 쌍으로 보이기 때문에 사용하기 직관적입니다.
  • URL 길이 제한: 대부분의 브라우저는 URL 길이에 제한이 있기 때문에 너무 많은 데이터나 긴 데이터를 쿼리 스트링에 포함시키면 문제가 발생할 수 있습니다.
  • 비보안 데이터: URL에 포함되므로 민감한 데이터(예: 패스워드, 카드 정보 등)를 쿼리 스트링에 담지 않도록 해야 합니다. 사용자가 URL을 쉽게 확인하고 수정할 수 있기 때문입니다.

Spring에서의 사용 예:

@GetMapping("/books")
public String getBooks(@RequestParam String title, @RequestParam String author) {
    // title과 author 파라미터를 이용해 책 목록을 검색
    return "books";
}

위 코드에서 title과 author는 쿼리 파라미터로 전달된 값을 받는 부분입니다. 예를 들어 http://example.com/books?title=java&author=John 요청이 들어오면 title="java", author="John"으로 매핑됩니다.

2. Path Variable (경로 변수)

경로 변수는 URL 경로의 일부를 변수로 사용하여 데이터를 전달하는 방식입니다. 이를 사용하면 URL 자체의 구조에서 특정 데이터를 추출할 수 있습니다. URL 경로에서 **중괄호 {}**를 사용하여 변수명을 지정합니다.

예시:

http://example.com/book/12345

위 URL에서 12345는 bookId라는 경로 변수로 간주되며, 이 값을 처리하기 위해 URL 패턴에 맞는 매핑을 정의합니다.

특징:

  • 직관적: 경로 자체에 데이터를 포함시키기 때문에 해당 리소스나 데이터와의 관계가 명확해집니다.
  • RESTful API에서 자주 사용됩니다. 예를 들어, 리소스 ID를 URL 경로로 전달할 때 유용합니다.
  • URL의 구조적 의미: 리소스(예: 책, 사용자 등)의 고유 ID를 URL에 직접 포함시킬 수 있어, RESTful 서비스에서 자주 사용됩니다.

Spring에서의 사용 예:

@GetMapping("/book/{bookId}")
public String getBook(@PathVariable Long bookId) {
    // bookId를 이용해 특정 책을 조회
    return "book";
}

위 코드에서 {bookId}는 URL 경로에 포함된 경로 변수입니다. 예를 들어 http://example.com/book/12345 요청이 들어오면 bookId=12345로 매핑됩니다.

3. 쿼리 스트링과 Path Variable의 차이점

특성쿼리    스트링 (?key=value) Path Variable (/book/{bookId})
데이터 전달 방식   URL의 끝에 파라미터 형태로 전달 URL 경로에 변수 형태로 전달
주요 용도   검색, 필터링 등 여러 개의 값을 전달할 때 유용 고유 리소스를 식별할 때 사용 (예: 아이템 ID, 페이지 번호 등)
URL에서의 위치   ? 뒤에 파라미터가 포함됨 URL 경로에서 변수로 사용됨
가독성   여러 파라미터가 나열되어 가독성이 떨어질 수 있음 리소스 식별에 직관적이며 깔끔한 URL을 만들 수 있음
URL에 노출되는 데이터   상대적으로 많은 양의 데이터를 전달하기에 적합 특정 리소스를 식별하는 간단한 정보만 노출됨
보안   민감한 데이터를 포함할 경우 보안상 위험 데이터가 URL에 포함되어 있지만, 보통 ID와 같은 간단한 값
일반적인 사용 예   검색, 필터링, 페이지 번호 등 리소스 식별(예: 특정 책, 사용자)

4. 쿼리 스트링과 Path Variable을 동시에 사용하는 예

쿼리 스트링과 Path Variable을 동시에 사용하는 것도 가능합니다. 예를 들어, 특정 책 ID를 기준으로 검색하고, 쿼리 스트링으로 추가적인 필터 조건을 전달할 수 있습니다.

예시:

http://example.com/book/12345?title=java&author=John

Spring Controller에서의 사용 예:

@GetMapping("/book/{bookId}")
public String getBookDetails(@PathVariable Long bookId, @RequestParam String title, @RequestParam String author) {
    // bookId, title, author를 이용해 책 정보를 조회
    return "bookDetails";
}

5. 결론

  • 쿼리 스트링다수의 필터나 파라미터를 전달할 때 유용합니다. 예를 들어, 검색 결과를 필터링하거나, 페이지네이션을 처리할 때 자주 사용됩니다.
  • Path Variable특정 리소스를 식별하는 데 사용됩니다. 주로 RESTful API에서 사용되며, 리소스의 고유한 ID를 URL 경로에 포함시켜 명확하게 표현할 수 있습니다.

따라서, 두 방법은 목적에 따라 선택적으로 사용됩니다. 데이터의 성격과 URL 설계에 맞게 선택하는 것이 중요합니다.

반응형