HTTP 비연결성을 극복하기 위해 데이터를 서버에 전달하기 위한 수단
- HTTP 비연결성 이란
- 클라이언트 <> 서버 사이의 연결을 유지하지 않는 것
RequestParam 이란 ?
- 쿼리 파라미터 또는 POST 요청 본문에서 값을 추출하여 서버에 전달
- 사용 예시
- @GetMapping("/api/users") >>>> * URL에 쿼리 파라미터가 포함 되지 않는다. (페이지 변화 X)
public ResponseEntity<List<User>> getUsers(
@RequestParam("page") int page,
@RequestParam("size") int size) {
// page와 size를 사용하여 사용자 목록을 조회하고 응답
}
- @GetMapping("/api/users") >>>> * URL에 쿼리 파라미터가 포함 되지 않는다. (페이지 변화 X)
- 쿼리 파라미터란 ?
- 웹 요청에서 URL에 추가되어 있는 특정 정보를 나타내는 부분으로 일반적으로 URL의 끝에 ?를 추가하여 쿼리 파라미터를 시작하고, key=value 쌍으로 구성
- /api/users?page=1&size=20
- 웹 요청에서 URL에 추가되어 있는 특정 정보를 나타내는 부분으로 일반적으로 URL의 끝에 ?를 추가하여 쿼리 파라미터를 시작하고, key=value 쌍으로 구성
- POST 요청 본문 이란?
- Body의 x-www-from-urlencoded, key-value 값으로 받아와 서버로 넘겨주는 방식
- 사용 예시
- 여러 리소스에 대한 작업에 적합
- 이 처럼 여러 리소스 즉, 하나의 페이지를 새로 열려는 게 아닌 현재의 페이지에서 여러 리소스를 가져오려 할 때 사용
- 게시글 한개의 클릭 상태가 아닌 게시판에서 조건을 걸고 여러 글을 조회 하는 상태
- 사용자 목록, 게시물 목록
- 이 처럼 여러 리소스 즉, 하나의 페이지를 새로 열려는 게 아닌 현재의 페이지에서 여러 리소스를 가져오려 할 때 사용
PathVariable 이란?
- URL 경로에 포함된 변수값을 추출해 서버에 전달
- 사용 예시
- @GetMapping("/api/users/{id}") >>>> * URL에 변수가 포함 된다. (페이지 변화 O)
public ResponseEntity<User> getUserById(@PathVariable Long id) {
// id에 해당하는 사용자 정보를 조회하는 로직
}
- @GetMapping("/api/users/{id}") >>>> * URL에 변수가 포함 된다. (페이지 변화 O)
- 사용 예시
- 단일 리소스에 대한 작업에 적합
- 이 처럼 단일 리소스 즉, 하나의 페이지를 새로 열려고 할 때 사용
- 특정 사용자 정보, 특정 게시물 정보
- 이 처럼 단일 리소스 즉, 하나의 페이지를 새로 열려고 할 때 사용
RequestParam | PathVariable | |
데이터 추출 방식 | 쿼리 파라미터 POST 요청 | URL의 변수 |
페이지 변화 | 페이지 변화 X | 페이지 변화 O |
가이드 라인 | 여러 리소스 사용자 목록 게시물 목록 |
단일 리소스 특정 사용자 정보 특정 게시물 정보 |
내가 헷갈렸던 것 !
@RequestParam에 URL에 쿼리 파라미터가 포함되지 않기 때문에 URL의 변화가 없다 > 페이지 변화가 없다.
- 그러니까 우리가 코드를 작성할 때 위에서도 보면 @GetMapping("/api/users") 요렇게만 작성한다.
근데 @PathVariable 같은 경우는 @GetMapping("/api/users/{id}") 요렇게 작성한다.
즉 RequestParam의 URL엔 기본적인 URL만 있는 거고 추후에 값이 필요할 때 key-value 쌍으로 그 URL 뒤에
/api/users?page=1&size=20 과 같이 값만 붙을뿐 페이지가 변화되진 않는다는 거다.
(난 뒤에 key-value로 쿼리 파라미터가 분명 계속 달라질텐데 왜 URL의 변화가 없는거지? 하고 헷갈렸었다)
그래서 우리가 게시판 페이지에서 특정 검색어로 검색을 하면 페이지의 변화 없이(URL 변화 없이) 현재의 URL 뒤에 쿼리 파라미터만 붙는 경우가 생기는 것.(그니께 이건 URL이 변한 것이 아니여, 걍 쿼리 파라미터만 붙었을뿐!)
반대로 PathVariable은 처음 생성 때! 부터 이미 @GetMapping("/api/users/{id}") 요렇게 변화 될 변수의 값이 들어가 있는 게 보인다. 그러니까 즉 URL이 계속 변하는 것 ! 그래서 특정 게시물을 클릭했을 때 ! 아니면 특정 사용자의 정보를 보고자 눌렀을 때! 페이지가 바뀌면서 게시물 또는 사용자의 정보창이 뜨는 ! 그 상황을 말하는 것이었다.
'Java > Spring' 카테고리의 다른 글
RedisRepositoryConfig 설정 (0) | 2024.04.16 |
---|---|
PasswordEncoder 알고리즘 이모저모 (0) | 2024.04.15 |
Redis로 ttl 설정해보기 (0) | 2024.03.18 |
[에러] SLF4J: Class path contains multiple SLF4J bindings (0) | 2024.03.18 |
Test 이모저모 - @withMockUser (0) | 2024.03.06 |