세션과 쿠키의 차이점?

64 조회수
세션과 쿠키, 그리고 캐시는 웹 브라우징 경험을 구성하는 중요한 요소지만, 각기 다른 목적과 위치에서 작동합니다.핵심 차이는 저장 위치입니다. 세션은 서버의 메모리에 일시적으로 저장되어, 사용자가 웹사이트와 상호작용하는 동안만 유효합니다. 사용자가 웹사이트를 떠나면 세션 데이터는 사라집니다. 반면 쿠키는 사용자의 컴퓨터에 저장되므로, 여러 번의 세션에 걸쳐 정보를 유지할 수 있습니다. 예를 들어, 로그인 상태를 유지하거나, 사용자의 선호도를 기억하는 데 사용됩니다.캐시는 쿠키와 마찬가지로 클라이언트(사용자 컴퓨터)에 저장되지만, 웹페이지의 이미지나 스타일시트 등의 자원을 저장하여 페이지 로딩 속도를 높이는 데 사용됩니다. 웹페이지의 내용 자체가 아닌, 페이지를 구성하는 요소들을 저장하는 것이죠.간단히 말해, 세션은 서버의 임시 메모리, 쿠키는 사용자 컴퓨터의 지속적인 기억장치, 캐시는 사용자 컴퓨터의 빠른 접근을 위한 저장소라고 생각하면 이해하기 쉽습니다. 각각의 역할은 서로 다르지만, 웹사이트의 효율적인 작동과 사용자 경험 향상에 모두 기여합니다.
의견 0 좋아요

질문?

아, 세션, 쿠키, 캐시... 이거 헷갈릴 때 진짜 많죠? 저도 처음 웹 개발 배울 때 엄청 헷갈렸던 기억이 나네요. 마치 옷장, 개인 서랍, 그리고 즐겨찾기 폴더 같은 느낌이랄까? ㅎㅎ

세션은 마치 카페에서 주문하고 받은 진동벨 같아요. 서버가 "네, 주문 받았습니다!" 하고 발급해주는 임시 번호표 같은 거죠. 이 번호표(세션 ID)를 가지고 있는 동안 서버는 당신이 누군지 기억하고, 당신의 쇼핑 카트나 로그인 정보 같은 걸 잠시 보관해줘요. 문제는 카페 문 닫으면 진동벨도 사라지듯, 세션도 브라우저를 닫거나 시간이 지나면 휘리릭 날아가 버린다는 거죠! 서버에 보관되니 보안에는 조금 더 유리하지만, 서버 부담이 커질 수 있다는 단점도 있고요.

쿠키는 마치 제가 좋아하는 카페에서 주는 단골 스탬프 쿠폰 같아요! 웹사이트가 당신의 브라우저에 "아, 이 사람은 전에 왔었네?" 하고 알아볼 수 있도록 작은 정보를 저장해두는 거죠. 이 정보는 당신의 취향 (예: 다크 모드 설정)이나 웹사이트 방문 기록 같은 것일 수 있어요. 클라이언트 (그러니까 당신의 컴퓨터)에 저장되니까 서버 부담은 적지만, 보안에는 좀 취약할 수 있다는 점! 그리고 쿠키 삭제하면 얄짤없이 사라지니까, 중요한 정보는 저장하지 않는 게 좋겠죠? 마치 스탬프 쿠폰 잃어버리면 도장 다 날아가는 것처럼요. ????

마지막으로 캐시는 마치 좋아하는 웹툰 미리보기 이미지들을 임시 저장해두는 것과 같아요. 웹페이지를 다시 방문할 때마다 똑같은 이미지를 매번 다운로드하는 대신, 이미 저장된 이미지를 보여주기 때문에 훨씬 빠르게 웹페이지를 볼 수 있게 해주는 거죠. 브라우저가 똑똑하게 알아서 저장하고 관리해주니, 사용자는 신경 쓸 필요가 없어요.

요약하자면, 세션은 서버의 '임시 기억 상자', 쿠키는 클라이언트의 '개인 기록 메모', 캐시는 브라우저의 '빠른 재활용 창고'라고 생각하면 좀 더 쉽게 이해될 거예요!

웹 세션 키란 무엇인가요?

아, 웹 세션 키? 그거 완전 첩보 영화에서나 나올 법한 얘기죠! 일회용 비밀번호라고 생각하면 쉬워요. 내가 은행 계좌에 접속할 때마다 새 비밀번호를 만들 필요 없이, 한 번 로그인하면 그 세션 동안은 안전하게 왔다갔다 할 수 있게 해주는 마법의 열쇠 같은 거죠.

