코딩크리처 2024. 8. 7. 20:15

**hyperskill - What is an HTTP server 영어 원문

해석은 쉬워서 좋은데, 기초를 알려주느라 글이 길어 해석이 조금 힘들었다..

웹 서버, 혹은 HTTP 서버는 클라이언트의 요청들을 처리할 수 있으며,

클라이언트에게 응답 반환 처리할 수 있는 컴퓨터의 프로그램입니다.

서버가 시작 될 때, 서버는 언제나 요청을 기다리며,

요청된 정보를 반환함으로서 각각의 요청을 응답합니다.

언제든 당신이 웹사이트를 방문 할 때,

당신은 World Wide Web(WWW) 을 사용하여 HTTP 프로토콜을 통해 요청을 보냅니다.

그리고 나서 서버는 response(응답 : HTTP-response) 를 반환합니다.

이는 기본적인 request/response(요청/응답) 모델입니다.

이 모델은 전체적인 인터넷을 기반으로 합니다.

대부분의 웹 어플리케이션들과 웹사이트들은 이 모델로 작동됩니다.

HTTP 서버의 주요 기능은 저장, 처리, 그리고 웹 페이지 클라이언트에게 전달하는 것 입니다.


What is an HTTP server? - HTTP 서버는 무엇인가?


HTTP serverClient-Server Model 의 일부입니다.

대부분의 웹 어플리케이션과 웹사이트는 이러한 모델을 사용합니다.

HTTP 서버의 주요한 임무는 HTML, CSS, JavaScript를 담은 텍스트 문서를 전송하는 것 입니다.

하나의 서버는 다중 클라이언트를 제공할 수 있습니다.

그리고 클라이언트들은 주로,

HTTP 응답과 웹 어플리케이션 파일을 읽을 수 있는 브라우저입니다. : (FireFox, Safari, Google Chrome) 등

flowchart TB

Server(("Server"))

Client1("Client");
Client2("Client");
Client3("Client");

Server -- HTTP-Response --> Client1
Server -- HTTP-Response --> Client2
Server -- HTTP-Response --> Client3

Client1 -- HTTP-Request --> Server
Client2 -- HTTP-Request --> Server
Client3 -- HTTP-Request --> Server

이는 클라이언트-서버 아키텍쳐입니다.


당신이 브라우저의 주소창에 도메인 이름을 입력한다면,

해당 도메인 이름에 연결하는 서버에 요청을 보냅니다.

그리고 나서 HTTP serverHTTP request 를 처리하고, HTTP response를 반환합니다.

주로, 응답(response)은 헤더와 요청에 대한 body(HTML document) 를 포함합니다.

따라서, 당신이 응답을 받을 때, 들어가고 싶은 사이트를 볼 수 있습니다.


서버static(정적), dynamic(동적), 혹은 hybrid(둘 다 ) 웹 페이지들을 저장합니다.

정적인 페이지는 이미 구축되어 있습니다.

클라이언트가 페이지를 요청 할 때, 서버는 완성되어 있는, 이미 구축된 문서를 반환합니다.

동적인 페이지는 미리 구축된 부분 중, 서버가 클라이언트에게 보낼 수 있는 페이지를 가지고 있습니다.

그리고 나서, 클라이언트 사이드의 JavaScript가,

REST API 서버와 같은 서버로 추가적인 정보를 요청함으로서 웹 페이지의 또다른 부분들을 생성합니다.

하이브리드 페이지는 클라이언트가 페이지를 요청하는 동안,

서버 사이드에서는 페이지를 렌더링합니다.

이러한 상황이 의미하는 것은,

서버가 사용하기에 준비된 웹 페이지들을 가지고 있지 않다는 겁니다.

하이브리드 는, 요청을 처리하고,

클라이언트의 요청에 기반하여 페이지를 구축할 수 있는 모든 필요 데이터를 수집할 필요가 있습니다.


Proxy - 프록시 서버


HTTP 서버들은 요청에 대해 반응하는 것 뿐만 아니라,

다른 서버들에 대해 redirect(리다이렉트) 하는 요청 또한 가능합니다.

이러한 서버들은 proxy(프록시) 서버로서 알려져 있습니다.

프록시 서버 는 하나의 도메인 이름 뒤에 여러개의 웹 서버들을 가지고 있거나,

요청들을 올바른 서버로 리다이렉트 하고 싶을 때, 유익할 겁니다.

예를 들어, 당신이 주요 웹 서버에 사이트를 가지고 있습니다.

또한 당신은 또 다른 서버에 당신의 사이트에 대한 어드민 패널 (관리자 패널)을 가지고 있습니다.

