모던 웹개발에서 Docker가 왜 필요해졌을까?

<aside> 💡 from. ‘자바 개발자를 위한 데브옵스 툴’

"자신이 해결해야 할 문제가 과연 제대로 된 문제인지 처음부터 신중하게 고려하기 바란다. 가령 다음 지침은 성능 문제의 탈을 쓰고 있지만 사실상 구현 문제를 제기한다. ‘성능을 높이기 위해 애플리케이션을 마이크로서비스 단위로 쪼개고 컨테이너화시킬 것’. 제대로 된 문제는 다음과 비슷하다. ‘고객들의 목표 완수 시간을 단축하기 위해 애플리케이션 성능을 5% 향상시킬 것’. 후자는 결과 성공 여부를 측정할 수 있는 실질적 메트릭을 포함하고 있으며 실현 방법도 마이크로서비스 구현으로 한정짓지 않는다.”

</aside>

과거 애플리케이션 실행 방식

1960-70년대

한 컴퓨터가 한 애플리케이션 실행을 담당하는 것이 일반적이었다.

당시 컴퓨터는 매우 느리고, 한 가지 프로세스을 완료하는 데 많은 시간이 걸렸다.

현재와 같은 멀티태스킹 능력도 거의 없었기 때문에 하나의 프로세스가 끝나기 전까지 다른 작업을 시작할 수 없었다.

<aside> 💡 프로세스 Process


운영체제가 실행 중인 프로그램의 인스턴스

컴퓨터와 CPU 시간과 메모리 자원을 할당받아 실행되며, 최소 하나 이상의 실행 흐름(스레드)를 가진다.

운영 체제는 멀티태스킹을 통해 여러 프로세르를 동시에 관리하고 실행할 수 있다.

</aside>

<aside> 💡 커널 Kernel


프로세스의 생성부터 종료까지 전 생명주기에 걸쳐 관리하는 역할

프로세스들이 시스템 자원을 효율적으로 사용하도록 조정한다.

커널이 하는 일

프로세스 생성과 관리, 자원할당, 프로세스 간 통신, 보안과 격리, 스케줄링

</aside>

문제점

프로세스 속도 증가를 위해 최대한 자원을 쪼개서 사용

→ 여러 사용자가 동시에 컴퓨터 자원을 공유하려할 때, 서로 간섭이 일어나는 경우가 발생

→ 한 명의 사용자가 시스템을 중단시켜버리는 경우도 발생

하나의 프로그램이 자원을 모두 사용하거나, 프로그램 에러로 OS까지 영향을 줌

프로세스 작동에 비용이 많이 들어감.