컴파일러 라고 하면 흔히 C/C++ 언어를 저수준의 기계어로 번역해주는 소프트웨어라고 생각한다.
맞는 설명이긴 하지만 엄밀하게 말하면
이 두개의 미묘한 차이를 정말 정확하게 이해해야 한다.
그리고 C/C++ 컴파일러는 대표적으로 3개가 있는데
가 있다.
원래 gcc는 gnu c 컴파일러(GNU C Compiler)라는 이름이었다.
하지만 릴리즈 이후 계속되는 업데이트로 C++, JAVA, 포트란, 에이다 등 여러 언어를 컴파일 할 수 있게 되면서 GNU Compiler Collection 으로 바뀌게 되었다.
gcc 를 사용하고 난 이후에는 보통 Make를 이용해 빌드하는것이 일반적이라고 한다.
처음 들어보는 소프트웨어인데 일단 위키 설명을 읽어보자.
make는 소프트웨어 개발을 위해 유닉스 계열 운영 체제에서 주로 사용되는 프로그램 빌드 도구이다.
여러 파일들끼리의 의존성과 각 파일에 필요한 명령을 정의함으로써 프로그램을 컴파일할 수 있으며 최종 프로그램을 만들 수 있는 과정을 서술할 수 있는 표준적인 문법을 가지고 있다.
위의 구조로 기술된 파일(주로 Makefile이라는 파일명)을 make가 해석하여 프로그램 빌드를 수행하게 된다.
우선 여기까지만 읽어봤을때는 빌드라는게 뭔지 모른다. 그래서 빌드/컴파일의 차이점을 알아보자.
컴파일 : 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정(목적파일 생성)
(바이너리코드 = 이진코드 : 텍스트, 컴퓨터 프로세서 명령 같은 데이터를 대표하며 0과 1로 이루어짐)
(그냥 아스키코드 생각하자.)
빌드 : 소스코드 파일을 실행 가능한 소프트웨어 산출물로 만드는 일련의 과정
빌드 단계 중에 컴파일이 포함되어 있으며 컴파일은 빌드의 부분집합이다.
즉 이걸 해석하게 되면
Make 라는 소프트웨어로 소스코드의 빌드를 수행한다.
빌드를 수행하는 과정 중 컴파일을 할때 gcc를 사용하여 컴파일을 한다.
컴파일 한 내용물로 빌드를 진행한다.
라고 생각하면 되겠다.
컴퓨터에 가상의 os를 여러개 돌린다는 소리다.
위의 그림에서 볼 수 있듯이, 하이퍼바이저(호스트에서 여러개의 운영체제를 동시에 돌리기 위한 논리적인 플랫폼)에 여러개의 os를 실행시키고, 그 os를 통해서 app들을 실행시킨다는 것이다.
어렵게 생각하지 말자. 우리가 가상화에 대해서 전문적으로 배울거면 구체적인 작업을 검색할 것이다.
그러니까 가상화란 무엇인가만 알고 넘어가는게 맞다는 결론을 내렸다.
그리고 컨테이너도 포함된 사진을 왜 썼는가를 말할려면 가상화를 적게된 배경을 좀 더 기술해야 된다.
위의 사진에서 보면 guest os 가 무슨 웹페이지 하나 더 띄우는것처럼 매우 가벼운 프로그램이라고 생각이 든다.
하지만 utm이라는 가상머신(os를 실행하는 플랫폼 정도로 생각하자.)을 실행 후 ubuntu를 설치 했었다.
결과는... 너무 끔찍했다.
무려 파이어폭스 하나 키는데 90초라는
지난 20년 동안 컴퓨터 만지면서 처음 보는 속도로 웹 브라우저가 켜지는 것이었다.
이전에 가장 느렸던 컴퓨터는 그래도 웹 브라우저를 20초 안쪽으로는 켰었다.(무려 10년도 더 전에)
물론 이거는 amd64 환경에서 x86-64 환경을 실행시킬려고 해서 그런것이긴 하다.
비유를 하자면 앞에서 원어민이 영어로 쏼라쏼라 하고 있는데 중학생이 사전 찾아가면서 번역해준다는 소리다.
그러니까 효율도 박살나고 속도도 느리고 app하나 쓸려고 너무 많은걸 소비해야 된다는 소리다.
하지만, docker를 이용한 컨테이너 엔진은 달랐다.
도커는 컨테이너라는 것을 사용해서 무려 'os와 가상머신 없이 app을 돌릴수있는' 엄청난 놈이었다.
그
도커 컨테이너에 대해 좀 더 자세하게 알아보자.
도커는 기본적으로 리눅스용이다. ( window는 추가적인 작업이 필요하다.)
도커 컨테이너 안에는 리눅스 운영체제 비슷한 것이 있다.(극히 일부만 넣어놨기 때문에 매우 가볍다.)
도커 컨테이너는 이러한 가벼운 장점과 더불어 프로세스로써 동작하며 호스트 os의 커널과 공유한다.
도커 컨테이너는 쉽게 찍어낼수도 있고 쉽게 지울수도 있다.
이러한 장점으로 도커를 사용하면 '여러 컴퓨터의 환경을 똑같이 동일시키는데 매우 큰 효과를 낸다.
무려 도커 컨테이너는 공유도 쉬울 뿐더러 같은 컨테이너를 사용하면 완벽하게 똑같은 환경으로 바뀐다!
그래서 이러한 도커를 활용해서
ubuntu18.04를 팀원들과 동일한 환경에서 구동하는게 가능해졌다.
결론을 적자면
라는 두가지 이유 덕분에 장난없는 속도를 가지고 관리도 엄청나게 편하다.
왜 기술스택으로 인정받는지 이유를 알 것 같다.