Skip to content

Latest commit

 

History

History
274 lines (123 loc) · 14.9 KB

Web.md

File metadata and controls

274 lines (123 loc) · 14.9 KB

Web

  1. HTTP ✔️
  2. HTTPS ✔️
  3. HTTP 프로토콜 ✔️
  4. Web server ✔️
  5. CGI (Common Gateway Interface) ✔️
  6. WSGI (Web Server Gateway Interface) ✔️
  7. WAS (wep application server) ✔️
  8. 도메인 동작 원리 ✔️
  9. 대칭키 비대칭키 ✔️
  10. SSL ✔️
  11. TLS ✔️
  12. 세션/쿠키 인증
  13. 토큰 인증

HTTP

웹 서버와 사용자 컴퓨터에 설치된 웹 브라우저 사이에 하이퍼텍스트를 전송하기 위한 통신 규약이다. 정보를 '텍스트'로 주고받기 때문에 데이터 유출이 발생할 수 있다. 기본 보트인 80번에서 대기 중이다.

HTTPS

HTTP의 보안 취약점을 해결하기 위한 프로토콜이다. SSL (Secure Socket Layer)을 추가한 것이다. 기본 골격이나 사용 목적은 HTTP와 거의 동일하지만, 데이터를 주고 받는 과정에 '보안'요소가 추가된다는 것이 가장 큰 차이점이다. 서버와 클라이언트 사이의 모든 통신 내용이 암호화된다.

클라이언트는 공개키를 얻어 데이터를 암호화해서 전송하고, 서버는 개인키를 이용해 복호화한다.

서버는 개인키로 암호화한 정보를 보내고 사용자는 공개키로 복호화한다.

HTTP 프로토콜

프로토콜이란 상호 간에 메시지를 주고 받는 양식과 정의한 규칙을 의미한다. 특정 기기 간에 데이터를 주고 받기 위해 정의되었다. 웹에서는 브라우저와 서버 간에 데이터를 주고 받기 위한 방식으로 HTTP 프로토콜을 사용하고 있다.

Web Server

클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(html, jpeg, css 등)를 제공하는 컴퓨터 프로그램을 말한다.

클라이언트에서 요청이 올 때, 가장 앞에서 요청에 대한 처리를 한다.

HTTP 프로토콜을 기반으로 클라이언트의 요청을 서비스하는 기능. 요청에 따라 정적인 컨텐츠를 제공하거나 동적인 컨텐츠를 요청한다.

정적인 컨텐츠를 제공할 때는 WAS를 거치지 않고 바로 자원을 제공한다.

동적인 컨텐츠 제공을 위한 요청을 전달한다. 클라이언트의 요청(request)를 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다 (Response). 클라이언트는 일반적으로 웹 브라우저를 의미한다.

EX) Apache Server, Nginx

출처

CGI (Common Gateway Interface)

웹 서버에서 어플리케이션을 제공하기(동작시키기) 위한 인터페이스다. 정적인 웹서버를 동적으로 기능하게 하기 위해서 등장했다. 서버 프로그램과 외부 프로그램 간의 인터페이스다.

서버에서 다른 프로그램을 불러내고 그 프로그램의 처리 결과를 클라이언트로 보내줄 수 있는 인터페이스.

CGI는 데이터 처리 요청이 있을 때마다 매번 프로세스를 생성하여 처리했다. 요청이 많아질수록 서버에 부하가 크게 가게 된다.

image

WSGI (Web Server Gateway Interface)

파이썬에서 어플리케이션(파이썬 습크리트)이 웹 서버와 통신하기 위한 인터페이스다. CGI의 일종

서버와 어플리케이션 사이에서, 양방향의 API를 실행할 수 있는 WSGI 미들웨어 (이하 미들웨어, middleware)가 사용되기도 한다. 서버는 클라이언트의 요청을 받아 미들웨어에 넘겨준다. 미들웨어가 요청을 처리한 후에는 요청을 어플리케이션에 보낸다. 어플리케이션에서 나온 응답은 다시 미들웨어를 통해 서버와 궁극적으로 클라이언트 측에 전달된다. WSGI 친화적인 어플리케이션에서는 이러한 미들웨어 여러 개가 스택을 이루어 사용될 수 있다.

웹 서버(nginx)와 웹 애플리케이션(Django)간의 연결을 중계한다. niginx에서 받은 요청을 django에서 처리하기 위해 중계 역할을 하는 것. nginx는 파이썬을 모르기 때문에 wsgi가 받아 http 요청을 파이썬으로 바꿔주고, django로 부터 받은 응답을 nginx가 알 수 있도록 바꿔준다.

web server가 django에게 말을 걸 수 있는 수단

출처

출처2

EX) uwsgi, gunicorn

MiddleWare

양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어

WAS (Web Application Server)

WAS = Web Server + CGI / 웹 서버 위에 서버 어플리케이션을 얹은 것

DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 application server.

HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다.

