-
도커의 필요성을 느끼게 된 계기서비스 공부/Docker 2022. 8. 5. 15:30
** 주의: 서론이 깁니다. **
학교 프로젝트의 일환으로 판타스틱5 팀에서 활동하며 음성인식 키오스크: "말하는 사이에 주문 완료"를 개발하고 있었다.
프론트는 react.js, 백엔드는 node.js로 개발이 완료된 시점에서,
본격적으로 자연어처리를 위해 파이썬을 사용해야 할 시간이 온 것이다.
하지만, 그 초기 세팅과정이 만만치 않았다.
처음에는 프론트에서 js를 통해 파이썬 코드를 호출하여 자연어처리를 할 생각이었다.
하지만, 위 기능을 사용하기 위해선 node.js의 기능을 활용해야 했는데, gh-pages에 배포하는 순간, 그 기능을 활용하는건 불가능 했기에 다른 방법을 모색해 봐야 했다.
그래서 플라스크를 이용해 파이썬 코드를 굴릴 서버를 만들기로 했다.
이렇게 방향이 잡히자, 다들 분량을 나눠서 파이썬 코드를 작성할 생각에 설레었다.
하지만, 그 설렘은 곧 사라지고 말았다...
그 이유는 파이썬 가상환경 세팅을 통일하는게 어려웠기 때문이다.
아나콘다를 이용해서 환경을 배포해도, python -m venv 명령어를 이용해서 가상환경을 프로젝트 파일에 추가해도 문제가 발생했다.
아나콘다의 경우 내가 M1 맥을 사용하고 있는데, 윈도우 사용자에게 내가 만든 환경을 적용시키는게 불가능했다.
같은 M1 맥 사용자라도 pip 버전 차이 때문에 pip 명령어로 설치한 라이브러리 (konlpy, Mecab 등)는 공유가 불가능했다.
venv 가상환경을 프로젝트 폴더에 추가한 경우, git의 diff가 너무 커질 뿐더러, mecab-ko-dic의 사용자 정의 사전을 적용해도 그 사전을 다른 팀원들에게 공유하는게 불가능했다. (각자 설치해서 각자 사전을 적용해야 한다는 뜻...)
이러한 이유 때문에 도커의 필요성을 절실하게 느끼게 되었다.
왜 도커를 사용해야만 했는가?
그 이유를 설명하기 위해서는 도커 컨테이너와 파이썬 가상환경의 차이점을 이해해야만 한다.
파이썬 가상환경은 단지 파이썬 인터프리터를 캡슐화 하는것에 불과하다. (아나콘다, virtualenv)
즉, 파이썬 버전과 그와 관련된 라이브러리들의 버전의 종속성을 저장하는 것이다.
장점은 셋업과 사용이 편하다는 것이다. 가상환경을 만들고 한 번만 라이브러리를 설치하고나면 사용하는데 무리가 없고, 백업도 할 수 있다.
하지만, 단점은 위에서도 언급했 듯, 다른 사용자에게 배포시 매우 불안정 해진다는 것이다.
사용자의 OS, 패키지 관리자의 버전 등, 여러 요소가 가상환경 설치를 방해한다.
반면에 도커 컨테이너는 파이썬 인터프리터 뿐만 아니라 OS 전체를 캡슐화 한다.
즉, OS의 환경부터 파이썬 인터프리터 환경까지 모든 환경을 동일하게 통제할 수 있다.
물론 초기 세팅은 가상환경보다 어렵다. OS설치부터 패키지 관리자 설치까지, 처음부터 끝까지 해내야 한다.
하지만, 완성된 컨테이너를 배포하는 순간, 위의 모든 문제가 해결된다.
개발자부터 서버까지, 파이썬 코드를 동일한 환경에서 안정적으로 굴릴 수 있게된다!
예시를 파이썬으로 들었을 뿐, 서버를 개발할 때도 도커를 쓰면, 초기 세팅을 공유할 수 있기에 좋다.
다음 포스트는 파이썬 가상환경을 세팅하는 포스트를 작성 해야겠다.
(글 쓸 겸, 정리할 겸..!)
'서비스 공부 > Docker' 카테고리의 다른 글
도커로 파이썬 개발환경 구축 (feat. VSCode) (0) 2022.08.05