REST API 기반으로 주소 맵핑 처리
1. GET 방식에 주소 맵핑
2. 클라언트에서 보낸 값을 받는 방식에 이해 응답에 이해
3. Path Variable 방식으로 값을 보내거나 받는 방식에 이해
4. Query Parameter 방식으로 값을 받는 방법 이해
- key=value 구조 데이터 파싱 처리
- Map 사용 방식 구조 처리
- Dto 객체를 만들어서 처리
💡 멱등성(Idempotency)이란 같은 작업을 여러 번 수행해도 결과가 달라지지 않는 성질을 의미합니다. 이 개념은 특히 HTTP 메서드나 데이터베이스 연산에서 자주 사용됩니다.
멱등성을 가짐 (GET, PUT, DELET )
비 멱등성을 가짐 (POST)
멱등성의 의미?
안정성: 멱등성을 가진 연산은 중복 요청에 대해 안전합니다. 네트워크 문제로 인해 동일한 요청이 여러 번 전달되더라도, 최종 결과는 변하지 않으므로 안전하게 처리할 수 있습니다.
데이터 일관성: 멱등성은 시스템이 일관된 상태를 유지하도록 도와줍니다. 특히, 분산 시스템에서 동일한 작업이 여러 번 실행될 가능성이 있을 때, 멱등성은 데이터 무결성을 보장합니다.
멱등성이란 같은 작업을 여러 번 수행해도 결과가 달라지지 않는 성질을 의미하며, 주로 HTTP 메서드나 데이터베이스 연산에서 사용됩니다. 멱등성을 가진 연산은 안정적이고 예측 가능하며, 시스템의 일관성을 유지하는 데 중요한 역할을 합니다.
💡 쿼리 스트링(Query String)과 경로 매개변수(Path parameter)는 모두 HTTP 요청에서 파라미터를 전달하는 방식입니다. 그러나 다음과 같은 차이점이 있습니다.
쿼리 스트링(Query String)
- URL 뒤에 '?'를 붙이고 파라미터를 key-value 쌍으로 전달합니다.
- 파라미터는 '&'로 구분되며, '='로 key와 value를 구분합니다.
- 브라우저의 캐시와 검색 엔진에서 높은 가중치를 부여합니다.
- 파라미터를 전달할 때 key와 value를 쌍으로 전달하기 때문에, 순서를 변경해도 문제가 없습니다.
예시 : http://example.com/search?q=keyword&page=1
경로 매개변수(Path parameter)
- URL 경로의 일부로 파라미터를 전달합니다.
- 경로 변수(Path variable)를 사용하여 파라미터를 전달하며, {}로 변수를 감싸서 표시합니다.
- 일반적으로 RESTful API에서 사용되며, URL 자체가 파라미터 정보를 전달합니다.
- 파라미터를 전달할 때 key와 value를 쌍으로 전달하지 않습니다.
예시 : http://example.com/users/{id}
package com.tenco.demo_v1.controller;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
@RestController // IoC -> @Controller + @ResponseBody
public class GetApiController {
// 주소 설계 : http://localhost:8080/hello
@GetMapping("/hello")
public String hello() {
return "Say Hello ~";
}
// 쿼리스트링 방식(@RequestParam)
// 주소 설계 : http://localhost:8080/qs1?name=둘리
@GetMapping("/qs1")
public String qs1(@RequestParam(name = "name") String name) {
return "name=" + name;
}
// 쿼리스트링 방식(@RequestParam)
// 주소 설계 : http://localhost:8080/qs2?name=둘리&age=10
@GetMapping("/qs2")
public String qs2(@RequestParam(name = "name") String name,
@RequestParam(name = "age", required = false, defaultValue = "1") Integer age) {
return "name = " + name + " : age = " + age;
}
// 쿼리스트링 방식(@RequestParam)
// 주소 설계 : http://localhost:8080/qs3?name=둘리&age=10&groupId=com.tenco
@GetMapping("/qs3")
public String qs3(@RequestParam Map<String, String> data) {
// Map 방식으로 동적으로 데이터 바인딩 하기
StringBuffer sb = new StringBuffer();
data.entrySet().forEach(entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println();
sb.append(entry.getKey() + "=" + entry.getValue());
});
return sb.toString();
}
// 쿼리스트링 방식(@RequestParam)
// 주소 설계 : http://localhost:8080/qs4?name=둘리&age=10&groupId=com.tenco
// @GetMapping("/qs4")
// public String qs4(User user) {
// // 메서지 컨버터
// return user.toString();
// }
@GetMapping("/qs4")
public User qs4(User user) {
// 메서지 컨버터
return user;
}
// 클래스
@AllArgsConstructor
@Getter
@ToString
class User {
private String name;
private Integer age;
}
}
sq1
sq2
sq3
sq4
'Spring boot' 카테고리의 다른 글
[Spring boot] 스프링 부트 DB 접근 기술 ORM (1) | 2024.10.01 |
---|---|
[Spring boot] POST 방식에 이해 및 실습 (1) | 2024.09.26 |
[Spring Boot] Bank App (9) - MainController, mainPage.jsp 구현 (0) | 2024.08.14 |
[Spring Boot] Bank App (8) - 화면 구현 _2(레이아웃 분리) (0) | 2024.08.14 |
[Spring Boot] Bank App (7) - 화면 구현 _1(템플릿 가져오기) (0) | 2024.08.13 |