1. 캐시(cache)

- 데이터의 복사본을 저장하여 이후 요청 시 데이터 접근 속도를 높이는 메커니즘

 서버가 클라이언트의 브라우저에 저장할 수 있는 작은 데이터 조각

- 클라이언트가 서버에 요청을 보낼 때, 서버는 캐시된 데이터를 반환 할 수있음

- 클라이언트는 캐시에서 데이터를 찾을 수 있음

  • 브라우저 캐시: 웹 페이지의 이미지, 스타일 시트, 스크립트 등을 저장하여 다음 방문 시 더 빠르게 로드할 수 있게
  • 서버 캐시: 서버에서 자주 요청되는 데이터나 계산 결과를 저장하여 서버의 부하를 줄이고 응답 속도를 향상시킴

 

2. 쿠키(cookie)

- 사용자의 브라우저에 저장이 되고 통신 할 때 HTTP 헤더에 포함되는 데이터 파일

= 웹 서버가 클라이언트의 브라우저에 저장할 수 있는 작은 데이터 조각

- 키와 값으로 구성

- 만료일을 설정할 수 있으며, 만료일이 지나면 브라우저가 쿠키를 삭제

- 브라우저를 닫아도 유지됨(-> 서버가 아닌 브라우저가 발급하는 거니까 브라우저는 여전히 정보를 알고 있음)

- 특정 경로와 도메인에만 유효함. 쿠키의 범위를 제한 할 수 있음

- 주로 자동 로그인 유지, 위시 리스트 저장, 팝업창 보지 않기, 뷰 설정값에 사용

 

브라우저에 저장되므로 해당 사용자의 컴퓨터를 사용하면 누구나 쿠키에 입력된 값을 쉽게 확인 가능 ==> 보안성이 낮다!

 

3. 세션(session)

- 클라이언트와 서버 간의 상태를 유지하기 위해 서버에서 관리하는 메커니즘

클라이언트가 서버에 접속 시, 세션 ID를 발급해주고 서버에서는 클라이언트에게 발급해준 세션 ID를 이용해서 저장

= 서버에 저장되는 쿠키로 클라이언트와 서버의 통신 상태

- 서버가 발급하고 내용을 다 들고 있는 것이 아니라 자기가 발급해준 JsessionID로만 비교함

- 일반적으로 브라우저가 열려 있는 동안 또는 세션이 만료될 때까지 유지됨(-> 서버 측에서 세션 만료 시간을 설정할 수 있음)

- 주로 중요한 데이터를 저장 할 때 사용

사용자의 로컬이 아닌 서버에 직접 저장되므로 클라이언트 측에서 세션 내의 데이터에 접근하기 어려움 ==> 비교적 보안성이 높다!

[작동 방식]
클라이언트가 서버에 요청을 보낼 때, 서버는 세션을 생성하고 세션 ID를 클라이언트에 쿠키로 보내줍니다.
클라이언트는 이후의 요청에서 이 세션 ID를 포함시키며, 서버는 이 ID를 통해 해당 세션의 데이터를 참조합니다.

 

4. 토큰(Token)

더보기

토큰은 웹 애플리케이션 및 API에서 인증과 권한 부여를 처리하는 데 널리 사용되는 메커니즘입니다. 일반적으로 JSON 웹 토큰(JSON Web Token, JWT)과 같은 형태로 사용됩니다.

토큰의 정의와 사용

1. 토큰의 기본 개념

  • 정의: 토큰은 인증된 사용자의 신원을 증명하고, 특정 권한을 부여하는 데 사용되는 문자열입니다. 일반적으로 서버에서 발급되며, 클라이언트는 이 토큰을 사용하여 인증과 권한 부여를 수행합니다.
  • 형식: 토큰은 문자열로, 일반적으로 JSON 형식의 데이터를 포함하며 Base64로 인코딩됩니다. 가장 널리 사용되는 형식 중 하나는 JSON 웹 토큰(JWT)입니다.

