| Title | HTTP
Method | Mapping
URL | Method
Name | Request Param | Response
Type |
| --- | --- | --- | --- | --- | --- |
| 데이터 조회
& 캐시 조회 | GET | /{path} | getDataReadCache | @PathVariable String path, @RequestParam String queryString | Response |
| 데이터 조회/생성
& 캐시 조회 | POST | /{path} | postDataReadCache | @PathVariable String path, @RequestParam String queryString, @RequestBody RequestBodyDto body | Response |
| 데이터 삭제
& 캐시 갱신 | DELETE | /{path} | deleteDataRefreshCache | @PathVariable String path, @RequestParam String queryString, @RequestBody RequestBodyDto body | Response |
| 데이터 수정
& 캐시 갱신 | PUT | /{path} | updateDataRefreshCache | @PathVariable String path, @RequestParam String queryString, @RequestBody RequestBodyDto body | Response |
IUserCacheControllerV1.java<aside> 💡 일반적인 요청에 대한 내용이 캐시 컨트롤러라는 이름으로 관리되고 있습니다. 일단 cacheControllr니까 cache에 대한 부분도 메서드에 추가했습니다만, 나중에 개선할 때에는 이러한 부분을 신경쓰면 좋을 듯!
</aside>
package com.sinor.cache.cache.controller;
import org.springframework.web.bind.annotation.*;
// <https://www.baeldung.com/jackson-mapping-dynamic-object#using-jsonanysetter>
// 어떤 형태로 요청이 들어오든 json 타입이라는 가정만 있으면 모두 Map<String, Object> 형식으로 저장 가능하다고 생각
// 기술적인 부분은 시간이 없어서 검증을 못했고, 일단 모든 Dto를 구분하는 기존 방식으로 작성
/**
* 각 API domainPath에 해당하는 내용을 정적으로 구현
*
* @param <Response>
* @param <RequestBodyDto>
*/
@RestController
public interface IUserCacheControllerV1<Response, RequestBodyDto> {
/**
* 데이터 조회 및 캐시 조회
*
* @apiNote <a href="<https://www.baeldung.com/spring-request-response-body#@requestbody>">reference</a>
* @param path 요청에 전달된 path
* @param queryString 요청에 전달된 queryString
*/
@GetMapping("/{path}")
@ResponseBody
Response getDataReadCache(@PathVariable String path, @RequestParam String queryString);
/**
* 데이터 조회 또는 생성 및 캐시 조회
*
* @apiNote <a href="<https://www.baeldung.com/spring-request-response-body#@requestbody>">reference</a>
* @param path 요청에 전달된 path
* @param queryString 요청에 전달된 queryString
* @param body 요청에 전달된 RequestBody 내용에 매핑된 RequestBodyDto 객체
*/
@PostMapping("/{path}")
@ResponseBody
Response postDataReadCache(@PathVariable String path, @RequestParam String queryString, @RequestBody RequestBodyDto body);
/**
* 데이터 삭제 및 캐시 갱신
*
* @apiNote <a href="<https://www.baeldung.com/spring-request-response-body#@requestbody>">reference</a>
* @param path 요청에 전달된 path
* @param queryString 요청에 전달된 queryString
* @param body 요청에 전달된 RequestBody 내용에 매핑된 RequestBodyDto 객체
*/
@DeleteMapping("/{path}")
@ResponseBody
Response deleteDataRefreshCache(@PathVariable String path, @RequestParam String queryString, @RequestBody RequestBodyDto body);
/**
* 데이터 수정 및 캐시 갱신
*
* @apiNote <a href="<https://www.baeldung.com/spring-request-response-body#@requestbody>">reference</a>
* @param path 요청에 전달된 path
* @param queryString 요청에 전달된 queryString
* @param body 요청에 전달된 RequestBody 내용에 매핑된 RequestBodyDto 객체
*/
@PutMapping("/{path}")
@ResponseBody
Response updateDataRefreshCache(@PathVariable String path, @RequestParam String queryString, @RequestBody RequestBodyDto body);
}