비전공자 개발자의 CS 공부기록(2)

0

📌 웹 애플리케이션 아키텍처의 구조와 역할

웹 클라이언트

  • 사용자가 웹에 접근할 때 사용하는 프로그램
  • 크롬, 사파리, 엣지 등의 웹 브라우저

웹 서버

  • 웹 클라이언트로부터 HTTP 요청을 받아 데이터를 전달하는 프로그램
  • 아파치 웹 서버, IIS(Internet Information Services), 엔진엑스(Nginx) 등

WAS(Web Application Server)

  • 웹 서버로부터 주로 동적 콘텐츠를 받아 이를 처리한 뒤, 그 결과를 다시 웹 서버에 전달하는 중간자 역할
  • 웹 서버가 해야 하는 일을 나눠 가지며 서버의 부담을 줄이고 전체 웹 통신의 효율을 높이는 조력자 역할
  • 톰캣, 제우스, IBM 웹스피어 등

데이터베이스(DB)

  • 웹 서비스에 필요한 다양한 데이터를 체계적으로 저장하는 곳이며 WAS에서 동적 콘텐츠를 제공하기 위해 접근하는 장소
  • MySQL, 오라클, MongoDB 등


📌 HTTP란?

HTTP(Hypertext Transfer Protocol) 란 웹 브라우저와 웹 서버 간에 데이터를 주고 받기 위해 사용하는 클라이언트/서버 모델을 따르는 프로토콜이다.

특징

  • 한 번 통신을 주고받으면 연결을 끊는 비연결성 프로토콜이다.

  • 헤더
    · '헤더명: 헤더값'의 형식으로 작성하며 대소문자를 구분하지 않는다.
    · 헤더 종류
    ㄴ 공통 헤더 : Date / Cache-control
    ㄴ 요청 헤더 : Host / User-Agent
    ㄴ 응답 헤더 : Server / Location
    ㄴ 엔티티 헤더(메시지 본문에 대한 정보를 포함하는 헤더) : Content-Length / Content-Type

  • 한계
    ㄴ 정보를 암호화하지 않은 상태로 보내기 때문에 정보 유출의 위험에 노출될 가능성이 높다.
    ㄴ 통신 상대를 확인하지 않기 때문에 누가 요청을 보냈는지, 통신 중인 상대가 허가된 상대인지 파악할 방법이 없다.

  • 상태 코드
    1️⃣XX : 웹 서버가 현재 요청을 받았으며 작업을 진행하고 있다.
    100(Continue) : 서버가 요청을 받았으며 추가 요청을 기다리고 있음.

    2️⃣XX : 클라이언트가 요청한 작업을 서버가 성공적으로 처리했다.
    200(Ok) : 요청이 성공적으로 되었습니다.
    201(Created) : 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다.
    204(No Content) : 요청은 성공적으로 처리되었지만 응답 본문이 없습니다.

    3️⃣XX : 리다이렉션 완료 응답으로 요청을 완료하기 위해 재전송이 필요하다.
    301(Moved Permanently) : 추가로 요청한 페이지로 영구 이동되었습니다.
    302(Found) : 추가로 요청한 페이지로 일시적으로 이동되었습니다.
    304(Not Modified) : 리소스가 수정되지 않았으므로 캐시된 데이터를 사용해도 됩니다.

    4️⃣XX : 클라이언트측에 오류가 있다.
    400(Bad Request) : 클라이언트의 요청 내용에 문제가 있습니다.
    401(Unauthorized) : 인증되지 않은 사용자입니다.
    404(Not Found) : 요청에는 문제가 없으나 요청한 데이터가 없습니다.

    5️⃣XX : 서버가 요청을 수행하지 못했음.
    500(Internal Server Error) : 서버 내부적으로 오류가 발생해 응답에 실패했습니다.
    502(Bad Gateway) : 서버가 다른 서버로부터 잘못된 응답을 받는 등 서버간의 네트워크에 문제가 생겨 통신이 제대로 되지 않습니다.
    503(Service Unavailable) : 서버가 일시적으로 과부하 상태이거나 유지보수 중입니다.
    504(Gateway Timeout) : 게이트웨이 또는 프록시 서버가 응답을 기다리다 시간이 초과되었습니다.



📌 HTTPS란?

HTTP 계층 아래 SSL이라는 보안 계층이 추가된 프로토콜이다.

🔆 SSL의 동작 과정
SSL은 공개키 기법과 대칭키 기법이라는 두 암호화 기법을 함께 사용한다.
(관련 포스팅 보기)
SSL은 크게 핸드셰이크, 세션, 세션 종료의 세 단계로 이루어진다.

1단계
: 클라이언트가 랜덤한 데이터와 함께 현재 지원할 수 있는 암호화 방식을 서버에 전달한다.
2단계
: 서버가 클라이언트에게 랜덤 데이터와 지원 가능한 암호화 방식, 인증서(서버가 공식적으로 인증된 기관인 CA에서 발급받은 문서)를 전달한다.
3단계
: 인증서를 발급받은 클라이언트는 이 인증서가 제대로 된 문서인지 검증하기 위해 CA가 발급한 인증서 목록 중에서 서버가 전달한 인증서가 있는지 확인한다. 인증서가 목록에 있다면 한 번 더 확인하기 위해 CA에서 공유하는 공개키를 가지고 인증서를 복호화한다. 복호화에 성공한다면 이 인증서는 서버가 자신의 비밀키로 암호화했다는 것이 검증되니 서버를 신뢰할 수 있게 된다.
4단계
: 본격적으로 키를 주고받기 위해 클라이언트는 실제 데이터 통신에서 사용할 대칭키를 임시로 만든다.(이 때 대칭키는 클라이언트와 서버가 서로 주고받은 랜덤한 데이터를 조합한 임시키이다.)임시키는 대칭키이기 때문에 앞서 갖고 있던 공개키로 암호화해 서버에 전달한다.
5단계
: 키를 받은 서버는 자신이 갖고 있던 비밀키로 암호를 해독해 임시 키를 전달받는다.
6단계
: 클라이언트와 서버의 임시 키는 일련의 과정을 거쳐 세션 키로 바뀌고 이 세션키를 이용해 본격적으로 클라이언트와 서버가 통신을 할 수 있게 된다.




[출처] - 그림으로 쉽게 이해하는 웹/HTTP/네트워크

0개의 댓글