LoGin
article thumbnail
반응형

 

 

우선 위에 네가지는 웹 애플리케이션 개발과 관련된 주요 기술들입니다.

해당 기술들을 공부해 데이터가 DB(DataBase)에 저장 되는 것뿐 아니라 다른 저장 방식이 있는지, 로컬에는 어떻게 저장되는지, 세션이 만료됐다는 메시지는 무엇인지, 쇼핑하며 장바구니에 담아놓은 상품들이 왜 사라졌는지, 처음 사이트 들어갔을 때와 두 번째 사이트 들어갔을 때 화면 렌더링 속도는 왜 다른지를 공부해 보시면 좋겠습니다.

 

 

우선 네 가지를 확인해보면 저장되는 형태도 다르고 사용되는 방식도 다릅니다. 우선 표면적인 부분을 살펴보면

토큰(Token) 사용자 인증 정보를 가진 문자열
쿠키(Cookie) 클라이언트 컴퓨터에 저장되는 작은 텍스트 파일
세션(Session) 사용자와 웹 서버간 연결을 유지하기 위한 상태 저장 기술
캐시(Cache) 자주사용되는 데이터나 결과를 미리 저장해두고 다음 요청이 오면 빠르게 제공하는 기술

 

토큰, 쿠키, 세션, 캐시 이 네 가지 기술들은 웹에서 사용자 인증, 데이터 저장 및 전송, 성능 최적화와 관련이 있습니다.

 

 

 

 

토큰(Token)


사용자가 웹 사이트에 로그인 하면, 서버는 사용자의 인증 정보를 암호화한 토큰을 생성하고 클라이언트에게 전달합니다. 클라이언트는 이 토큰을 저장해두고, 웹 사이트를 이용할 때마다 서버에 토큰을 함께 보내 사용자를 구분합니다.

 ex) 소셜 미디어 사이트 로그인 시 생성되는 액세스 토큰(Access Token)이 토큰에 해당됩니다.

토큰은 사용자의 정보를 암호화해서 담는것이 아닌 단순 사용자 인증일 뿐이고, 사용자가 실제로 사용할 중요 데이터는 서버에서 암호화 후 처리 및 관리합니다.

토큰 = 출입증

 

  1. 클라이언트는 토큰 생성 API를 통해 인증 요청을 보냅니다. (이때, 사용자 ID와 비밀번호 등의 인증 정보를 함께 전송합니다)
  2. 서버는 인증 정보를 확인하고, 인증이 성공하면 토큰을 생성한 훈 클라이언트에게 전달합니다.
  3. 클라이언트는 전달받은 토큰을 쿠키에 저장하고, 다음 요청부터 서버에 쿠키에 저장된 토큰을 전달합니다.
  4. 서버는 전달받은 토큰의 유효성과 무결성을 확인합니다.(예시 : 서명 확인, 만료 시간 확인 등) 만약 토큰이 유효하다면, 토큰에 포함된 사용자 정보(예: 사용자 ID)를 추출하여 요청을 처리할 수 있는 사용자임을 인지합니다.

 

토큰은 인증에 필요한 정보를 담은 문자열로써 형식은 다양합니다.

자주 사용하는 JWT(JSON Web Token)는 헤더, 내용, 서명으로 구성되어 있으며 아래와 같은 형식으로 생겼습니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6JV_adQssw5c

위와 같이 하나의 문자열로 연결해 생성하며 각각 '.'으로 문자를 구분하여 작성됩니다.

이렇게 생성된 JWT 토큰은 사용자 인증이 필요한 웹 /API 요청 시 헤더에 포함되어 전달됩니다.

 

 

 

 

쿠키(Cookie)


사용자의 웹 사이트 방문 기록, 로그인 상태 유지, 콘텐츠 설정 정보 등을 저장합니다.

ex) 웹 사이트에서 로그인 상태 유지' 옵션을 선택하면 로그인 정보가 쿠키에 저장되어 자동으로 로그인할 수 있게 됩니다.

ex) 사이트에 접근했을 때 마이크권한 허용, 카메라 사용권한 접근 허용을 하면, 웹 브라우저는 이 정보를 기억하고 해당 웹사이트에서 추후에 카메라와 마이크 접근 요청이 있을 경우 허용할지 여부를 판단합니다.

 