웹 컨테이너 혹은 서블릿 컨테이너 라고도 불린다. 컨테이너는 jsp, servlet을 실행시킬 수 있는 소프트웨어를 말한다.

주요 기능

  • 프로그램 실행 환경과 DB 접속 기능 제공
  • 여러 개의 트랜잭션 관리 기능
  • 업무를 처리하는 비즈니스 로직 수행

EX) Tomcat, JBoss 등

Servlet -> java로 구현된 CGI

자바를 사용하여 웹을 만들기 위해 필요한 기술.

웹 프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

MVC 패턴에서 Controller로 이용된다.

파이썬 기준

image

Web Server와 WAS를 구분하는 이유

Web Server가 필요한 이유

정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보낼 수 있어서 서버의 부담을 줄일 수 있다.

WAS가 필요한 이유

사용자의 요청에 맞게 동적 컨텐츠를 제공해줘야 하기 때문이다. 만약 web server 만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스 해야 하는데, 자원이 절대적으로 부족하다. 따라서 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있다.

구분하는 이유 - 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해

기능을 분리하여 서버 부하를 방지한다. WAS 는 다양한 로직을 처리하느라 바쁘기 때문에 정적 컨텐츠는 web server에서 빠르게 클라이언트에 제공하는 것이 좋다.

물리적으로 분리하여 보안을 강화한다. SSL에 대한 암복호화 처리에 web server를 사용한다.

Load Balancing을 위해 여러 대의 WAS를 연결하여 사용할 수 있다. 장애 극복과 처리에 유리하다.

도메인 동작 원리

  1. 브라우저에서 도메인 네임(www.--.com)을 입력했을 때, PC는 미리 설정되어 있는 Local DNS에게 IP주소를 물어본다.
  2. 만약 Local DNS에 호스트 네임에 대한 정보가 없을 경우 각 Local DNS에 설정된 Root DNS에 호스트 네임에 대한 질의를 요청한다.
  3. Root DNS는 호스트 네임에 대한 IP주소를 반환하고, Local DNS는 호스트 네임에 대한 IP주소를 캐싱하고, IP 주소 정보를 전달한다.

대칭키 비대칭키(공개 키)

대칭키 암호는 암호화와 복호화에 같은 암호 키를 사용하는 알고리즘이다. 비대칭 키에 비해 계산 속도가 빠르지만 키 관리에 어려움이 있다.

비대칭키 (공개키) 암호는 암호화와 복호화를 위해 서로 다른 키를 사용하는 알고리즘이다. 공개키라고 하여, 하나의 키는 공개하고 하나는 비밀키로 안전하게 보관해야 한다. 키를 공유하지 않고 암호화 통신을 할 수 있다는 장점이 있다.

SSL (Secure Socket Layer)

전송계층 상에서 클라이언트, 서버에 대한 인증 및 데이터 암호화 수행. 클라이언트와 서버 양단 간 응용 계층 및 TCP 전송계층 사이에서 안전한 보안 채널을 형성해 주는 역할을 수행하는 보안용 프로토콜. 주로 웹 브라우저와 웹 서버 사이의 안전한 보안 채널을 제공하기 위해 사용된다.

TLS (Transport Layer Security Protocol)

SSL의 차세대 버전이다. 모든 종류의 인터넷 트래픽을 암호화한다.

세션/쿠키 인증

세션 쿠키 방식의 인증은 기본적으로 세션 저장소를 필요로 한다. 세션 저장소는 로그인 했을 때 사용자의 정보를 저장하고 열쇠가 되는 세션ID 값을 만든다. 사용자는 서버에서 해당 세션 ID를 받아 쿠키에 저장을 한 후, 인증이 필요할 때마다 쿠키를 헤더이 실어 보낸다. 서버에서는 쿠키를 받아 세션 저장소에서 대조를 한 후 대응되는 정보를 가지고 온다. 인증이 완료된다.

세션 기반 인증의 stateful 서버는 클라이언트로부터의 요청이 있을 때마다 클라이언트의 상태를 유지한다. 사용자가 로그인을 하여 인증을 요청하면 stateful 서버는 인증에 성공하였을 때의 결과(세션)를 메모리 또는 데이터베이스에 유지하기 때문에 서버에 부하가 발생할 수 있다.

Stateful 서버는 클라이언트에게서 요청을 받을 때마다 클라이언트의 상태를 계속해서 유지하고 이 정보를 서비스 제공에 이용한다. 그 예로는 세션을 유지하는 웹서버가 있다. 로그인을 하면 세션에 로그인이 되었다고 저장을 해 두고 서비스를 제공할 때에 그 데이터를 사용한다. 세션은 서버의 메모리나 데이터베이스에 저장한다.

토큰 인증

