웹 애플리케이션
- 큰 틀은 클라 -> 웹서버 -> WSGI -> 웹 애플리케이션 -> 데이터베이스 로 구성된다.
- 클라이언트 : 웹 상에서 서버에 데이터를 요청하는 사용자
- 서버 : 클라이언트가 요청하는 데이터를 제공해주는 프로그램
- 프로토콜 : 컴퓨터간 데이터를 주고받는데 정해진 규칙
- http 는 프로토콜중 하나로 여기에 보안기능이 포함된것이 https
- 이 보안기능이 SSL
웹 서버
클라이언트에게 HTTP요청을 받아 웹 페이지를 반환하는 프로그램(컴퓨터)
- 정적 페이지를 처리하는 서버
- 정적 페이지는 데이터베이스와 연결할 필요 없음
아파치 HTTP서버
- 프로세스/스레드 기반 구조
- 사용자의 HTTP 요청이 올때마다 프로세스 생성
- 요청이 많아지면 메모리부족, CPU과부하
- 커넥션이 1만개 넘어가면 하드웨어 성능과 무관하게 더이상 커넥션하지못하는 C10K문제
NGINX 서버
- 비동기 이벤트 기반 구조
- 먼저 등록된 요청부터 순서대로 처리하는 방식으로 아파치의 단점을 보완한 서버방식
WSGI
- 웹 서버가 웹 어플리케이션에 요청을 전달할때 웹서버는 파이썬, 장고같은 환경을 이해하지 못함
- 이때 웹 서버와 웹 어플리케이션 사이에서 번역역활을 하는것이 WSGI
- gunicorn, uwsgi 가 있음
웹 애플리케이션 서버
- 동적 페이지를 처리하는 서버
- DB와 연결되어 데이터 주고받음
- 장고, 플라스트, 스프링 등이 웹 애플리케이션서버를 만드는데 사용되는 프레임워크
- 장고가 플라스크보다 상대적으로 견고하고 기능이 많음
OSI 7 layer
서버에서 송신과 수신과정에 데이터는 7개의 계층을 거침
데이터를 송신할때 각 계층마다 데이터에 헤더를붙이고 그 헤더안에 필요한 정보를 집어넣고
수신할때 각 계층에서 헤더의 정보를 확인하고 떼어냄
즉 각각의 7계층을 지날때 각각의 정보가 담긴 여러개의 헤더가 데이터에 붙었다 떨어짐을 반복
- 물리계층
- 랜카드, 허브(hub) 처럼 실제 물리적으로 연결된 계층
- 데이터를 0과1로 이뤄진 전기신호로 바꾸어 전송(랜카드의 역할)
- 하지만 허브같은경우 한 데이터가 들어오면 연결된 모든 기계에 자동으로 전송
- 데이터를 선택적으로 보낼 수 없음
- 데이터 링크 계층
- 네트워크 장비 사이의 신호를 주고받는 규칙을 정하는 층
- 랜카드에는 맥 주소가 할당되어 있음(48비트)
- 데이터를 주고받을때 데이터에 이더넷헤더를 붙이는데 헤어에는 세가지 정보가 들어감
- 이더넷헤더 : 목적지 맥 주소 + 출발지 맥 주소 + 데이터유형
- 헤더와 데이터를 포함한 전제 덩어리를 프레임 이라고 함
- 허브의 기능을 보완한 스위치라는 장비를 사용
- 허브와 다르게 보내고싶은 컴퓨터에만 선택적으로 데이터를 보낼 수 있음
- 한마디로 스위치라는 장비를 이용해 이더넷이라는 규칙하에 컴퓨터끼리 프레임을 주고받음
- 하지만 스위치 밖에 물리적으로 연결되지 않은 컴퓨터와는 데이터를 주고받기 힘듦
- 네트워크 계층
- 하나의 스위치에 연결되있는 컴퓨터들의 모음
- 라우터를 사용하여 IP주소를 사용해 32비트로 데이터를 주고 받음
- 데이터에 IP헤더를 붙인 IP 패킷 단위로 정보를 주고받음
- IP 주소 = 네트워크ID + 호스트ID
- IPv4 : 10진수로 이뤄진 32비트크기의 주소방식
- IPv6 : 16진수로 이뤄진 128비트 크기의 주소방식
- 네트워크 주소 : 호스트 ID가 모두 10진수로 0인 주소
- 브로드캐스트 주소 : 호스트 ID가 모두 10진수로 255인 주소
- 네트워크 주소와 브로드캐스트 주소는 IP주소로 할당 불가능
- 브로드캐스트 : 네트워크에 있는 모든 호스트로 데이터를 전송하는 방식
- 서브넷마스크 : 네트워크ID와 호스트ID를 식별하기 위한 값
- 전송계층
- 네트워크 계층에서 데이터를 전달할 때, 전송계층에서 잘 전송되었는지 확인
- 통신방법은 크게 연결형통신과 비연결형통신이 있음
- 연결형 통신
- 데이터를 신뢰성있고 정확하게 전달
- 상대방과 계속 연락하며 통신
- 연결형 통신 프로토콜 TCP
- TCP헤더를 붙인 데이터는 세그먼트라고 부름
- 이 TCP헤더에 상대방이 정보를 받았는지 여부를 확인할 수 있기 때문에 신뢰성이 생김
- 3 way hand shake 과정으로 연결하고 종료할때 확인가능
- 어떤 애플리케이션을 쓰는지에따라 포트번호도 구분되어 어디서오고 어디로가는 데이터인지 정확히 식별할 수 있음
- 비연결형 통신
- 데이터를 효율적으로 전달
- 상대방 반응을 확인하지않고 일방적으로 전달
- 비연결형 통신 프로토콜 UDP
- UDP헤어를 붙인 데이터는 UDP데이터그램 이라 부름
- TCP에비해 헤더에 들어가는 정보가 간단함
- 그래서 신뢰성은 낮지만 속도는 빠름
- 응용계층
- 세션계층(5계층), 표현계층(6계층), 응용계층(7계층)을 통틀어 응용계층이라 부름
- 클라이언트 요청을 전달하기위해 서버가 이해할 수 있는 데이터로 변환하고 전송하는 계층
- 클라이언트와 서버가 하려는 업무에따라 응용계층에서 필요한 프로토콜이 달라짐