쿠키는 텍스트 파일 형식으로 저장되는데 웹 브라우저에서 쿠키를 키(key) - 값(value) 쌍의 형태로 저장하고 관리합니다.

웹 사이트에서 로그인 상태를 관리하는 쿠키는

이름: login_status
값: true
만료 날짜: 2023-11-19T18:45:39Z
도메인: example.com
경로: /

이런 식으로 브라우저, 로컬에 저장이 됩니다. 그럼 도메인에 접속할 때마다 함께 전송되어, 서버에서 이 정보를 활용해 사용자가 로그인된 상태인지 확인할 수 있습니다.

 

 

 

 

 

세션(Session)


웹 서버는 사용자를 식별하기 위해 세션 ID를 생성하고, 보통 클라이언트에게 전달합니다(쿠키 방식 사용). 연결이 끊어지거나 세션 유효 기간이 지나면 세션이 만료되며 정보가 삭제됩니다.

ex) 인터넷 쇼핑몰에서 장바구니 기능은 세션을 통해 구현됩니다. 만료되면 장바구니가 다 사라집니다.......

ex) 각종 은행 사이트는 오랜 기간 페이지를 사용하지 않을 시 '세션이 만료되었습니다' 라며 로그아웃됩니다.

 

쿠키와 다르게 세션은 사용자 정보와 관련된 데이터를 주로 서버 메모리에 저장됩니다.

세션 또한 키(key) - 값(value) 형태로 저장되며, 각 세션은 고유한 세션 ID를 갖습니다.

 

세션의 형식은

  1. 사용자가 웹사이트에 방문, 로그인할 때, 웹 서버는 고유한 세션 ID를 생성하고 이는 중복되지 않습니다.
  2. 웹 서버는 생성한 세션 ID를 클라이언트에게 전달하고, 클라이언트는 이를 저장하여 서버와 통신하는 데 사용합니다. 세션 ID는 주로 쿠키를 통해 전달되며, HTTP 헤더나 요청 파라미터를 통해서도 전달될 수 있습니다.
  3. 클라이언트가 웹 사이트를 사용할 때마다 세션 ID가 함께 보내지며, 서버는 이를 통해 해당 사용자의 세션 정보를 식별합니다.
  4. 서버 측에서는 각 세션 ID에 따라 사용자 정보, 설정, 상태 등을 키-값 쌍으로 저장합니다.
  5. 만약 세션의 유효 시간이 지나거나 사용자가 로그아웃하는 경우, 서버는 해당 세션의 데이터를 삭제하며, 클라이언트의 세션 ID도 사라집니다.

세션은 서버 메모리에 저장되기 때문에, 보안성이 높고 데이터 터리가 빠르다는 장점이 있습니다. 하지만 많은 사용자가 접속할 경우 서버 메모리 부담이 커질 수 있어, 이를 보완하기 위해 여러 서버 간 분산 세션 관리 및 데이터베이스에 세션 정보를 저장하는 방식등이 사용됩니다.

 

 

 

캐시(Cache)


캐시를 통해데이터 접근 속도와 성능이 향상되며, 서버의 부하를 줄일 수 있습니다.

ex) 웹 페이지 로딩 시 이미지, 스크립트, css 파일 등은 브라우저 캐시에 저장되어 웹 페이지 접속 시 빠르게 로딩됩니다.

 

캐시는 주로 클라이언트 측(브라우저 캐시)과 서버 측(웹 서버 캐시, 애플리케이션 캐시, 데이터베이스 캐시 등)에서 사용됩니다.

 

브라우저 캐시

브라우저 캐시는 사용자의 웹 브라우저에 저장되는 캐시로, 웹 페이지의 이미지, 스크립트, CSS파일 등 정적 자원들이 저장됩니다.

예시로 브라우저 캐시 폴더에 이미지 파일이 저장된 경우는

URL: https://www.example.com/images/logo.png
파일 경로: C:\Users\Username\AppData\Local\Google\Chrome\User Data\Default\Cache\f_00abcd

 

 

웹 서버 캐시

웹 서버에 저장되는 캐시로, 페이지의 HTML 내용, 적 데이터 요청 결과 등이 객체 형태로 저장됩니다.

웹 서버의 캐시는 메모리, 파일 시스템, 데이터베이스, 임시 파일 형태 등으로 저장될 수 있습니다.