토큰 기반 인증은 stateful 서버와 반대적 개념인 stateless 서버를 사용하며 상태 정보를 유지하지 않는다. 서버가 전달받은 토큰을 검증만 하면 되기 때문에 서버의 부담을 줄이고 서비스의 확장성을 높일 수 있다.

  1. 사용자가 로그인 한다. (로그인 정보를 서버로 request)
  2. 서버는 request가 들어오면 사용자를 검증하고 유효할 경우 정상적으로 발급된 토큰임을 증명하는 signature를 갖는 토큰을 클라이언트에 반환한다.
  3. 클라이언트는 토큰을 저장하고 서버 요청 시 해당 토큰을 Request header에 담아 서버에 전달한다.
  4. 서버는 토큰을 검증한 후, 요청에 응답한다.

Stateless 서버는 상태를 유지하지 않는다. 서버는 클라이언트 측에서 들어오는 요청만으로만 작업을 처리한다. 클라이언트와 서버의 연결고리가 없기 때문에 서버의 확장성(Scalability)이 높아진다.

토큰 안에 유저 정보 (예를 들어 db user id)를 넣기 때문에 서버 측에서는 토큰을 따로 저장할 필요가 없다! 토큰 만료 시간과 토큰 안에 있는 유저 정보로 유저를 인증하면 된다.


Q. HTTP와 HTTPS 차이점을 말해주세요

HTTP는 웹 서버와 웹 브라우저 사이에 하이퍼텍스트를 전송하기 위한 통신 규약입니다. 정보를 '텍스트'로 주고받기 때문에 데이터 유출이 발생할 수 있습니다.

HTTPS는 HTTP의 보안 취약점을 해결하기 위해 나온 프로토콜입니다. HTTP에 SSL 보안 계층을 제공합니다.

Q. HTTP 프로토콜은 무엇인가요

우선, 프로토콜이란 특정 기기 간에 데이터를 주고 받기 위해 정의 한 것으로, 데이터를 주고 받는 양식과 규칙의 체계를 말합니다. HTTP 프로토콜은 웹에서는 브라우저와 서버 간에 데이터를 주고 받기 위한 방식입니다.

Q. Web Server란 무엇인가요

클라이언트로부터 요청을 받아 정적인 컨텐츠를 제공하는 것을 말합니다. 또한 동적인 컨텐츠 제공을 위해 클라이언트의 요청을 WAS에 보내고 WAS가 처리한 결과를 클라이언트에게 전달합니다.

Q. WAS란 무엇인가요

웹 서버 위에 웹 어플리케이션이 얹어진 것입니다. 정적인 요청 뿐만 아니라 동적인 요청도 처리가 가능합니다. 사용자의 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어 제공하므로써 자원을 효율적으로 사용할 수 있습니다.

Q. Web Server와 WAS를 구분하는 이유는 무엇인가요

WAS만 있다면 정적 파일들에 대한 제공도 모두 서버에서 요청을 받아 처리해야 하기 때문에 서버 부담이 커질 수 있습니다. 따라서 web server가 빠르게 앞단에서 처리하여 서버 부담을 줄일 수 있습니다.

반대로 web server만 있다면 사용자 요청에 맞는 컨텐츠를 모두 미리 만들어놔야 하기 때문에 자원이 절대적으로 부족합니다.

따라서 자원 이용의 효율성을 위하여 구분하여 사용합니다.

Q. CGI (Common Gateway Interface)는 무엇인가요

웹 서버에서 어플리케이션을 동작시켜 동적 기능을 가능하게 하는 인터페이스입니다. CGI는 데이터 처리 요청이 있을 때 마다 매번 프로세스를 생성하여 처리했기 때문에 요청이 많아지면 서버에 무리가 가게 됩니다.

Q. WSGI는 무엇인가요

파이썬에서 어플리케이션이 웹 서버와 통신하기 위한 인터페이스입니다. 서버는 파이썬을 모르기 때문에 wsgi가 받아 http 요청을 파이썬으로 바꿔주고, 어플리케이션으로 부터 받은 응답을 서버가 알 수 있도록 변경해 주는 역할입니다.

Q. 도메인 동작 원리를 설명해 주세요

호스트 네임을 입력하게 되면 Local DNS에서 호스트 네임에 해당하는 IP 주소를 질의하게 됩니다. 없을 경우, Local DNS에 설정된 Root DNS에게 질의하게 됩니다. 해당하는 IP주소를 찾아 반환해주고, Local DNS는 호스트 네임에 대한 IP주소를 캐싱하고 IP주소 정보를 전달해 줍니다.

Q. 대칭키와 비대칭키의 차이점은 무엇인가요

대칭키는 암호화, 복호화에 같은 키를 사용하는 것을 말합니다. 비대칭 키에 비해 계산 속도가 빠르지만, 키 관리에 어려움이 있습니다.

비대칭키는 공개키 암호화 방식이라고도 불리는데, 암호화와 복호화에 다른 키를 사용합니다. 공개키라고 하여, 하나의 키는 공개하고 하나는 비밀키로 안전하게 보관해야 합니다. 키를 공유하지 않고 암호화 통신을 할 수 있다는 장점이 있습니다.

Q. SSL과 TLS 차이점은 무엇인가요

SSL과 TLS 모두 웹 통신을 암호화 하는데 사용합니다. TLS가 SSL이후 프로토콜입니다.