2. JSON 웹 토큰 (JWT)

  • 구성: JWT는 3부분으로 나누어져 있습니다.
    • 헤더 (Header): 토큰의 타입과 해싱 알고리즘 정보를 포함합니다. 예를 들어, {"alg": "HS256", "typ": "JWT"}.
    • 페이로드 (Payload): 토큰에 담길 클레임(정보)을 포함합니다. 클레임은 사용자 정보, 토큰의 만료 시간 등 다양한 정보를 담을 수 있습니다.
    • 서명 (Signature): 헤더와 페이로드를 조합하여 비밀 키를 사용해 서명한 부분입니다. 이 서명 부분은 토큰의 무결성을 검증하는 데 사용됩니다.
  • 예시: eyJhbGciOiAiSFMyNTYiLCAidHlwIjoiSldUIn0.eyJzdWIiOiAiMTIzNDU2IiwgIm5hbWUiOiAiSm9obiBEb2UiLCAiaWF0IjoiMTYxNjEyMzQ1NiJ9.D_1Qo6XzxJ8-z_G8T9MsJ5V1AW89H0wI2-KXYfDQ6DQ

3. 토큰의 작동 방식

  • 발급: 사용자가 로그인하면 서버는 인증된 사용자에게 토큰을 발급합니다.
  • 전송: 클라이언트는 서버에 요청을 보낼 때 이 토큰을 HTTP 헤더(예: Authorization: Bearer <token>)에 포함시켜 전송합니다.
  • 검증: 서버는 요청을 받을 때 토큰을 확인하고 서명을 검증하여 유효성을 검사합니다. 토큰이 유효하면 요청을 처리합니다.

4. 토큰의 장점

  • 상태 비저장 (Stateless): 서버가 상태를 저장할 필요 없이 클라이언트가 토큰을 통해 필요한 정보를 서버에 제공할 수 있습니다.
  • 확장성: 서버 간의 인증 정보 공유가 용이하여 분산 시스템에서 유용합니다.
  • 자체 포함 (Self-contained): 토큰에 사용자 정보와 클레임이 포함되어 있어, 별도의 데이터베이스 조회 없이도 사용자 정보를 사용할 수 있습니다.

5. 보안 고려 사항

  • 만료 시간 (Expiration): 토큰에 만료 시간을 설정하여 보안을 강화할 수 있습니다. 토큰이 만료되면 새로운 토큰을 발급받아야 합니다.
  • 비밀 키 관리: 서명을 위해 사용되는 비밀 키는 안전하게 관리되어야 하며, 노출되지 않도록 주의해야 합니다.
  • HTTPS 사용: 토큰을 안전하게 전송하기 위해 HTTPS를 사용하는 것이 중요합니다.
  • 토큰 탈취 방지: 토큰이 탈취되지 않도록 HttpOnly와 Secure 플래그를 설정하여 쿠키로 저장하는 경우 보안을 강화할 수 있습니다.

6. 토큰의 종류

  • 접근 토큰 (Access Token): API 호출 시 권한을 부여하는 데 사용됩니다. 일반적으로 짧은 만료 시간을 갖습니다.
  • 갱신 토큰 (Refresh Token): 접근 토큰의 갱신을 위한 토큰으로, 상대적으로 긴 만료 시간을 갖습니다. 갱신 토큰을 사용하여 새로운 접근 토큰을 발급받을 수 있습니다.

토큰은 사용자 인증 및 권한 부여를 처리할 때 유용하며, 클라이언트와 서버 간의 효율적인 통신을 지원합니다.

 
 
4o mini

'CS' 카테고리의 다른 글

URL에 대해 알아보자  (0) 2023.05.06
헷갈리기 쉬운 경로표기법  (0) 2023.02.06

URL 구성

출처: 생활코딩_node.js 강의_9.URL의 이해

path는 컴퓨터 안에 있는 어떤 디렉토리에 어떤 파일인지를 가리킨다.

 

 

query string 값을 변경하면 웹서버에게 어떤 데이터를 전달할 수 있다.

ex. 내가 읽고 싶은 정보는 html 그리고 12 page야