예시로 웹 서버의 메모리에 캐시 된 페이지 데이터로는

키: /product/123
값: <html><head><title>Product 123</title></head><body> ... </body></html>

 

 

애플리케이션 캐시

애플리케이션 수준에서 사용되는 캐시로, 객체 인스턴스, API결과, 계산 결과 등이 메모리나 인메모리 데이터베이스 (Redis, Memcachec 등)에 저장됩니다. 예시로는

키: user_profile:42
값: {"id": 42, "username": "johndoe", "email": "johndoe@example.com"}

 

데이터베이스 캐시

 

데이터베이스 관련 요청 결과를 저장하는 캐시로, 일반적으로 쿼리 결과, 인덱스 정보 등이 데이터 베이스 관리 시스템의 RAM 또는 별도의 캐시 서버에 저장됩니다.

MySQL 쿼리 캐시에 저장된 결과 예시

키: SELECT * FROM users WHERE user_id = 7
값: [{"user_id": 7, "email": "user@example.com", "name": "User"}]

 

 

 

캐시를 사용하는 궁극적 이유

데이터에 대한 접근 시간을 줄여서 애플리케이션의 성능과 처리 속도를 최적화하는 것입니다. 데이터베이스에 대한 접근 횟수를 줄이는 것뿐 아니라, 각종 리소스를 절약하고 효율적인 처리를 위해 사용됩니다.

캐시를 통해 빈번하게 반복되는 계산, 데이터 처리 등의 작업을 최소화하여 서버의 CPU, 메모리 등의 리소스를 절약할 수 있을 뿐 아니라 데이터베이스에 접근 횟수를 줄여 부하를 감소시키고 빠르게 데이터에 접근할 수 있기 때문에 웹 페이지 로딩 시간도 단축됩니다.

 

 

 

토큰, 쿠키, 세션, 캐시의 관계


 

토큰 쿠키 세션 관계

토큰, 쿠키, 세션 모두 사용자를 인증하고 식별하는 데 사용되는 기술들입니다. 토큰을 쿠키에 저장할 수 있으며, 웹 사이트를 이용할 때마다 서버에 전송되도록 설정할 수 있습니다. 이러한 방식으로 사용자 인증을 처리하는 웹 사이트들이 실제로 많이 있습니다. 토큰을 세션 스토리지에 저장하는 방식도 사용되며, 사용자는 웹 브라우저를 닫기만 하면 토큰이 사라져 보안을 유지할 수 있습니다.

 

 

쿠키와 세션의 관계

쿠키와 세션은 사용자 인증, 정보 저장 등의 목적으로 사용되지만, 저장 위치와 처리 방식이 다릅니다. 쿠키는 클라이언트에 저장되는 반면, 세션은 서버에서 저장됩니다. 따라서 쿠키는 어느 정도 동작에 제약이 있지만, 클라이언트에 저장되면 여러 웹사이트에서 공유될 수 있는 반면, 세션은 독립적으로 서버에 저장되므로 보안성이 더 높습니다.

 

캐시... 토큰, 쿠키, 세션의 관계

캐시는 성능 최적화를 위한 기술로, 자주 사용되는 데이터나 결과를 미리 저장하여 웹 사이트의 로딩 속도와 성능을 개선합니다. 캐시는 사실상 사용자 인증 기능과는 직접적인 연관성이 없지만, 웹 서버의 전반적인 성능에 영향을 미치기 때문에 간접적으로 연관되어 있다고 볼 수 있습니다.

 

 

 

요약

 


  • 토큰 = 암호화된 출입증

 

  • 세션 = 제공받은 사용자의 세션 아이디를 이용해, 서버에서 사용자가 기억을 요청한 세션에 저장하고 다시 데이터를 참고.
    사용자가 서버와 연결되고 브라우저를 닫아 서버와의 연결을 끝내는 시점까지 전부 세션이라 한다.

 

  • 쿠키 = 자기 데이터를 직접 갖고 있는데(중요하지 않은 데이터 위주, 로컬 저장)

 

  • 세션쿠키 = 웹 서버에 저장되는 쿠키

 

  • 캐시 = 자주 사용하는 데이터를 복사해 두는 임시 장소

 

 

728x90
반응형
profile

LoGin

@LoGinShin

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!