당신은 콘텐츠(내용)을 채울 수 있으며, 어드민 패널 을 사용하여 사이트의 무언가를 수정 할 수 있습니다.

프록시 서버들은 도메인 이름에 따라,

어떤 서버가 클라이언트의 요청들을 받을 것인지 조정 할 수 있습니다.

flowchart LR

Client[["Client\n 클라이언트"]]

Proxy-Server{"Proxy Server\n 프록시 서버"}

Server1("Server for main site\n 주요 사이트에 대한 서버")
Server2("Server for admin panel of your site\n 당신의 사이트에 대한 관리자 패널")

Client -- www.yoursite.com\n www.admin.yoursite.com --> Proxy-Server

Proxy-Server -- www.yoursite.com --> Server1
Proxy-Server -- www.admin.yoursite.com --> Server2

클라이언트는 서로 다른 두 개의 도메인 이름들을 통해 요청을 보낼 수 있습니다.

하지만 이는 Proxy 뒤의 서버로부터 응답을 받습니다.


Load balancing - 로드 밸런싱


HTTP 서버에서 Proxy는, load balancer(로드 밸런서)로서 작동 할 수 있습니다.

HTTP 서버는 마지막 단의 서버에서 요청을 로드하는 것을 줄이기 위해,

클라이언트의 요청들을 분리하여 전송 할 수 있습니다.

따라서 만약에, 웹 서비스가 많은 클라이언트들을 가지고 있다면,

로드 밸런싱 서버를 배치하여, 클라이언트 요청들을 처리하는 서버들에 있어,

요청을 로드하는 것을 줄이는 데 탁월합니다.

로드 밸런싱 서버를 배치하여, 요청을 골고루 분배하여,

일부 서버의 과잉 처리를 방지한다는 의미이다.

HTTP 서버들은 유연한 밸런싱을 위한,

밸런스 구성을 설정하기 위한 관리자를 제공합니다.


Encoding - 인코딩


당신의 요청을 서버로 전송 할 때, 서버에 도달하기 전에, 요청은 주로 많은 노드를 통과합니다.

그리고 이러한 모든 노드들은 당신이 보낸 데이터를 볼 수 있습니다.

또한 이러한 노드들은 서버의 응답도 볼 수 있습니다.

따라서, HTTP 서버들은 certificates(인증서)를 사용하여 연결을 보안 할 수 있습니다.

만약 당신이 도메인 이름의 왼쪽에 있는 브라우저 주소창을 본다면,

"lock" 심볼을 볼 수 있습니다.

당신이 이를 클릭 할 때, 당신은 연결이 보안적인지 아닌지 볼 수 있습니다.

보안 연결이 의미하는 것은, 당신이 서버에 보내고 받는 모든 데이터가 인코딩(encoded) 되어 있으며,

당신의 데이터를 누구도 볼 수 없음을 의미합니다.


Secure HTTP connection(보안 HTTP 연결)은 HTTPS 라고 부릅니다.

HTTPS 프로토콜은 HTTP 프로토콜로부터 완벽히 다르지 않습니다.

차이점은, HTTPSTLS, SSL 전송 매커니즘에 의해 작동됩니다.

TLS (Transport Layer Security) 는 SSL (Secure Socket Layer) 을 기반으로 합니다.

TLS 는 진실된 보안을 생성하는 규칙들과 지침들을 제공하며,

인터넷을 넘어 데이터를 안전하게 전송합니다.


당신이 전송하고 받는 모든 데이터는 SSL 증명서(인증서)로 인해 인코딩됩니다.

인증서(Certificates) 는 특별한 조직이나 인증 기관드렝 의해 발행됩니다.

이들은 인증서에 그들의 디지털 시그니처를 표시합니다.

브라우저는 인증서 사인을 볼 수 있으며, 인증서가 유효하다는 것을 증명할 수 있습니다.


이는 인터넷의 가장 흔한 보안 스키마 중 하나입니다.

당신이 서버로 무언가를 전송 할 때, 브라우저는 인증서를 먼저 확인하고,

그리고 나서 당신의 데이터를 "public key"(공개키) 로 인코딩합니다.

그리고 서버는 당신이 보낸 데이터를 디코딩하기 위해 필요한 "private key"(비밀키) 를 가지고 있습니다.

서버가 응답을 전송 할 때, 이 또한 공개키 로 인코딩 됩니다.

그러곤 당신의 브라우저가 비밀키를 사용하여 이러한 응답을 디코드 할 수 있습니다.


더 보안적이기 위해서, HTTP 서버는 당신의 인증을 요구합니다.

