๐Ÿ“š TIL 24์ผ์ฐจ

temprmnยท2023๋…„ 6์›” 19์ผ
0
post-thumbnail

์˜ค๋Š˜์˜ ์ฃผ์š”์‚ฌํ•ญ (6/19, ์›”์š”์ผ)

  1. Spring ์ˆ™๋ จ ์ฃผ์ฐจ ๋ฐœ์ œ

๊ฐœ์ธ ๊ณผ์ œ๊ฐ€ ํ•œ ๋ฒˆ์— 2๊ฐœ๋‚˜ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค................ ์ˆ˜๊ฐ•์ƒ์„ ์ฃฝ์ด๋ ค๋Š” ๊ณ ๋„์˜ ์ˆ˜๋ฒ• ๊ทธ๋Ÿฐ๊ฑฐ ์•„๋‹Œ๊ฐ€

/์ฟ ํ‚ค(Cookie)vs์„ธ์…˜(Session)
์„ค๋ช…ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋  ๋ชฉ์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ž‘์€ ์ •๋ณด๋ฅผ ๋‹ด์€ ํŒŒ์ผ-์„œ๋ฒ„์—์„œ ์ผ์ •์‹œ๊ฐ„ ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
์ €์žฅ ์œ„์น˜ํด๋ผ์ด์–ธํŠธ (์›น ๋ธŒ๋ผ์šฐ์ €)-์›น ์„œ๋ฒ„
์‚ฌ์šฉ ์˜ˆ)์‚ฌ์ดํŠธ ํŒ์—…์˜ "์˜ค๋Š˜ ๋‹ค์‹œ๋ณด์ง€ ์•Š๊ธฐ" ์ •๋ณด ์ €์žฅ-๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅ
๋งŒ๋ฃŒ ์‹œ์ ์ฟ ํ‚ค ์ €์žฅ ์‹œ์— ๋งŒ๋ฃŒ ์ผ์‹œ ์„ค์ • ๊ฐ€๋Šฅ

(๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ์—๋„ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค)
-๋‹ค์Œ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งŒ์กฑ๋  ๊ฒฝ์šฐ ๋งŒ๋ฃŒ

1. ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ
2. ํด๋ผ์ด์–ธํŠธ ๋กœ๊ทธ์•„์›ƒ ์‹œ
3. ์„œ๋ฒ„์— ์„ค์ •ํ•œ ์œ ์ง€๊ธฐ๊ฐ„๊นŒ์ง€ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ์žฌ์š”์ฒญ์ด ์—†๋Š” ๊ฒฝ์šฐ
์šฉ๋Ÿ‰ ์ œํ•œ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ƒ์ด (Chrome ๊ธฐ์ค€)
- ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ ๋‹น 180๊ฐœ
- ํ•˜๋‚˜์˜ ์ฟ ํ‚ค ๋‹น 4KB(=4,096byte)
-๊ฐœ์ˆ˜ ์ œํ•œ ์—†์Œ
(๋‹จ, ์„ธ์…˜ ์ €์žฅ์†Œ ํฌ๊ธฐ ์ด์ƒ ์ €์žฅ ๋ถˆ๊ฐ€๋Šฅ)
๋ณด์•ˆ์ทจ์•ฝํ•จ
(ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ๋ฐ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๊ฐ€๋กœ์ฑ„๊ธฐ ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค)
-๋น„๊ต์  ์•ˆ์ „
(์„œ๋ฒ„์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ์•ˆ์ „ํ•˜๋‹ค)

createCookie / getCookie

createCookie โ† addCookie

@GetMapping("/create-cookie")
public String createCookie(HttpServletResponse res) {
	
    // value๋กœ ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๋ฌธ์ž๊ฐ€ ๋„˜์–ด๊ฐ”์Œ์„ ํ™•์ธ
    addCookie("Robbie Auth", res);

	return "createCookie";
}

Cookie ์ƒ์„ฑ์€ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— static ๋ฉ”์„œ๋“œ๋กœ ์„ ์–ธํ•œ๋‹ค.

