포도가게의 개발일지
Web Server 본문
기본적인 입출력 제어 방식
- 예를 들어 하드디스크에서 메모리로 데이터를 이동시킨다. 이때 가장 기본적인 방식인 Programmed I/O(Polling) 방식으로 구현하면 하드디스크에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다.
위와 같은 방식은 CPU를 거쳐가기 때문에 한곳을 더 거쳐가는 지연시간도 있겠지만 가장 큰 문제는 입출력 시간 동안 CPU가 idle 상태로 대기하는 것이다. I/O 디바이스에 비해 CPU는 비교할 수 없을 정도로 고속이기 때문에 그 시간을 낭비한다는 것은 상당히 비효율적이다.
1. DMA( Direct Memory Access)
why?
- 입출력 시간 동안 CPU가 idle 상태로 대기하는 것이다.
how?
- Programmed I/O 방식의 단점을 제거한것이 DMA 방식이다. DMA는 Direct Memory Access인데, 이름 그대로 입출력장치가 메모리에 직접 접근한다는 뜻이다.
- 위 예에서 DMA Controller를 이용하면 하드디스크와 메모리를 직접 연결하여 CPU는 제어신호만 주고받을 뿐 데이터 전송에서 제외시킬 수 있다. 따라서 입출력 시 CPU는 제어를 위해 데이터 전송 시작과 완료에만 할당되어 CPU 자원의 낭비가 제거된다.
DMA 동작 순서는 아래와 같다.
1. 입출력장치가 CPU에게 입출력 요청
2. CPU가 DMA 컨트롤러에 명령 송신
3. DMA가 CPU에게 시스템 버스 사용 요청
4. CPU가 버스 사용 허가(CPU가 버스 사용 포기)
5. DMA 컨트롤러가 입출력장치에서 데이터 읽은 후 메모리로 전송
6. 전송 완료 후 CPU에게 완료 신호 송신
2. 네트워크
- 호스트에게 네트워크는 단지 또 다른 I/O 디바이스이다.
- 네트워크에서 수신한 데이터는 I/O와 메모리 버스를 거쳐 어댑터->메모리로 DMA(direct memory access)로 전송된다.
- 반대로 메모리에서 -> 네트워크로 바로 복사가능하다.
- 각 이더넷 어댑터는 비휘발성 메모리에 저장된 고유한 48비트 주소를 가진다.(mac address)
3. 이더넷
- 이더넷은 가장 대표적인 컴퓨터 네트워크 기술의 하나로, 가정이나 건물과 같은 로컬 환경의 컴퓨터 및 기타 장치를 네트워크에 연결하기 위해 개발된 통신 표준입니다. 이 로컬 환경은 LAN으로 정의되며 여러 장치를 연결하여 해당 위치의 다른 사람들과 정보를 작성, 저장 및 공유할 수 있습니다.
- LAN은 internet보다는 host간에 작은 연결 이며 이러한 한 객체를 network라 부른다
- 각각의 네트워크들은 router를 이용하여 network to network로 상호작용 가능하며 internet이 된다.
4.Web SERVER vs WAS
web server?
- web server는 클라이언트로부터 http 요청을 받아 html 문서나 각종 리소스를 응답하는 컴퓨터
- web server가 응답 해줄수있는 리소스는 HTML, CSS, 이미지와 같은 정적인 데이터만 응답할 수 있다.
WAS(web application server)?
- Web Application Server에서 Web Application이라는 것은 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말하고 Web Application Sever는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크이다.
클라이언트의 요청이 정적인 컨텐츠라면 Web server에서 처리하여 응답을 해주고 동적인 컨텐츠라면 Web container가 요청을 받아 응답을 한다.
그러면 여기서 드는 궁금점이 WAS가 정적인 컨텐츠와 동적인 컨텐츠 둘 다 처리가 가능하면 Web server를 따로 두지 않고 WAS만 두면 되지않을까? 이다.
대규모 프로젝트에서는 Web server와 WAS를 따로 두어 관리한다.
그 이유는 아래와 같다.
1. 기능을 분리하여 서버 부하 방지
(WAS의 종류 중 하나인 Tomcat 5.5. 버전 이상부터는 성능 상 차이가 있지 않는다고 함.)
2. 물리적으로 분리하여 보안 강화
이 부분은 아래의 그림을 보며 추가적인 설명이 필요하다.
동적인 콘텐츠 응답을 위해 DB 조회나 접근 등같이 보안 상 위험에 노출될 수 있다.
이러한 경우를 대비하여 WAS의 앞에 web server를 두어 공격에 대해 WAS까지 전파되지 못하게 한다.
3. 여러 대의 WAS를 연결이 가능하다.
web server에 여러 대의 WAS를 연결하여 load balancing이 가능해지고 fail over(하나의 WAS가 고장이 나면 다른 WAS로 대체 가능, fail back(고장 난 WAS가 다시 정상동작)이 가능하다는 것이다.
또한, 대용량 웹 애플리케이션의 경우 Web server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
4. 다른 종류의 WAS로 서비스가 가능해진다.
예를 들어, 하나의 서버에서 PHP Application과 Java Application을 함께 사용할 수 있다는 것이다.
Tomcat vs Apache?
Apache server
- 결국 아파치서버란 클라이언트에서 요청하는 HTTP요청을 처리하는 웹서버를 의미한다.
이는 정적타입(HTML, CSS, 이미지 등)의 데이터만을 처리하기 때문에 톰캣이란 것이 등장한 것 같다.
톰캣 WAS(web application server) (컨테이너, 웹 컨테이너, 서블릿 컨테이너로도 불림)
- 톰캣 또한 아파치 소프트웨어 재단에서 후원을 하고 있으며, 오픈소스로 개발이 되고 있다.
JAVA EE 기반으로 만들어졌으며, JSP와 Servlet을 구동하기 위한 서블릿 컨테이너 역할을 수행한다.
아파치서버와는 다르게 DB연결, 다른 응용프로그램과 상호 작용 등 동적인 기능들을
사용할 수 있다.
Proxy Server?
- 프록시는 클라이언트와 서버 사이에 위치하여 중계기로서 통신을 수행하는 것이다.
클라이언트가 직접적으로 end server(클라이언트 입장에서 중간에 있는 proxy를 서버라고 생각할 수 있기에 모든 리소스를 가지고 있는 원천 server를 end server라고 부르겠다.)와 연결하여 리소스를 얻는 것 대신에 프록시와 연결되어 통신이 수행된다.
1. Forward proxy
- 우리가 흔히 proxy라고 말할 때 보통은 Forward proxy를 의미한다.
클라이언트가 서버로 요청할 때 직접 요청하지 않고 먼저 프록시 서버를 통해 요청하는 방식이다.
① 클라이언트가 요청한 내용을 캐싱해준다.(추후 서버로 요청하지 않아도 해당 리소스를 얻을 수 있음)
② 클라이언트가 누구인지 end server에게 감추는 익명성을 보장할 수 있다.
2. Reverse proxy
- Reverse Proxy는 클라이언트가 서버를 호출할 때 리버스 프록시를 호출하게 되고 프록시 서버가 서버를 요청하여 받은 응답을 클라이언트에게 전달하는 방식이다.
① 클라이언트가 요청한 내용을 캐싱해준다.
② 서버정보를 클라이언트로부터 숨겨 보안성이 제공된다.
③ Load Balancing 기능을 제공해줄 수 있다.
'CS' 카테고리의 다른 글
Solid 원칙 (0) | 2022.01.31 |
---|---|
Mutex vs Semaphore vs Monitor (0) | 2021.12.27 |
동적 메모리 할당 분리가용 리스트 (0) | 2021.12.23 |
Buddy Memory Allocator란? (0) | 2021.12.21 |
Kaist PintOS Project 4 (0) | 2021.11.01 |