이전에 tesseract
를 사용해서 OCR로 텍스트를 추출 해야 하는 작업 도중, 윈도우 로컬 환경에서는 잘 돌아가던 로직이 centOS에서는 전혀 동작하지 않는 상황이 발생한 적이 있었다.
운영과 로컬 OS 실행환경이 달라서 생긴 문제였는데, 이게 웹 어플리케이션 내부 로직 문제면 그 로직만 보면 되지만 환경 불일치로 인한 문제가 발생하면 버그나 이슈가 발생한 포인트가 어디인지 감을 잡기 힘들다.
해당 이슈의 경우에도 tesseract
OCR 오픈소스 라이브러리를 자바에서 사용할 수 있게 한 JNA wrapper tess4j
에서, 내부적으로 윈도우용 .dll 파일만 보유 하고 있어, 리눅스 OS에서 바라 봐야 할 다이나믹 링킹 라이브러리를 찾지 못 해 발생한 이슈였는데, OS 레벨까지 내려가서 문제를 찾아야 했을 때는 정말 심해에 빠진 듯한 막막함을 느꼈던 기억이 난다.
그렇다면 누군가는 이런 이슈에 대한 해답을 내놓지 않았을까? 내가 겪은 문제는 이전에 다른 누군가가 겪었을 확률이 높고, 그 해답 또한 이미 존재할 확률이 높으니까. 이런 의존성 문제와, 런타임 환경 불일치에 의해 발생하는 이슈를 누군가가 어떠한 형태의 솔루션으로 제공하지 않았을까?
뭔가 직관적으로 추상화 레벨을 끼워 넣으면 될 것 같은 생각이 든다. 대부분의 개별적인 문제들은 그 문제들을 추상화 하여, 위에 추상화 레벨 위에서 문제를 해결하는 방법으로 해결 되는 경우가 많은 것 같다.
그리고 역시 컨테이너 기술이 그 해답이었다. 바다 위에 떠 있는 고래(도커)가 저 심해 같은 의존성 및 런타임 환경 문제를 해결해 주는 수호신 같은 느낌이랄까..
컨테이너 기술의 정의는 아래와 같다.
a technology that enables the packaging and running of an application and its dependencies in a standalone, isolated environment known as a container.
즉, 어플리케이션이 환경에 독립적으로 배포 되고 실행할 수 있게 도와주는 기술이다.
컨테이너 엔진:
컨테이너 이미지:
file
2차 저장소
에 저장컨테이너 :
도커는 위의 컨테이너 기술을 구현한 오픈소스 프로젝트로 리눅스 서버 위에서 돌아가는 어플리케이션들의 독립적인 standalone
실행환경을 제공 해준다.
가상화와 비교해보자.
가상화(하이퍼바이저) :
- 하이퍼바이저
- 게스트 OS
- 바이너리/라이브러리/어플리케이션
도커 :
- OS
- Container Engine
- Container(바이너리/라이브러리/어플리케이션)
차이점 :
가상화의 경우, 어플리케이션 레이어에서 infra layer로 가기 위해 각 어플리케이션 마다 OS가 필요하다. 반면, 컨테이너는 모든 어플리케이션 마다 하나의 OS(kernel)을 통해 인프라에 접근하게 된다.
위의 예시를 보자.
가상화 용량 =
OS
3개 +하이퍼바이저
1개
컨테이너 용량 =OS
1개 +컨테이너 엔진
이렇게 구성이 되는데, OS는 상당히 무거운 소프트웨어 이고, 우분투 기준 약 1.8gb의 용량을 차지하게 된다. 위의 예시에서는 3개의 어플리케이션을 돌리기 위해 총 5.4gb의 OS를 위한 용량이 필요하게 된다.
반면 도커 바이너리는 40mb~200mb 공간을 차지하며, OS 또한 커널을 공유하기 때문에 속도가 빠르다. 반면, 하이퍼바이저는 하나의 추상화 레이어 위에서 OS가 동작하기 때문에 속도 또한 느려지게 된다.
어플리케이션이 n개 이상으로 확장될 경우까지 생각해보면, 도커 쪽이 압도적으로 확장성(scalable)한 걸 직관적으로 알 수 있다. 가상화 쪽은 어플리케이션과 OS가 하나의 세트로 설치 돼야 하고, 도커 컨테이너는 정말 standalone 컨테이너
하나만 띡 올리면 되기 때문👍
[1] https://www.youtube.com/watch?v=m454YTyPWSk&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=9
[2] https://www.youtube.com/watch?v=pR-cGS6IGvI
[3] https://www.youtube.com/watch?v=eKj13PsoMNE
[4] https://suyeon96.tistory.com/52