public static void addCookie(String cookieValue, HttpServletResponse res) {
	
    try {
    	// Cookie Value ์—๋Š” ๊ณต๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ encoding ์ง„ํ–‰
		cookieValue = URLEncoder.encode(cookieValue, "utf-8").replaceAll("\\+", "%20"); 

		Cookie cookie = new Cookie(AUTHORIZATION_HEADER, cookieValue); // Name-Value
        
        // Path ์ง€์ •
		cookie.setPath("/");
        // ์ฟ ํ‚ค ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์ง€์ •
		cookie.setMaxAge(30 * 60);

		// Response ๊ฐ์ฒด์— Cookie ์ถ”๊ฐ€
		res.addCookie(cookie);
            
	} catch (UnsupportedEncodingException e) {
		
		throw new RuntimeException(e.getMessage());    
	}
}

new Cookie() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด Cookie์— ์ €์žฅ๋  Name๊ณผ Value๋ฅผ ๋ฐ›๊ณ , ๋ฐ›์€ ๊ฐ’๋“ค์€ Cookie ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๋กœ ๋ฐ”์šด๋”ฉ ๋˜์–ด ํ•ด๋‹น ๊ฐ’์ด ์ €์žฅ๋œ Cookie ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

HttpServletResponse ๊ฐ์ฒด(res)์— ์ƒ์„ฑํ•œ Cookie ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ฐ˜ํ™˜๋˜๊ณ , ๋ฐ˜ํ™˜๋œ Cookie๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์ €์žฅ๋œ๋‹ค.

getCookie

@GetMapping("/get-cookie")
public String getCookie(@CookieValue(AUTHORIZATION_HEADER) String value) {

	System.out.println("value = " + value);

	return "getCookie : " + value;
}

@CookieValue("Cookie์˜ Name") โ†’ Cookie์˜ Name ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ํ•ด๋‹น ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ Cookie์˜ Value๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

JWT

JSON Web Token์˜ ์•ฝ์ž๋กœ, JSON ํฌ๋งท์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์†์„ฑ์„ ์ €์žฅํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ฟ ํ‚ค ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด JWT๋ฅผ ์ €์žฅํ•œ๋‹ค.

JWT ์‚ดํŽด๋ณด๊ธฐ โ–ถ jwt.io jwt

ํ๋ฆ„)
  1. Client ๊ฐ€ username(id), password ๋กœ ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ

  2. ์„œ๋ฒ„์—์„œ "๋กœ๊ทธ์ธ ์ •๋ณด" โ†’ JWT ๋กœ ์•”ํ˜ธํ™” (Secret Key ์‚ฌ์šฉ)

  3. ์„œ๋ฒ„์—์„œ ์ง์ ‘ ์ฟ ํ‚ค(Cookie)๋ฅผ ์ƒ์„ฑํ•ด JWT๋ฅผ ๋‹ด์•„ Client ์‘๋‹ต์— ์ „๋‹ฌ

    • JWT ์ „๋‹ฌ๋ฐฉ๋ฒ•์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •ํ•œ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์ž๋™์œผ๋กœ JWT๊ฐ€ ์ €์žฅ

JWT๋ฅผ ํ†ตํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•)

์„œ๋ฒ„์—์„œ API ์š”์ฒญ ์‹œ๋งˆ๋‹ค ์ฟ ํ‚ค์— ํฌํ•จ๋œ JWT๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉ

Server โ†’

  1. Client ๊ฐ€ ์ „๋‹ฌํ•œ JWT ์œ„์กฐ ์—ฌ๋ถ€ ๊ฒ€์ฆ (Secret Key ์‚ฌ์šฉ)

  2. JWT์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜๋Š”์ง€ ๊ฒ€์ฆ

  3. ๊ฒ€์ฆ ์„ฑ๊ณต ์‹œ, JWT์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ํ™•์ธ.
    ex) GET /api/products : JWT๋ฅผ ๋ณด๋‚ธ ์‚ฌ์šฉ์ž์˜ ๊ด€์‹ฌ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ

profile
`ISFJ` T 49% F 51% /

0๊ฐœ์˜ ๋Œ“๊ธ€