#docker #kubernetes #container #orchestrator #microservice #infrastructure-as-code #devops #ci #cd

제목[re]도커 컨테이너에 자바 프로그램을 돌린다면 이유가 무엇이 있을까요?2021-10-31 10:12
작성자 Level 10

“소프트웨어를 개발하고 동작하는 환경과 이를 대규모의 데이터센터에서 운영하는 환경을 구분하여 생각” 바랍니다.


수업의 Cloud Computing에서 언급 한 것 처럼, Datacenter는 “필요할 자원을 필요한 시점에 필요한 량 만큼 ‘운영’” 합니다.

이와 별개로 각각의 소프트웨어 들은 “본인이 동작하여야 하는 개발/동작 환경을 미리 설정”해야 합니다.


이런 측면에서, Java로 만든 프로그램은 JVM이 있어야 동작이 가능합니다. 

Java 프로그램은 JVM이 일종의 운영체제+하드웨어로 반드시 제공되어야 합니다.

따라서 Docker 상에서 Java 프로그램을 동작하려면 필연적으로 Docker에서 JVM을 동작시켜야지요.


성능을 언급한 부분도, 앞서의 “소프트웨어를 개발하고 동작하는 환경과 이를 운영하는 환경을 구분하여 생각”하는 맥락을 유지해야 합니다.


당연히 물리적인 서버 한대에서 바로 Windows를 설치하고, JVM을 돌리는 경우보다, 

Cloud Computing 환경에서, Linux Host OS 위에 VM을 동작하고, 다시 VM에서 Windows Guest OS를 동작하고 그 위에JVM을 돌리는 것은 느리지요.

그러나 이런 환경을 구축하는 것은 정적 시간에서는 성능상 손해이지만, 컴퓨터가 많은 환경에서 정해진 시간 만큼만 쓴다면 이득이라는 정책입니다.

그리고 당연히 시간이 지나면 microservice 구조화해서 잇점을 찾도록 SW 자체를 개선해야 겠지요.


따라서,, Java 언어로 만든 프로그램을 수행하려면 JVM을 설치해야 하니 당연하게 발생하는 이슈입니다. 감수해야지요 ^^

그러니,, 본인이 이야기 한 결론인 

“개인적인 생각으로는 이번에 배운 docker swarm과 같은 orchestration과 같은 기능을 java 환경에서도 쉽게 활용하기 위해서 VM on Docker의 오버헤드를 감수하고서라도 이렇게 사용하는 것이라고 생각”은 일단 맞다고 보면 됩니다.


그런데~!!! Docker를 Linux에서 동작하면, Docker와 Host OS 사이에 Docker를 위한 작은 Linux가 필요 없습니다.

(( windows, macos는 docker가 동작하기 위해서, windows/macos와 docker 사이에 작은 linux가 필요하다고 수업에서 언급했습니다 ))

(( 앗,, windows의 wsl2는 이제 그렇지 않졌다고 봐야하나.. 더 깊이 파봐야 겠군요. windows는 관심이 없어서 ^^ ))


따라서,, Linux OS 상에서 Docker를 올리고, 그 위에 Java JVM을 수행하면,,

실제 Linux OS 상에서 바로 Java JVM을 수행한 것보다 일부 오버헤드는 있지만, 부하가 크지는 않을 것 같네요.

Java를 사용하지 않는 입장에서,, 게시글을 읽고 궁금하여 찾아보니,, Java/JVM 및 linux OS를 최적화하는 이슈들이 많이 있는 것 같습니다.


질문자가 소프트웨어융합학과 학생이라면,, 캡스톤디자인이나 졸업연구에서 얼마나 성능이 저하되는지와,

성능을 최적화 하는 방법에 대해서 공부하고 실험해 보는 것도 경력에 도움이 될 것 같습니다.


참조하세요.

댓글