Cookie APIHttpSession@SessionAttributeTest용 Cookie & Session 객체 :
 <%
 	//test용 Cookie 데이터 생성해서 client에게 전송
 	Cookie c = new Cookie("id", "cookieData");
 	c.setMaxAge(60*60);
 	response.addCookie(c);
 	
 	//test용 Session 데이터 저장
 	session.setAttribute("id", "tester");
 	session.setAttribute("age", 100);
 %>
Controller :
package controller;
import ...
    
@Controller
@RequestMapping("sessiontracking")
public class Step03Controller {
	...
}
Cookie API<a href="sessiontracking/cookietest">@CookieValue</a>
	@RequestMapping("/cookietest")
	public String m1(@CookieValue("id") String idValue) {
		System.out.println("m1() -- " + idValue);
        // 출력 결과 : "m1() -- " + cookieData"
	}
🔵
(@CookieValue("id") String idValue)
- 쿠키에
 "id"라는 키 값에 저장된 데이터를String idValue변수로 반환
HttpSession<a href="sessiontracking/sessionTest1">HttpSession API 활용 </a>
	    @RequestMapping("/sessionTest1")
	    public String m2(HttpSession session) {
	       	session.getAttribute("id"));
	        session.getAttribute("age"));
	        session.setAttribute("newData", "서버에서 새로 저장한 데이터");
	        return "redirect:/step03Session.jsp";
	    }
	    @RequestMapping("/sessionDelete")
	    public String m3(HttpSession session) {
	    	System.out.println("m3()---");
	    	session.invalidate();
	    	session = null;
	    	
			return "redirect:/step03Session.jsp";
	    }
🔵
(HttpSession session)
- Servlet 과 동일하게
 HttpSession객체로 Session 데이터 활용 가능🔵 Session 초기화
session.invalidate();로 Session 초기화 후 null 값 반환
@SessionAttribute✅ Spring Controller Session Tracking
@Controller
@RequestMapping("sessiontracking")
@SessionAttributes({"id", "age", "cust"})
public class Step03Controller {
 	...   
}
🔵 클래스 상위에 선언
🔵
@SessionAttributes({})
- Session의 key 값들을 지정하는 배열
 
	    @RequestMapping("/sessionTest2")
	    public String m4(@ModelAttribute("id") String id,
	    				 @ModelAttribute("age") int age) {
	    	
	    	return "redirect:/step03Session.jsp";
	    }
🔵
(@ModelAttribute("id") String id, @ModelAttribute("age") int age)
- session에 있는 id와 age key를 가진 데이터를 가져온다
 
🚩
@ModelAttribute은 request에다 넣는건 줄 알았는데...!?
@SessionAttribute에 지정된 key 값이 존재하지 않을 때는request.setAttribute("id", id)와 비슷하게 실행되고forward방식일 때만 jsp에서${requestScope.id}으로 출력이 가능하다- 🤪❓
 forward방식이며@SessionAttribute에 지정된 key 값이면${requestScope.id}&${sessionScope.id}둘 다 사용 가능 (왜 requestScope도 사용이 가능한지 잘 모르겠다😭)
@SessionStatus✅ Session Data 초기화
	    @RequestMapping("/sessionDelete2")
	    public String m5(SessionStatus status) {
	    	System.out.println("m5()--- ");
	    	
	    	status.setComplete();
	    	return "redirect:/step03Session.jsp";
	    }
🔵
SessionStatusAPI
setComplete()메소드를 사용해서 Session 초기화
✅ @PathParam & DTO.class
	    @RequestMapping("sessionTest3DTO")
	    public String m6(Model model, 
                         @PathParam("id") String id, 
                         @PathParam("age") int age) {
            
	    	model.addAttribute("id", id);
            model.addAttribute("id", id);
	    	
	    	return "redirect:/step03Session.jsp";
	    }
🔵
@PathParam을 활용하요 각 데이터를 가져오거나 Query String과 일치되는 변수로 구성된 DTO 활용
다른 API의 활용으로 둘다 Session에 데이터를 추가는 가능하지만 초기화 하는 방식은 따로 작동
HttpSession 의 초기화 방식인 invalidate()로는 @SessionAttributes 에서 지정된 key 값을 가진 Session Data는 삭제 불가
HttpSession 의   getAtrribute()&setAttribute() 로 @SessionAttribute 에서 지정된 key의 데이터 반환 및 추가는 가능