인증을 위해, 당신의 요청 헤더는 "login", "password" 를 담고 있는 인증 파리미터를 반드시 가져야 합니다.


Compressing - 압축


누구도 느린 웹 페이지 다운로드 속도를 사랑하지 않습니다.

HTTP 서버들은 전송할 데이터를 압축 할 수 있습니다.

이러한 과정은 마치,

당신이 문서를 가진 폴더를 "archive"(아카이브)로 압축하고,

누군가에게 이메일로 이를 전송하는 것과 비슷합니다.

서버는 클라이언트에 대한 모든 응답을 압축하고,

클라이언트(브라우저) 는 데이터 압축을 풉니다.

압축된 데이터는 압축되지 않는 데이터보다 사이즈가 낮으므로,

웹 페이지를 열기 위해 적은 용량(바이트)를 다운로드합니다.


Cookies - 쿠키


웹 서버들은 쿠키 와 같은 당신의 브라우저 데이터를 읽을 수 있습니다.

쿠키들은 사람들의 웹 브라우저를 통해, 웹사이트가 유저의 컴퓨터에 저장하는 작은 데이터 파일들입니다.

쿠키 는 웹사이트가 유저에 대한 정보를 기억하게 해주는데,

다음 방문에 유저들의 환경 설정이나 로그인 상태와 같은 것을 기억하게 해 줍니다.

쿠키 는 몇 가지 웹 어플리케이션을 사용하는 동안,

유저의 경험을 향상시키는데 도와줍니다.

예를 들어, 쿠키는 판매자/샵 이 당신의 검색 기록을 기반으로

어떤 제품을 추천 할 수 있는지 도와줍니다.


쿠키 는 잠재적으로 불안정 할 수 있는데,

쿠키는 유저의 컴퓨터에 정보를 저장하여,

웹사이트에 의해 접근되거나, 공격자(해커)들이 유저의 컴퓨터의 접근 혹은 네트워크를 얻을 수 있기 때문입니다.

만약 쿠키가 유저의 로그인 자격 증명과 같은 민감한 정보를 담고 있다면,

이 정보는 탈취되어 유저 행세를 하는 데 사용 될 수 있습니다.

게다가, 쿠키들은 인터넷에서 유저의 행동을 추적하는 데 사용 될 수 있습니다.

이러한 상황은 많은 유저들 사이에서 사생활 침해를 일으킬 수 있습니다.

몇몇 웹사이트들은 유저 환경설정에 대한 정보를 저장하는 데 쿠키 가 사용 될 것이며,

이러한 쿠키 정보는 광고 타켓팅을 위해 사용합니다.

이는 사생활 침해로 간주 될 수 있습니다.

따라서, 쿠키에 어떤 정보가 저장될지에 대해 조심해야 하는 것이 중요하며,

사생활, 보안 둘 다 유지하기 위해 정기적으로 청소하는 것이 중요합니다.


Cache - 캐시


서버들은 가장 잦은 요청들을 캐시 할 수 있습니다. : 임시 저장?

만약 당신의 최신 요청이 이전의 요청과 동일하다면,

서버는 해당 응답에 대해 저장된 복사본을 그냥 반환합니다.

또한, 서버는 당신 브라우저의 로컬 캐시 내부의 몇 가지 데이터를 저장하기 위해,

특별한 헤더를 설정 할 수 있습니다.

따라서 만약 당신의 캐시가 당신의 요청에 대해 응답을 가지고 있다면,

브라우저는 서버에 어떠한 요청도 전송하지 않습니다.


Conclusion - 결론


HTTP 서버들은 클라이언트와 또다른 서버와 소통하기 위한 풍부한 도구들을 가지고 있습니다.

HTTP 서버는 보안은 생성하고, 클라이언트와의 연결을 최적화하는 복잡한 시스템입니다.

이러한 기능은 정적 컨텐츠와 동적 웹 페이지를 저장하거나 분배하는 데 도와 줄 수 있습니다.

HTTP 서버는 인터넷의 기초이며, 소통 규칙이 내부에 있습니다.

심지어 가장 간단한 어플리케이션, 혹은 웹 페이지를 개발하는 동안,

HTTP 서버가 동작하는 것을 아는 것은 아주 좋은 도움이 될 겁니다.

모든 개발자들은 그들의 목표를 위해 기초적인 HTTP 서버를 생성하는 스킬을 가져야 합니다.



words to remember


certificates : 인증서, 증명서

issue : 발행하다

preferences : 환경 설정, 우선권, 더 좋아함, 기호물

impersonate : 가장하다, 행세하다, 역을 맡아하다**