질의응답 형식으로 면접하듯이 정리해봤습니다.
아무리 잘 아는 질문이라고 해도 막상 대답하려고 하면 어려운거 같습니다.
완벽히 아는게 아니라는걸 알려주는거 같기도합니다.
스스로 질문해보고 응답해보면 기억에 잘 남는거 같습니다.
쿠키와 세션을 사용하는 이유가 무엇인가요?
- HTTP의 비연결성, 비상태성이라는 특징때문에 클라이언트가 누구인지 어떤 권한을 가졌는지 등 기록하지 않기 때문에 필요합니다.
쿠키란 무엇인가요?
- 쿠키란 일종의 클라이언트가 누구인지 , 어떤 상태인지등이 포함된 정보를 보관하는 것을 말합니다.
- 쿠키를 통해 로그인을 하고 이후 데이터에 접근하는 방법은 아래와 같습니다.
1) 클라이언트가 로그인을 시도합니다.
2) 서버에서는 클라이언트 정보의 유효성을 판단하고 Response에 set-cookie라는 키에 쿠키값을 넣어서 클라이언트에게 보냅니다.
3) 클라이언트는 Response 의 set-cookie 라는 키값에 해당되는 값을 브라우저의 cookie storage(쿠키저장소)에 저장합니다.
4) 이후 클라이언트는 요청하는 메세지의 header에 cookie값을 넣어서 보내면 서버 입장에서는 어떤 클라이언트에서 온 요청인지 알 수 있게 됩니다.
쿠키의 단점은 무엇이 있을까요?
- 쿠키에 클라이언트의 정보들이 존재하기 때문에 쿠키를 탈취당하면 클라이언트의 정보가 유출 될수 있다는 단점이 있습니다.
- 클라이언트 정보를 쿠키에 보관하는 것이 아닌 세션ID를 보관하여 보완성을 높인 세션을 사용할 수 있습니다.
쿠키는 언제 사용하나요?
- 쿠키는 쇼핑몰 장바구니기능이나 자동으로 아이디 패스워드를 입력해주는 기능등 브라우저 사용자의 정보를 입력해줄 때도 사용합니다.
그렇다면 세션은 무엇인가요?
- 세션은 기본적으로 쿠키를 이용해서 구현합니다. 클라이언트를 구분하기 위해 각 클라이언트에게 세션 ID를 부여하고 클라이언트는 쿠키에 세션ID를 저장합니다.
- 세션을 이용하여 로그인을 하고 이후 데이터에 접근하는 방법은 아래와 같습니다.
1) 클라이언트가 로그인을 시도합니다.
2) 서버에서는 클라이언트의 유효성을 판단하고 Response에 set-cookie 라는 키에 세션ID를 저장하고 서버는 세션ID에 해당하는 유저 정보를 메모리에 따로 저장합니다. (DB에 저장할 수도 있음) 그리고 클라이언트에게 전송합니다.
3) 클라이언트는 Response의 set-cookie 라는 키값에 해당되는 값을 브라우저의 cookie storage에 저장합니다.
4) 이후 클라이언트는 세션ID를 헤더에 포함 시켜서 요청을 보내고 서버는 세션ID를 가지고 어떤 유저인지 검색한 후 이후 로직을 처리합니다.
세션의 단점은 무엇이 있을 까요?
- 세션은 쿠키보다 보안성은 좋지만 서버에 클라이언트의 접속 정보들을 계속 저장해야하기 때문에 트래픽이 많아진다면 서버 메모리에 과부하가 올 수도 있습니다.
- session hijacking을 통해 세션 ID가 노출될 경우에 클라이언트가 해커인지 알 방법이 없습니다. 따라서 세션ID의 주기를 짧게 가져가거나 HTTPS를 통해 보안을 강화합니다.
- session ID를 충분히 큰값으로 설정하는 것도 효과가 있습니다. 왜냐하면 해커입장에서 session ID가 간단하다면 임의의 session ID를 계속 탐색하여 우연히 session ID를 발견할 수도 있기 때문입니다.
'CS' 카테고리의 다른 글
[OS] 운영체제 질문 - (프로세스,스레드,동기화 문제,교착상태,페이징,가상메모리) (1) | 2022.06.15 |
---|---|
[DB] 인덱스 (1) | 2022.06.14 |
[DB] 트랜잭션 질문 및 응답 (0) | 2022.06.08 |
[네트워크] HTTP 질문 및 응답 (0) | 2022.06.08 |
[네트워크] TCP 질문 및 응답 (0) | 2022.06.08 |
댓글