쿼리 스트링의 시작은 ?로 표시한다.
값과 값 사이는 &로 구분한다.
값의 이름과 값은 =로 구분한다.

 

 

 


출처:

https://www.youtube.com/watch?v=Zhbvui_T9VY

 

 

: 현재 페이지 -> 다른 페이지(리소스)

 

'\' : 파일경로 (file:\\\)

자바경로

C:\Class\DB\JDBC

 

'/' : 웹 경로 구분자. 웹(http://)

현재

./WebContent/Example

 

1. 상대경로

기준 : 현재 웹페이지의 소속 폴더가 기준점

        . : 현재 웹페이지가 소속된 폴더

        .. : 현재 웹페이지의 부모 폴더

자식폴더명 : 현재 소속된 폴더의 자식 폴더

현재 위치를 '나'로 기준을 삼고 상대를 찾는 표현

 

2. 절대경로

기준 : 누구나 다 알고있는 동일한 위치를 기준으로 상대를 찾는 표현

'/' 기준 -> '/' 는 웹사이트의 루트 폴더 > "http://localhost:8090" 

'/WebClientTest' == 'WebContent'

 

3. 로컬경로

사용 안함

웹서버가 아니라 브라우저가 동작 중인 로컬 컴퓨터의 경로를 탐색

 

4. 외부경로

http:// 시작

남의 사이트 주소

 

 

WebContent 폴더

: 외부에서(클라이언트) 브라우저로 접근할 수 있는 가장 상위 폴더

: 웹 루트 폴더

 

웹 서버

- C:\ > Class > WebClientTest > WebContent > ex01.htm

 

외부 시각

- http://localhost:8090/WebClientTest/Member/list.htm

- http://localhost:8090 -> 특정 컴퓨터 아파치 톰캣(웹 서버)

- WebClientTest -> 프로젝트명 -> 컨텍스트 루트(Context Root)

- http://localhost:8090/WebClientTest/ -> WebContent

 

http://localhost:8090/

http://localhost:8090/WebClientTest

http://localhost:8090/WebClientTest/ex01.htm

 

 

4가지 경로 표기법 예제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
     <h1>상대 경로</h1>
     <div><a href ="./ex04.htm">같은 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="ex04.htm">같은 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="./Member/list.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="Member/list.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="./Member/private/private.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="Member/private/private.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="../필기.txt">프로젝트 루트 폴더의 자원으로 이동</a></div>
     
     <h1>절대 경로</h1>
     <div><a href ="/WebClientTest/ex01.htm">절대경로</a></div>
     <div><a href ="/WebClientTest/Member/list.htm">절대경로</a></div>
     <div><a href ="/WebClientTest/Member/private/private.htm">절대경로</a></div>
     <div><a href ="/WebClientTest/Member/list.htm">부모폴더의 다른 페이지 이동하기</a></div>
     
     
     <h1>로컬 경로</h1>
     <div><a href ="ex01.htm">1번예제 (상대)</a></div>
     <div><a href ="/WebClientTest/ex01.htm">1번예제 (절대)</a></div>
     <div><a href ="C:\Users\user\Desktop\Class\WebClient\WebClientTest\WebContent\ex01.htm">1번예제 (로컬)</a></div>
     
     <h1>외부 경로</h1>
     <div><a href = "http://naver.com">네이버 이동하기</a></div>
     <div><a href = "http://www.naver.com">네이버 이동하기</a></div>
     
</body>
</html>

기록용으로 아래의 표기된 출처의 내용과 같습니다.

 

출처

https://sas-study.tistory.com/127

 

 

[HTML] 경로표기법(절대경로, 상대경로)

웹에서 경로표기법 : 현재 페이지 -> 다른 페이지(리소스) '\' : 파일경로 (file:\\\)자바경로C:\Class\DB\JDBC'/' : 웹 경로 구분자. 웹(http://)현재./WebContent/Example 1. 상대경로기준 : 현재 웹페이지의 소속

sas-study.tistory.com

 

+ Recent posts