무상태 프로토콜(stateless protocol)에 대해서
대략 어떤 의미로 쓰이는지 정도는
튜터님 이야기를 들어서 파악했지만
도대체 어디서 쓰이는 개념이고,
어떻게 구조화 되어 있는지에 대해서는 잘 모르기 때문에
너무 궁금했다.
우리가 보고 있는 웹 페이지에서 무상태 프로토콜은
어디에, 어떻게 적용 되었을까 ??
목차
1. 프로토콜의 사전적 의미
2. 프로토콜의 종류
3. Hyper Text 와 HTML이란 ?
4. HTTP 란 ?
5. 통신 규약(프로토콜)의 중요성
6. TCP/IP란 무엇이고, 어디에 쓰이고 있는가 ?
7. cashy(캐시)란??
8. 클라이언트 상태란??
9. stateful과 stateless??
1. 프로토콜(protocol)의 사전적 의미
내 컴퓨터와 다른 컴퓨터 사이나
중앙 컴퓨터와 단말기 사이에서
데이터 통신을 원활하게 하기 위해 필요한 통신 규약을 의미한다(사전적의미)
”신호 송신의 순서, 데이터의 표현법, 오류(誤謬)검출법” 등을 정하는
통신 규약(通信規約)이다.
2. 프로토콜(protocol)의 종류
몇 가지 대표적인 프로토콜의 종류에 대해 이야기 하겠습니다.
인터넷 프로토콜 (IP):
인터넷에서 컴퓨터 간의 데이터 패킷을
라우팅하고 전달하기 위한 기본 프로토콜입니다.
(라우팅이란 ? : https://aws.amazon.com/ko/what-is/routing/)
* 라우팅은 간단히 "경로 설정, 데이터 전달, 경로 밸런싱"이라는 기능을 수행하는 걸 말합니다.
* 라우팅은 네트워크 통신의 효율성을 높입니다.
네트워크 통신 장애가 발생하면 웹 사이트 페이지가 로드될 때까지 사용자가 기다리는 시간이 길어집니다.
또한 웹 사이트 서버에서 많은 수의 사용자를 처리하지 못해 서버의 작동이 중단될 수 있습니다.
라우팅은 네트워크가 정체 없이 최대한 많은 용량을 사용할 수 있도록
데이터 트래픽을 관리함으로써, 네트워크 장애를 최소화해 줍니다.
인터넷 프로토콜은 IP 주소를 사용하여
컴퓨터들을 식별하고,
데이터 패킷을 분할하고 조립하여 전송합니다.
데이터 패킷에는 여러가지 데이터 종류들이 있고,
헤더의 내용을 통해 구분합니다.
전송 제어 프로토콜 (TCP):
TCP는 IP 위에서 동작하는 프로토콜로, 신뢰성 있는 데이터 전송을 담당합니다.
TCP는 데이터를 패킷 단위로 분할하여 전송하고, 수신측에서 이를 재조립하여 데이터의 정확한 전달을 보장합니다.
(TCP란 ? : https://musclebear.tistory.com/2 , https://developer.mozilla.org/ko/docs/Glossary/TCP)
인터넷 메시지 교환 프로토콜 (IMAP, POP):
IMAP 및 POP는 전자 메일에 액세스하는 두 가지 방법입니다.
(자세한 내용 : 마이크로소프트 지원 문서)
하이퍼텍스트 전송 프로토콜 (HTTP):
HTTP는 웹 브라우저와 웹 서버 간의 통신을 위한 프로토콜입니다.
Hypertext Transfer Protocol 는 Hypertext에 대한 전송방식에 대한 통신 규약을 말합니다.
WWW(World Wide Web)에서 이 HTTP 통신 규약을 정했습니다.
클라이언트가 서버에 요청을 보내고, 서버는 해당 요청에 대한 응답을 제공하는 방식으로 동작합니다.
일반인도 알기 쉬운 HTTP 뜻 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ding-dong&logNo=221223246576
RFC 공식 문서에서 정의한 HTTP 뜻 : https://tools.ietf.org/html/rfc2616
도메인 이름 시스템 (DNS):
DNS(Domain name system)는 인터넷에서 도메인 이름을 IP 주소로 매핑하는 역할을 담당합니다.
사용자가 도메인 이름을 입력하면 DNS는 해당 도메인 이름에 대한 IP 주소를 찾아 클라이언트에게 전달합니다.
네이버의 domain name 은 naver.com 이고
IP 주소는 223.130.195.95 입니다.
DNS(Domain name system)는 naver.com 이라는 도메인 이름을
223.130.195.95 이라는 IP 주소를 찾아 클라이언트에게 전달합니다. ㅎㅎ
파일 전송 프로토콜 (FTP):
FTP(File Transfer Protocol)는 파일을 컴퓨터 간에 전송하기 위한 프로토콜로,
파일 업로드, 다운로드, 삭제, 이동 등을 지원합니다.
예를 들어, 이용자의 PC와 쇼핑몰 호스팅 서버 간 파일을 송수신하는 프로토콜 프로그램을 말합니다.
FTP는 파일 전송 전용 서비스이기 때문에,
많은 양의 파일을 일괄적으로 주고 받을 때 효과적입니다.
쇼핑몰에 필요한 파일이 대량이고, 빈번하게 전송이 필요한 경우
FTP를 이용하면 효율적으로 쇼핑몰을 운영할 수 있습니다.
이 외에도 다양한 프로토콜이 있으며, 각각은 특정한 목적과 사용 환경을 가지고 있습니다.
이러한 프로토콜들은 네트워크 통신에서 표준화되어 상호 운용성을 제공하고,
다양한 응용 프로그램과 서비스의 개발과 운영에 활용됩니다.
3. Hyper Text 와 HTML이란 ?
웹에서는 일반 텍스트가 아닌, Hyper Text 를 사용합니다.
여기에 html에서 사용하는 태그<>도 존재하고
HTML(Hypertext Markup Language) 언어들이 존재합니다.
Hyper Text 란?
Hyper Text 를 통해서, 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트를 말합니다.
우리는 웹 사이트에서 버튼 한번으로 다른 페이지로 넘어갈 수 있습니다.
Markup Language란? 위키백과
마크업 언어(markup 言語, markup language)는 태그 등을 이용하여
문서나 데이터의 구조를 명기하는 언어입니다
HTML(Hypertext Markup Language)이란 ? 위키백과
하이퍼 텍스트 마크업 언어(영어: Hyper Text Markup Language)는
웹 페이지 표시를 위해 개발된 지배적인 마크업 언어다.
또한, HTML은 제목, 단락, 목록 등과 같은 본문을 위한 구조적 의미를 나타내는 것뿐만 아니라
링크, 인용과 그 밖의 항목으로 구조적 문서를 만들 수 있는 방법을 제공한다.
그리고 이미지와 객체를 내장하여 대화형 양식을 생성하는 데 사용될 수 있다.
HTML은 웹 페이지 콘텐츠 안의 꺾쇠 괄호에 둘러싸인 "태그"로 되어있는 HTML 요소 형태로 작성한다.
HTML은 웹 브라우저와 같은 HTML 처리 장치의 행동에 영향을 주는 자바스크립트,
본문과 그 밖의 항목의 외관과 배치를 정의하는 CSS 같은 스크립트를 포함하거나 불러올 수 있다.
HTML과 CSS 표준의 공동 책임자인 W3C는 명확하고 표상적인 마크업을 위하여 CSS의 사용을 권장한다.
4. HTTP 란 ?
위에서 다루었던 내용이기에, 자세한 내용은 위키백과를 확인부탁드립니다.
5. 통신 규약(프로토콜)의 중요성 [CHAT GPT]
HTTP(Hypertext Transfer Protocol)는 웹에서 클라이언트와 서버 간의 통신을 위한 프로토콜입니다. 만약 HTTP 통신 규약이 없다면 다음과 같은 불편함이 있을 수 있습니다:
- 통신의 일관성 부재: HTTP는 클라이언트와 서버 간의 일관된 통신 규약을 제공합니다. 클라이언트가 서버에 요청을 보내고 서버가 응답을 제공하는 방식이 일관되어 있어, 클라이언트와 서버 간의 상호작용을 쉽게 구현할 수 있습니다. 만약 통신 규약이 없다면 클라이언트와 서버 간의 상호작용 방식이 일관되지 않을 수 있으며, 개발자들은 매번 통신 방식을 정의하고 구현해야 할 것입니다.
- 표준화 부재: HTTP는 IETF(Internet Engineering Task Force)에 의해 표준으로 정의되어 있습니다. 이는 다양한 플랫폼과 시스템 간에 호환성을 유지하고 상호운용성을 보장하는 데 도움이 됩니다. HTTP 표준이 없다면 각 시스템은 자체적인 통신 규약을 가지게 되어 호환성 문제가 발생할 수 있습니다.
- 보안의 취약성: HTTP는 암호화되지 않은 텍스트 기반 프로토콜입니다. 따라서 데이터가 네트워크를 통해 전송되는 동안 쉽게 도청될 수 있습니다. HTTPS(HTTP Secure)와 같은 암호화된 통신 프로토콜은 데이터의 기밀성과 무결성을 제공하는데 도움을 주는 반면, HTTP 통신 규약이 없다면 보안 취약성이 증가할 수 있습니다.
- 추가 기능의 부재: HTTP는 다양한 기능과 확장을 제공하여 웹 애플리케이션을 개발할 수 있도록 합니다. 예를 들어, HTTP 헤더를 통해 클라이언트와 서버 간의 추가 정보를 전달하거나, 캐싱, 압축, 세션 관리 등을 지
음 .... 결론적으로 제가 이해한 바로
통신 규약이라는게 없다면, 웹 프레임 워크마다 혹은
웹, 앱, 모든 디바이스마다 각 회사들이 있을 겁니다.
각 회사들이, 데이터는 어떻게 주고 받고
보안 규칙은 어떻게 정하고, 클라이언트가 서버와 주고받을 때
어떤 방식으로 주고받을 지에 대한 규율을
각 회사마다 정해야 한다는 것입니다.
다른 예로, 우리는 유튜브를 보다가도
네이버에 들어가기도 하고
네이버 안에서도, 뉴스를 보다가 웹툰을 보다가
메일함에 들어가기도 합니다.
그런데, 각 페이지마다 서버가 다 같진 않을 것이고
회사가 다를 수도 있습니다.
그런데, 각 페이지 및 회사 마다 통신 규약이 다르다면 어떻게 될까요 ??
분명 여러 방면에서 문제가 생길 것입니다.
6. TCP/IP란 무엇이고, 어디에 쓰이고 있는가 ?
전송 제어 프로토콜(Transmission Control Protocol, TCP, 문화어: 전송조종규약)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC 793에 기술되어 있다.
TCP는 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용된다.
TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 비접속형 사용자 데이터그램 프로토콜(User Datagram Protocol)을 사용한다. 이것은 전달 확인 및 순차 보장 기능이 없는 대신 오버헤드가 작고 지연시간이 짧다는 장점이 있다.
정리하면, TCP란 IP의 핵심 프로토콜인데
웹 브라우저들이 WWW 내에서 서버에 연결할 때 사용이 되는데
파일, 이메일 등등 을 전송할 때 쓰는 프로토콜이다.
중요한것은, 안정성, 에러없이, 순서를 정해서 교환할 수 있다는 내용이다.
7. cashe(캐시)란??
캐시(cache)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킵니다.
캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이
오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
캐시에 데이터를 미리 복사해 놓으면
계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다.
캐시는 시스템의 효율성을 위해 여러 분야에서 두루 쓰이고 있다.
위키백과
컴퓨터 시스템에서 캐시는 다양한 형태로 사용될 수 있습니다.
웹 브라우저 캐시: 웹 브라우저는 이전에 방문한 웹 페이지의 일부 또는 전체를 로컬 저장소에 저장합니다. 이를 통해 동일한 웹 페이지에 다시 접속할 때 웹 서버에 데이터를 요청하는 대신 로컬 캐시에서 데이터를 로드하여 빠른 로딩을 가능하게 합니다.
CPU 캐시: CPU 캐시는 프로세서 내부에 위치한 작고 빠른 메모리로, 주로 레지스터와 메인 메모리 사이에서 데이터를 저장하고 액세스 속도를 향상시킵니다. CPU가 동일한 데이터에 연속적으로 액세스할 때, 해당 데이터를 CPU 캐시에 저장하여 반복 액세스 시간을 줄입니다.
데이터베이스 캐시: 데이터베이스 시스템은 쿼리 결과나 데이터 조각을 메모리에 캐시하여 이후에 동일한 쿼리가 실행될 때 디스크 액세스를 피하고 데이터 검색 성능을 향상시킵니다. 이는 데이터베이스 서버의 응답 시간을 단축시키고 부하를 줄여주는 데 도움을 줍니다.
캐시는 데이터 액세스의 빈도가 높거나 데이터를 반복해서 사용하는 경우에 특히 효과적입니다.
데이터의 로딩 또는 계산 비용을 줄이고 성능을 향상시킬 수 있으며,
네트워크 대역폭을 절약하고 시스템 전반적인 성능을 최적화하는 데 기여합니다.
8. 클라이언트 상태란??
클라이언트의 상태에도 다양한 종류가 있습니다. 클라이언트의 상태는 클라이언트가 서버와 상호 작용하면서 유지하거나 가질 수 있는 정보나 상태입니다. 일반적으로 다음과 같은 종류의 클라이언트 상태가 있을 수 있습니다:
- 세션 상태: 클라이언트가 서버와 연결된 세션에 대한 상태 정보를 유지하는 것을 말합니다. 이는 클라이언트 식별, 인증 정보, 세션 유지 등과 관련될 수 있습니다. 세션 상태는 주로 Stateful 프로토콜에서 사용됩니다.
- 사용자 상태: 클라이언트의 사용자 관련 상태 정보를 말합니다. 예를 들어, 로그인 상태, 사용자 권한, 프로필 정보 등이 사용자 상태에 해당합니다. 이러한 정보는 클라이언트의 요청을 서버에 전달하고 서버는 해당 정보를 기반으로 작업을 수행할 수 있습니다.
- 장치 상태: 클라이언트 장치에 대한 상태 정보를 말합니다. 예를 들어, 디바이스의 현재 위치, 네트워크 연결 상태, 화면 크기 등이 장치 상태에 해당합니다. 이러한 정보는 클라이언트 측에서 서버에 전달되어 서버는 해당 정보에 따라 콘텐츠를 제공하거나 동작을 조정할 수 있습니다.
- 캐시 상태: 클라이언트가 로컬에 보유한 캐시에 대한 상태 정보를 말합니다. 이는 클라이언트가 이전에 액세스한 데이터나 자원을 저장하고 재사용하는 데 사용되는 정보입니다. 예를 들어, 브라우저 캐시는 웹 페이지의 상태 정보를 가질 수 있습니다.
각각의 상태는 클라이언트와 서버 간의 상호작용에서 중요한 역할을 할 수 있으며, 클라이언트와 서버 간의 효율적인 통신과 기능 수행을 지원하기 위해 사용됩니다. 어떤 상태가 사용되는지는 프로토콜, 애플리케이션 또는 시스템의 설계와 요구사항에 따라 다를 수 있습니다.
어느정도 이해를 했는데, 클라이언트 상태란
클라이언트(사용자)가 웹 페이지에서 웹 페이지의 크기나 스타일을 나름 저장했겠죠 ?
혹은 클라이언트의 로컬 저장소에, 그 클라이언트가 사용한 정보들이 있을 것입니다.
그 상태들을 유지하고 기억 하면 stateful 하다고 하고
그 상태들을 일일이 기억하지 않고, 무응답한다면 stateless 하다고 합니다.
RPG 게임에서는 사용자의 셋팅(HP가 50%이상일 때는 HP물약을 자동사용 한다거나 하는 상태)를 모두 기억해야겠죠
그러면 stateful 하게 설계 해야할 것이고
일반적인 웹 사이트에서는, 페이지를 이동하거나 클라이언트의 상태가 바뀔때마다
혹은 서버가 바뀔때마다
클라이언트의 상태를 저장하는 것이 오히려 서버에 부담을 주고, 서버 비용을 증대시키며
서버를 관리하는데에 비효율적일 수 있습니다.
9. stateful과 stateless??
stateful 은
1. 서버에서 클라이언트 상태를 계속 유지하는 것이 맞는지 ??
2. 클라이언트 상태가 시시각각 바뀌는데, 그걸 일일이 기억해내는게 안좋은지 ??
에 따라 설계 목적에 따라 , 선택해주는 것이 맞습니다.
stateful, stateless를 나누기 전에
cashe 라는 개념이 존재하기 때문에,
우리가 이미 접속했던 사이트나 데이터들에 대해서
효율적으로 손쉽게 접근할 수 있습니다.
그런데, RPG게임처럼, 사용자 정보들이나 각 사용자마다
클라이언트 상태를 유지해야하는가 ??
각 사용자들마다 클라이언트 상태를 굳이 유지할 필요가 없는가??
에 대해서 생각해볼 필요가 있습니다.
또한 stateless 한 설계의 장점과 단점
stateful 한 설계의 장점과 단점을 어느정도 잘 알고
stateless 의 단점을 보완하기 위해서
세션과 쿠키, 토큰 기반 인증, 상태 관리 서버 등의
추가적인 메커니즘과 기술이 도입되었고,
사용자 상태 관리, 세션 유지, 확장성 향상, 보안 강화 등을 할 수 있음을 통해
구체적인 방법들에 대해서도 어느정도 이해하는게 좋다고 생각합니다.
저는 파이썬 기반의 Django 라는 웹 프레임워크를 통해
웹 사이트 개발에 대해 공부를 하고 있는데요
stateless 하게 설계하고 있다는 것을
잘 모르고 공부하고 있었습니다.
설계 자체에 대한 본질을 어느정도 이해하고
개발을 한다면, 개발자로서 한 걸음 다가갈 수 있을 것 같아요.
stateful 과 stateless 에 대한 다양한 글들을 읽었는데 그 중에서
https://velog.io/@rlrhs11/Stateless-Stateful-%EC%9B%B9%EC%84%9C%EB%B2%84-%ED%86%B5%EC%8B%A0-%EB%B0%A9%EC%8B%9D
이 블로그의 글을 보며, 대부분 이해했습니다.
'부트캠프TIL, WIL > AI웹개발(스파르타코딩클럽)' 카테고리의 다른 글
[TIL]2023년 8월 21일 월요일. (1) | 2023.08.22 |
---|---|
[AI웹개발][68일차TIL] 자바스크립트 동작원리, (stack, Queue, event loop)[코딩애플] 자료구조기본개념 (0) | 2023.08.19 |
[AI웹개발][66일차TIL] 자바스크립트 강의 듣기 및 로그인 페이지, 상단 네비바, 하단 푸터 html 작성하기 (0) | 2023.06.23 |
[AI웹개발][65일차TIL] CSS 공부하기 (3)Flexbox 완전 정리 [드림코딩유툽] (0) | 2023.06.20 |
[AI웹개발][64일차TIL] CSS 공부하기 (2)layout 정리, display, position [드림코딩유툽] (0) | 2023.06.20 |