요약

명심하라! 운영체제, 하이퍼바이저, 컨테이너, 클라우드 모두 개발자가 작성한 프로그램을 실행시킨 "프로세스" 이다!

인간의 욕심은 끝이 없다. 인간은 대체 무엇을 원하는가? 각자 원하는 바가 다르다. 다만 그 원하는 것을 "돈" 이라는 추상 개념을 통해 교환 받을 수 있다. 따라서 인간은 자신의 욕망이 무한한 만큼 언제나 더 많은 돈을 원한다.

돈을 버는 방법은 여러가지가 있겠지만, 그 중 하나는 고객(Client) 에게 서비스를 제공하는 것이다. 소프트웨어 회사는 프로그램 서비스를 고객에게 제공하고 돈을 받는다.

프로그램 서비스로 돈을 벌려는 싸장님 입장에서, 고객에게 서비스를 제공하려면 2 종류의 인간을 고용해야한다.

첫째로 프로그램 그 자체를 개발하는 "개발자(Developer)"가 필요하고, 둘째로 개발자가 개발한 프로그램을 서버라고 불리우는 컴퓨터 위에서 실행시키고, 서버가 터지지 않도록 관리 및 운영하는 "운영자(Operator)" 가 필요하다.

고객에게 더 많은 돈을 받아내려면 어떻게 해야하는가? 더 좋은 서비스를 제공해야한다.

소프트웨어 서비스에서 더 좋은 서비스란 대체 무엇인가? 의견이 다를 수는 있겠지만,

  1. 더 많은 기능과(동시에 돌아가는 더 많은 프로세스)
  2. 더 빠르고 안정적인 성능(프로세스를 더 빨리 돌린다.) 으로 요약해 볼 수 있을 것이다.

개발자(Developer)는 새로운 기능을 개발해내고(Develop) 운영자(Operator)는 운영체제(Operating System) 로 프로세스들을 안정적으로 운영한다.(Operate)

인프라 이야기 1에서 말했듯, 개발자가 개발한 프로그램을 자유롭게 실행시키면, 프로세스 끼리 한정된 컴퓨터 자원을 두고 경쟁하기 시작하여(race condition), 누군가 굶는 프로세스가 생긴다. 굶어 죽게 되었다(Starvation)는 말의 뜻은, 그 프로세스가 더 이상 실행되고 있지 못한다는 말이다.

프로세스가 필요로 하는 자원은 크게 4가지이다.

  1. CPU, 2. 메모리, 3. 디스크, 4. 네트워크 I/O 실질적인 하드웨어 자원을 분배하기 위해 운영체제는 프로세스에게 Virtual Memory 등의 개념을 할당하게 된다.

운영체제도 결국 프로세스이다. 그렇다면 운영체제를 통해 하나의 물리 머신에서 여러개의 프로세스를 돌리듯이, 하나의 물리 머신에서 여러개의 운영체제를 돌릴수도 있지 않을까?