์ด์ ๋ถ๋ก ์ธ์ฆ, ์ธ๊ฐ ์์ ์ด ์๋ฃ๋์๋ค. ์ง์ง ์ค๋ ๊ฑธ๋ ธ๋ค. ์๋๋ฅผ ์ข ๋ ๋ผ ํ์๊ฐ ์๋ค.
์ค๋๋ถํฐ๋ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ง๋ค๊ฑด๋ ์ด๋ฒ์๋ DB๋ฅผ ์ด์ฉํ์ง ์์ ๊ฒ์ด๋ค.
์ฟ ํค๋ฅผ ์ด์ฉํด ๋ณผ ์๊ฐ์ด๋ค. ์ฟ ํค์ ์ฅ๋ฐ๊ตฌ๋ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ฃ์ด์ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ๋ ๊ฒ์ด๋ค.
ํ ๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๋ ์ค์ํ๋ค๊ณ ์๊ฐ์ ํ๋๋ฐ ๋ณดํต ์ฅ๋ฐ๊ตฌ๋๋ ์ฟ ํค๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ด์ฉํ๋ค๊ณ ํ๋ค.
๋๋ ์จ์ ํ API๋ก๋ง ๊ตฌํ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฟ ํค๋ฅผ ํตํด ๊ตฌํํด๋ณผ ์๊ฐ์ด๋ค.
์ฅ๋ฐ๊ตฌ๋๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ ๊น?
์ผ๋จ DB์ ์ ์ฅ์ ๋ฐ๋ก ํ์ง ์๊ณ ์ฟ ํค๋ก ๊ตฌํ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ์๊ฐํด๋ณด์๋ค.
๊ธฐ๋ฅ
1. ์ํ์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ
2. ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ ๋ชฉ๋ก ์กฐํ
=> ์์ ๊ณผ ์ญ์ ๊ฐ ์๋ ์ด์ ๋ ํ๋ฐํธ๋จ์์ ํ ์ ์์ง ์์๊น..? (์๋๊ฐ.. ์ญ์ ๋ ํ์ํ๋ ค๋?)
์ค์ํ ๊ฑด! json ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ ๋ฐ์ ์ฟ ํค๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ API๋ฅผ ์ค๊ณํ๋ ๊ฒ ๋์ ์ฃผ๋ ๋ชฉํ์ด๋ค.
์ผ๋จ ์ํ์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ๋ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํด๋ณด์. ์ฟ ํค๋ฅผ ์ด์ฉํด์!
1. ์๋ต ์ฟ ํค๋ฅผ ๋ฐ์ ์์ผํ๋ค.
Cookie[] requestCookies = request.getCookies()
2. ์๋ต ์ฟ ํค๊ฐ ์์ ๊ฒฝ์ฐ ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด๊ฐ ๋ด๊ธด ์ฟ ํค๋ฅผ ์ถ์ถํด์ผ ํ๋ค.
/* ์นดํธ ์ฟ ํค ๋ฐํ ๋ฉ์๋ */
public static Cookie getCartCookie(Cookie[] requestCookies) {
for (Cookie cookie : requestCookies) {
if (COOKIE_KEY.equals(cookie.getName())) {
return cookie;
}
}
return null;
}
=> Cart ์ปจํธ๋กค๋ฌ์์ ์ ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ฏ๋ก ๋ฐ๋ก utils๋ฅผ ๋ง๋ค์๋ค.
3. ์๋ต ์ฟ ํค๊ฐ ์์ ๊ฒฝ์ฐ ์ฟ ํค๋ฅผ ๋ฐ๋ก ์์ฑํด์ค๋ค.
/* ์๋ต ์ฟ ํค ์์ ๊ฒฝ์ฐ ์ฟ ํค ์์ฑ */
if (responseCookie == null) {
responseCookie = new Cookie(COOKIE_KEY, URLEncoder.encode(JsonUtil.objectToString(new HashMap<Integer, CartDTO>()), ENC_TYPE));
responseCookie.setPath("/api/carts");
}
4. json์ผ๋ก ๋ฐ์์จ ์ํ ์ ๋ณด๋ฅผ ๋ฌธ์์ด๋ก ๋งคํํ์ฌ ์ฟ ํค์ ๋ด์์ค๋ค.
๋งคํํ๋ ๊ฒ์ ObjectMapper๋ฅผ ์ด์ฉํด utils ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
์ฃผ์ํ ์ ์ ์ฟ ํค์ ๋ด์ ๋ ์ธ์ฝ๋ฉ์ ํด์ผ ํ๋ค.
String cookieValue = responseCookie.getValue();
Map<Integer, CartDTO> cartDTOMap = JsonUtil.stringToMap(URLDecoder.decode(cookieValue, ENC_TYPE), Integer.class, CartDTO.class);
CartDTO cartItem = cartDTOMap.get(productNo);
if (cartItem != null) {
cartItem.setProductStock(cartDTO.getProductStock() + cartItem.getProductStock());
}
cartDTOMap.put(productNo, cartDTO);
responseCookie.setValue(URLEncoder.encode(JsonUtil.objectToString(cartDTOMap), ENC_TYPE));
5. ์ฟ ํค๋ฅผ response ๊ฐ์ฒด์ ์ ์ฅํ ํ api์ Return body์ ์ฑ๊ณต ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
response.addCookie(responseCookie);
return ResponseEntity.ok().body(ResponseMessage.ADD_MESSAGE.getValue());
์ผ๋จ ๋จ์ผ ์ํ ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ API๋ง ๊ตฌํํ๋ค.. ๊ฐ ๊ธธ์ด ๋ฉ๋ค ๋ฉ์ด
์ฐธ์กฐ : https://interconnection.tistory.com/137
Jackson ObjectMapper ์ ๋ฆฌ
๊ฐ์ Java ๊ฐ๋ฐ์๋ผ๋ฉด Jackson์์ ์ ๊ณตํ๋ ObjectMapper์ ์์ฃผ ๋ง์ฃผ์น๊ฒ ๋ฉ๋๋ค. Java ํด๋์ค ๋ด์ฉ์ ํ์ธํ๊ฑฐ๋ ๋ด์ฉ๋ฌผ์ Parsing ๊ณผ์ ์ ํ์ํ ์ปค์คํฐ๋ง์ด์ง์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฌผ๋ก ์ค์ํ ๊ธฐ
interconnection.tistory.com
์ฐธ์กฐ : https://devidea.tistory.com/25
์คํ๋ง ํ: *Utils ํด๋์ค ํ์ฉ
spring ๋ธ๋ก๊ทธ์ ๊ฒ์๋์ด ์๋ spring *Utils ํด๋์ค๋ค์ ๋ํ ํ์ฉ ํ์ด๋ค. ๋ธ๋ก๊ทธ์ youtube ์์๊ณผ ํจ๊ป ์์ธํ ์ค๋ช ํ๊ณ ์๋ค. Spring Tips: The Spring Framework *Utils Classes ํฌ๊ฒ ๋ณด๋ฉด ์๋ Utils๋ค์..
devidea.tistory.com
'๐ Spring Framework > Spring Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2022.05.24 ใ์ฝ๋ ๋ฆฌํฉํ ๋ง Ver.2ใ (0) | 2022.05.24 |
---|---|
2022.05.22 ใShopping Cart API [Ver.2]ใ (0) | 2022.05.22 |
2022.05.20 ใ์คํ๋ง ๋ถํธ ๊ถํ ์ฒ๋ฆฌใ (0) | 2022.05.20 |
2022.05.18 ใRedis DB ์ ์ฉใ (0) | 2022.05.18 |
2022.05.16 ใ๋ฆฌํฉํ ๋งใ (0) | 2022.05.16 |