참고로 본 포스팅을 읽고 도커가 이해되기는 어렵다. 본 글을 통해서 도커에 파편적인 지식을 전달하는게 목적이다. 이러한 파편적인 지식은 모이구 모여 결국 언젠가는 명확한 하나의 그림으로 여러분의 머리에 남게 될 것이다.
그날을 기약하면서~
도커는 기본적으로 서버, 네트워크, 스토리지를 다루는 인프라 기술이다. 따라서 도커를 공부하기 위해서는 사전 지식으로 인프라에 대한 기술을 가지고 있어야 한다. 도커는 인프라 기술이지만 전통적인 인프라 엔지니어가 전문적으로 다루는 기술이 아니라 개발자 백라운드를 가지고 있는 인력이 다루는 기술이다. 따라서 도커는 아주 특이하게도 IT 분야의 하드웨어 기술(서버, 네트워크, 스토리지등)과 개발자로서의 기술을 모두 가지고 있어야 습득하였을때 활용도가 높은 기술이다.
도커를 학습하는 학습자는 도커를 학습하기에 앞서서, 도커를 왜 배우는지, 현재 내가 있는 포지션에서 도커를 왜 배워야하는지에 대해서 다시 한번 생각해볼 필요가 있겠다. 현실적으로 도커는 IT의 대부분 분야와 관련이 있는 기술이기 때문에 IT 회사에서 종사하는 사람이라면 도커의 기본 개념에 대해서는 이해하는 것이 좋을 것 같다.
프로그램이 동작한다는 의미는 무엇일까?
도커를 학습하기전에 프로그램이 동작한다는 것에 대해서 생각해보도록 하자. 컴퓨터를 사용하는 가장 궁극의 목적은 프로그램의 동작이다. 프로그램이 동작하여 사용자가 원하는 어떤 서비스를 제공가 때문이다. 그 서비스라는 것이 과거에는 무형의 데이터 형태의 정보 기반의 서비스라면, 오늘날은 컴퓨터가 다양한 하드웨어와 연결하여 무형 뿐만 아니라 다양한 형태의 유형의 서비스도 제공하고 있다.
어쨌거나 프로그램은 컴퓨터에서 동작하여 사용자가 원하는 어떤 유형 혹은 무형의 서비스를 제공하는 것이다.
그렇다면 컴퓨터에서 프로그램이 동작하기 위해서 어떤일이 일어나는 것일까? 이 말은 컴퓨터의 동작원리를 설명하라는 것과 같지 않나 생각된다. 컴퓨터의 동작이 결국 프로그램의 동작이니까?
컴퓨터는 기본적으로 컴퓨터의 저장장치에 저장되어 있는 데이터를 CPU로 읽어들여서 연산을 수행하고 그 결과를 모니터의 출력 뿐만아니라 다양한 형태로 표출하게 된다. 이러한 동작이 수행되기 위해서는 컴퓨터에 몇가지 전제 조건이 필요하다. 우선 컴퓨터는 동작하기 위해서 운영체제가 사전에 설치되어 있어야 한다. 운영체제는 기본적으로 컴퓨터가 처음에 시작되어, 컴퓨터의 하드웨어를 여러 프로그램이 동시에 사용할 수 있도록 조정하는 코디네이터 역할(커널이 수행)을 수행한다.
프로그램이라는 것은 무엇일까? 프로그램은 기본적으로 개발자가 컴퓨터가 수행하였으면 하는 작업을 컴퓨터에 시키는 세세한 작업목록이다. 그런데 컴퓨터는 사람의 말을 알아듣지 못하기 때문에, CPU가 이해할 수 있는 기계어로 명령어를 내려야 한다. 그런데 기계어는 사람이 사용하고 이해하기 어렵기 때문에, 프로그래밍 언어라는 것을 이용해서 컴퓨터가 수행할 작업들을 코드로 작성하여 프로그램을 작성한다. 그런데 개발자가 만든 이 프로그램 코드라는 것이 컴퓨터에서 동작하기 위해서는 어떤 프로그래밍 코드의 동작 환경이 필요하다. 이런 환경을 런타인Runtime이라고 한다. 즉 개발자가 만든 프로그램 코드를 동작시키기 위해서 런타임이라는 환경이 필요하고, 이 환경은 운영체제 위에서 동작한다.
자, 여기서 정리하면 이렇다.
프로그램이 동작하기 위해서는 크게 3가지가 필요하다. (하드웨어는 제외하고)
1. 운영체제
2. 런타임Runtime
3. 개발자가 만든 프로그램 코드
서버Server라는 것이 바로 위의 3가지를 하나의 컴퓨터에 몰아넣고, 사용자의 특정한 종류의 요청만 받아서 전담으로 처리하는 컴퓨터이다. 따라서 서버는 보통 최종적으로 한 가지 목적을 달성하기 위해서 사용한다.
서버는 말하는 사람의 의지에 따라, 혹은 문맥에 따라 하드웨어 서버, 즉 우리가 볼 수 있고, 만질 수 있는 컴퓨터의 서버를 말하는 경우도 있고, 때로는 이러한 물리적인 컴퓨터에서 동작하는 프로그램, 특히 특정한 하나의 사용자 요청을 처리하기 위해서 동작하는 프로그램을 말하기도 한다.
프로그램이 동작하기 위해서는 위의 3가지가 항상 필요한데, 문제는 한 개의 프로그램을 동작시킬때 마다 위의 3가지를 모두 준비하는 것이 대단히 많은 노력과 비용이 소요된다는 것이다. 그런데 도커는 이 3가지를 모두 하나의 패키지로 묶어서 프로그램의 배포와 동작을 매우 단순하게 만든 것이다.
여기까지 설명하였는데 도커가 이해되면 당신은 정말 천제가 아닐까 생각한다.
불행하게도 당신이 천제가 아니라면, 글이 이해가 안된다면 너무 자연스러운 것이고,
도커를 계속 공부하다 보면 자연스럽게 이해가 될 것이다.
'DevOps > DockerKubernetes' 카테고리의 다른 글
| 컨테이너와 Docker Host간의 파일 복사 (0) | 2022.08.11 |
|---|---|
| 가상화와 컨테이너의 차이는 무엇? (0) | 2022.08.11 |
| 도커 명령어 시작하기 (0) | 2022.08.11 |
| 리눅스에 도커 설치하기 (0) | 2022.08.11 |
| Docker(Desktop)의 설치 (0) | 2022.08.10 |