📌HTTP는 무상태성, 비연결성 특징을 갖고 있다.
그렇기에 클라이언트가 재요청시 서버는 이전 요청에 대한 정보를 기억하지 못하므로 로그인 등으로 사용자 정보를 유지해야한다.
Cookie

- F12- Application- Cookie로 확인 가능
- 세션 쿠키/ 영속 쿠키 두 종류가 있다.
- 세션 쿠키는 Default로 브라우저를 종료하면 쿠키도 없어진다.
- 영속 쿠키는 코드로 정해둔 시간까지 쿠키를 유지한다.
- 사용자가 로그인에 성공하면 HTTP Response에 쿠키를 담아 브라우저에 보낸다. (매 요청마다 보냄)
- 쿠키를 받은 서버는 응답을 보내 클라이언트에 저장한다.
- 그래서 사용자가 유저 아이디에 쉽게 접근할 수 있고, 삭제하면 로그인이 지워지거나, 다른 아이디로 로그인하는 에러가 발생할 수 있다.
Session

- 사용자가 로그인을 해서 정보를 요청하면, 클러이언트 측의 쿠키에는 랜덤으로 SessionID가 생성된다.
- SessionID를 서버측 DB로 보내면 서버에서 해당 유저 정보를 인스턴스화 해서 서버의 Session Storage에 SessionID와 유저 정보를 저장한다.
- 그 후 사용자가 정보를 요청할 때마다 쿠키의 SessionID를 보내 서버의 Session Storage를 조회한다.
- SessionID로 사용자의 개인정보를 가릴 수 있어 보안은 좋지만 유지시간이 정해져 있어, 따로 접속 시간을 늘리는 코드를 작성해야 한다.(HttpSession사용으로 최근 세션을 요청한 시간을 기준으로 30분을 유지한다)
- Servlet의 지원으로 Session을 생성할 수 있다.
(HttpServletRequest)
- 서버의 메모리를 사용하므로 확장성이 제한되어 있다.
✅SessionAttribute: Spring의 세션 annotation. session을 새로 생성하지 못하므로 이미 로그인이 완료된 사용자를 찾는 경우에 쓰인다.
인증
인가
- 사용자가 어떤 권한을 가지고 있는지 결정하는 과정 ex) 회원만 조회 가능한 게시글, 본인이 작성한 게시글 수정
Token

- web Application이나 API에서 인증과 인가 과정에서 사용되며 사용자 또는 시스템의 신원과 권한을 증명하고 요청의 유효성을 검증하는 데 사용되는 디지털 문자열.
- 클라이언트 측에 저장
- 사용자의 고유한 서명을 포함해 보안성이 뛰어남
- 쿠키랑 세션보다 데이터 용량이 크고, payload는 암호화되지 않아서 중요한 데이터를 담을 수 없다.
JWT
- 인증에 필요한 정보를 암호화시킨 JSON 형태의 Token
Filter

Filter Chain
- 핵심기능에서 공통된 기능을 찾아 따로 구현한 부가 기능
- 사용자가 로그인을 하면 Controller에 접근하기 전에 필터에서 인증 로직을 거친다.
+메모
로그인 세션에서 Filter 활용법 (Spring Boot)
로그인한 사용자의 인증 및 권한 체크를 하려면 서블릿 필터(Filter)를 사용하면 돼.
필터를 이용하면 요청(Request)이 컨트롤러에 도달하기 전에 로그인 상태를 검사할 수 있어.
즉 사용자가 아이디와 비번을 입력해서 로그인을 할 때 필터로 이 사용자가 로그인화면을 볼 권리가 있나 검사 후 controller로 넘기는 역할을 맡는 듯.
쿠키/세션은 요청 정보를 일정 시간동안 저장하는 역할을 맡는데,
쿠키는 서버에서 유저 아이디를 그대로 클라이언트에게 돌려주기 때문에 보안의 위험성이 있음.
하지만 세션은 유저 아이디를 암호화 한 후 클라이언트에 돌려주기 때문에 보안이 좀 더 뛰어남.
다만, 유지 시간이 최대 30분이므로 코드를 구현해서 마지막 세션요청 시간을 받아야하는 문제가 있음.
그러니까 로그인에 성공하면, 세션 ID를 생성해 조회한user인스턴스와 함께 서버의 session 저장소에 저장한다.
그 후 클라이언트측의 쿠키에는 생성된 세션 ID를 두고, 클라이언트가 서버에 정보를 요청할 때마다 세션 ID를 보내 서버의 해당 ID의 세션 저장소의 인스턴스를 확인 후
정보를 되돌려주는 것.
쿠키와 다른 점은 보안도 있지만, 쿠키는 클라이언트 측, 세션저장소는 서버측에 있다는 것.
Servlet은 Session 을 자체적으로 지원한다.
이건 잘 모르겠다.