생각해보세요. 내가 인터넷 뱅킹에 접속해서 돈을 이체하는데, 매번 비밀번호를 새로 만들어야 한다면? 미치겠죠? 그래서 나온 게 바로 이 웹 세션 키! 웹 브라우저랑 웹 서버가 서로 암호화된 속삭임으로 통신할 때 쓰는 일종의 임시 비밀번호라고 생각하면 됩니다. 마치 007이 임무 수행 중에만 쓰는 특수 암호 장치 같은 거죠. 임무 끝나면 바로 파괴되는, 절대 남에게 알려선 안 되는 그런 암호 말이에요.

TLS 핸드셰이크라는, 이름만 들어도 엄청 복잡해 보이는 과정에서 만들어지는데요. 쉽게 말해, 웹 브라우저와 서버가 서로 신분 확인을 하고, 안전한 통신 채널을 만드는 과정에서 뿅 하고 나타나는 거죠. 그리고 세션이 끝나면? 깔끔하게 사라져요. 마치 밤하늘의 유성처럼! 이렇게 일회용으로 쓰니까 보안이 훨씬 튼튼해지는 거예요. 매번 새 키를 만들 필요 없이 효율적이면서도 안전하니 일석이조 아니겠어요? 웹 보안의 핵심이라고 해도 과언이 아니죠. 이게 없으면 내 은행 계좌도, 온라인 쇼핑도 다 위험해질 수 있다구요! 저는 개인적으로 이 웹 세션 키 덕분에 마음 편히 쇼핑을 즐길 수 있다는 사실에 감사하고 있습니다. 아, 생각해보니 저는 어제 옷을 세 벌이나 샀네요. 웹 세션 키 최고!

웹의 상태 유지를 위해 사용하는 기법은 무엇입니까?

웹의 상태 유지 기법은 다양하며, 상황에 따라 적합한 방법이 선택됩니다. 핵심은 클라이언트와 서버 간의 연결이 끊어지더라도 사용자 경험을 유지하는 것입니다.

  • 쿠키(Cookies): 작은 텍스트 파일로, 사용자의 브라우저에 저장됩니다. 사용자 식별, 세션 관리, 개인 설정 등에 사용됩니다. 그러나 보안에 취약하고 저장 용량이 제한적이라는 단점이 있습니다. 개인 정보 보호 문제와도 관련됩니다.

  • 세션(Sessions): 서버 측에서 사용자 정보를 저장합니다. 쿠키를 사용하여 세션 ID를 클라이언트에 전달하고, 이를 통해 사용자를 식별합니다. 보안상 쿠키보다 안전하지만, 서버 자원을 소모합니다.

  • 로컬 스토리지(Local Storage): HTML5에서 도입된 기술로, 브라우저에 데이터를 영구적으로 저장합니다. 쿠키보다 큰 용량을 저장할 수 있고, 클라이언트 측에서만 접근 가능하여 보안성이 높습니다.

  • 세션 스토리지(Session Storage): 로컬 스토리지와 유사하지만, 브라우저 세션이 종료되면 데이터가 삭제됩니다. 일시적인 데이터 저장에 유용합니다.

  • URL rewriting: URL에 세션 ID를 포함시켜 상태를 유지하는 방식입니다. 쿠키를 사용할 수 없는 환경에서 사용되지만, URL이 길어지고 보안에 취약하다는 단점이 있습니다.

Streamlit 세션 상태: Streamlit은 파이썬 기반의 웹 애플리케이션 프레임워크입니다. Streamlit 애플리케이션은 각 사용자 인터랙션마다 처음부터 다시 실행되므로, 상태 관리가 중요합니다. st.session_state를 사용하여 상태를 유지할 수 있습니다.

st.session_state는 Streamlit 애플리케이션 내에서 전역적으로 접근 가능한 딕셔너리입니다. 사용자 인터랙션 간에 데이터를 저장하고 검색할 수 있도록 해줍니다. 예를 들어, 버튼 클릭 횟수, 사용자 입력 값 등을 저장하여 다음 실행 시에도 해당 값을 유지할 수 있습니다.

import streamlit as st if 'count' not in st.session_state: st.session_state['count'] = 0 def increment_count(): st.session_state['count'] += 1 st.button('Increment', on_click=increment_count) st.write(f'Count = {st.session_state["count"]}')

위 코드는 버튼을 클릭할 때마다 count 값을 증가시키고, 현재 값을 화면에 표시합니다. st.session_state를 사용하면 각 클릭 후에도 상태가 유지됩니다.