명심하라! 운영체제, 하이퍼바이저, 컨테이너, 클라우드 모두 개발자가 작성한 프로그램을 실행시킨 "프로세스" 이다!
인간의 욕심은 끝이 없다. 인간은 대체 무엇을 원하는가? 각자 원하는 바가 다르다. 다만 그 원하는 것을 "돈" 이라는 추상 개념을 통해 교환 받을 수 있다. 따라서 인간은 자신의 욕망이 무한한 만큼 언제나 더 많은 돈을 원한다.
돈을 버는 방법은 여러가지가 있겠지만, 그 중 하나는 고객(Client) 에게 서비스를 제공하는 것이다. 소프트웨어 회사는 프로그램 서비스를 고객에게 제공하고 돈을 받는다.
프로그램 서비스로 돈을 벌려는 싸장님 입장에서, 고객에게 서비스를 제공하려면 2 종류의 인간을 고용해야한다.
첫째로 프로그램 그 자체를 개발하는 "개발자(Developer)"가 필요하고, 둘째로 개발자가 개발한 프로그램을 서버라고 불리우는 컴퓨터 위에서 실행시키고, 서버가 터지지 않도록 관리 및 운영하는 "운영자(Operator)" 가 필요하다.
고객에게 더 많은 돈을 받아내려면 어떻게 해야하는가? 더 좋은 서비스를 제공해야한다.
소프트웨어 서비스에서 더 좋은 서비스란 대체 무엇인가? 의견이 다를 수는 있겠지만,
개발자(Developer)는 새로운 기능을 개발해내고(Develop) 운영자(Operator)는 운영체제(Operating System) 로 프로세스들을 안정적으로 운영한다.(Operate)
인프라 이야기 1에서 말했듯, 개발자가 개발한 프로그램을 자유롭게 실행시키면, 프로세스 끼리 한정된 컴퓨터 자원을 두고 경쟁하기 시작하여(race condition), 누군가 굶는 프로세스가 생긴다. 굶어 죽게 되었다(Starvation)는 말의 뜻은, 그 프로세스가 더 이상 실행되고 있지 못한다는 말이다.
프로세스가 필요로 하는 자원은 크게 4가지이다.
운영체제도 결국 프로세스이다. 그렇다면 운영체제를 통해 하나의 물리 머신에서 여러개의 프로세스를 돌리듯이, 하나의 물리 머신에서 여러개의 운영체제를 돌릴수도 있지 않을까?