-> 분할형에서 서버분할방식으로 각각의 서버가 전혀 다른 작업을 하는지, 아니면 비슷한 작업을 하는지에 대한 관점에서 전자인 "수직분할형아키텍처"의 한 종류이다
-> 주요 구성요소: 웹 서버, AP 서버, DB 서버
-> 프로세스와 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행돼서 어느 정도 독립성을 가지고 동작하는 것
-> 프로세스와 스레드가 활동하려면 메모리 공간이 필요하는데 이를 커널에 의해 메모리상에 확보된다
-> 예를 들어서 PC에서 어떤 프로그램을 다운로드받으려할때 서버내부에서는 시작 의뢰가 있으면 커널이 요청 분량만큼만 메모리공간을 할당하여 프로세스를 OS상에 작성하게되고 다운로드 프로그램은 서버내부의 디스크상에 설치
-> 프로세스는 전용 메모리 공간을 이용해서 동작, 스레드는 다른 스레드와 메모리 공간을 공유하고있는 운명 공동체
-> 예를 들면 프로세스는 자식들 방처럼 각자만의 방이 존재한다면 스레드는 부모님이 한 방을 공유하고있다 생각하면 편하다(이 예시처럼 프로세스와 스레드는 구조는 다르지만 존재 목적은 같다)
-> 프로세스와 스레드 중에 어떤것을 이용할지는 애플리케이션 개발자가 결정
-> 프로세스는 독자 메모리공간을 가지기때문에 생성 시 CPU 부하가 스레드와 비교해 높다, 때문에 멀티 프로세스 애플리케이션에서는 프로세스 생성 부담을 낮추기위해 미리 프로세스를 시작시켜둔다
프로세스 장점: 개별 처리 독립성이 높다
단점: 생성시 CPU 부하가 높다
스레드 장점: 생성 시 부하가 낮다
단점: 메모리 공간을 공유하기 때문에 의도하지 않는 데이터 읽기/쓰기가 발생할 수 있다
-> 하지만 프로세스가 메모리공간을 공유할 수 없는것은 아님, 예를 들어 오라클 DB에선 프로세스가 공유메모리공간을 상호이용가능
-> OS에서 커널은 매우 중요한 커널 자체가 OS의 인프라같은 존재
-> 커널은 다양한 역할을 가지지만 가장 중요한것은 뒤에서 무슨일이 벌어지는지 은폐하면서도 편리한 인터페이스를 제공하는것
-> 프로세스/스레드에서 커널로 연결되는 인터페이스
-> 애플리케이션이 OS를 통해서 어떤 처리를 하고싶으면 시스템콜이라고 하는 명령을 통해 커널에 명령을 내림
-> OS상에서 여러개의 프로세스를 가동할 수 있다, 이에 비해 물리서버의 CPU 코어 수는 많아야 수십개 정도 밖에 안된다
-> 언제 어떤 프로세스가 어느 정도의 CPU 코어를 이용할 수 있는지 처리 우선순위를 어떻게 결정할 것인지 등을 관리하는 것이 이의 역할