메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

마이크로서비스에 쿼커스를 써야 하는 이유

한빛미디어

|

2021-04-26

|

by 알렉스 소토 부에노 , 제이슨 포터

3,959

 
쿠버네티스를 위한 네이티브 자바 솔루션
『쿼커스 쿡북』 중
 

쿠버네티스는 최근에 기업용 응용프로그램을 배포하는 사실상의 표준de-facto 플랫폼입니다. 컨테이너와 쿠버네티스로의 이동은 우리가 자바 기반의 응용프로그램을 코딩하고 배포하고 유지하는 방식의 변화를 이끌었습니다. 만약 적절한 도구가 없다면 자바 응용프로그램을 컨테이너화하고 실행하는 데 애를 먹을 수 있습니다. 포드Pods에 있는 컨테이너(쿠버네티스 용어)는 쿠버네티스의 기본 단위입니다. 자바 기반의 응용프로그램을 올바르게 컨테이너화하는 방법을 잘 이해하는 것은 각종 함정과 시간낭비와 혼란을 피하는 데 매우 중요합니다.
쿼커스는 쿠버네티스와 긴밀하게 통합built-in integrated되어 있는 클라우드 네이티브cloud-native 프레임워크입니다. 쿼커스는 오픈소스 스택으로 아파치 라이선스 2.0으로 배포되며, 그랄VMGraalVM과 OpenJDK 핫스팟에 최적화된 쿠버네티스 네이티브 응용프로그램 생성을 돕습니다. 하이버네이트Hibernate, 이클립스 마이크로프로파일MicroProfile, 쿠버네티스, 아파치 캐멜Apache Camel과 이클립스 Vert.x와 같은 널리 알려진 라이브러리와 기술에 기반하고 있습니다.
쿼커스의 장점은 도커와 쿠버네티스와의 쉬운 통합, 빠른 시작시간, 낮은 상주 세트 크기(RSS) 메모리와 개발자 생산성의 향상입니다.
· · ·
1.1 개발자 친화적
쿼커스는 자바 개발자의 생산성을 향상시키며 마이크로서비스와 클라우드 기반 응용프로그램의 세계에서 빠르게 발맞추어갈 수 있도록 돕습니다.
쿼커스는 높은 확장성을 보장하고 쿠버네티스의 클러스터를 더 적은 자원으로 운용할 수 있습니다.1 또 오픈소스 자바를 수십 년 이끌어온 커뮤니티의 산출물을 잘 활용할 수 있도록 해줍니다.
쿼커스로 개발하기 위해 새로운 기술을 배울 필요가 없습니다. 이미 의존성 주입, JAX-RS, 하이버네이트와 이클립스 마이크로프로파일 개념에 익숙하다면 더 이상 새로울 것이 없습니다. 여러분이 경력을 쌓으며 알게 된 모든 지식을 쿼커스에 모두 대입할 수 있습니다. 쿼커스로 시작하면 다른 프레임워크의 경우 몇 주나 걸릴 일을 수일 안에 심지어는 몇 시간이면 시작할 수 있습니다.
쿼커스는 다음 세대의 응용프로그램 개발과 배포의 최적화된 선택으로 설계되어 있습니다. 응용프로그램 뼈대 잡기Scaffolding와 개발 모드의 라이브 리로드live reload(저장하면 바로 갱신)부터 배포에 이르기까지 클라우드 기반의 쿠버네티스 클러스터를 배포할 수 있도록 전체 응용프로그램 개발 생명주기를 지원합니다. 개발자로서 쿼커스는 여러분을 더욱 생산성 있고 문제 해결에 집중하도록 만들어 줄 것입니다. ‘야크털 깍기’2는 최소화합니다.

1 옮긴이_ 각 쿠버네티스의 클러스터에 적은 자원을 소모하여 동일 머신에서 더 많은 인스턴스가 동작할 수 있도록 해준다는 의미입니다.
2 옮긴이_ 세스 고딘의 저서 『이제는 작은 것이 큰 것이다』(재인, 2009)에 나온 말로 어떤 목적을 달성하기 위해 전혀 상관없는 연속된 작업을 의미합니다.
1.2 쿠버네티스와 통합
쿼커스는 쿠버네티스에서 동작합니다. 멋진 얘기로 들리지만 쿠버네티스에서 동작하려면 많은 것을 알아야 합니다. 여러분의 응용프로그램을 도커 컨테이너에 올리고, 쿠버네티스에서 실행해야 합니다. 이것이 맞다면 전통적으로 쿠버네티스에서 효율적으로 동작시키기 위해서는 적절하게 응용프로그램을 튜닝하고 사이즈size를 잡고, 설정할 수 있어야 합니다. 또한 텍스트 편집기를 열어 다수의 YAML 파일을 손수 고쳐야 합니다. 그러나 그 누구도 이러한 작업을 솔직히 좋아하지 않을 것입니다.
쿼커스는 여러분의 응용프로그램을 쿠버네티스에 배포할 때 필요한 허드렛일을 많이 제거했습니다. 쿼커스 응용프로그램을 시작bootstrap하면 도커 컨테이너를 생성하는 데 필요한 몇몇 파일이 함께 들어옵니다. 아주 훌륭한 첫걸음입니다. 이 파일은 그랄VM의 네이티브 실행으로 동작하거나 OpenJDK JVM으로 동작하는 데 최적화되어 있습니다. 응용프로그램을 실행하는 데 충분한 내용이 들어 있기 때문에 컨테이너 이미지를 소모하는 중복이나 불필요한 팽창을 제거합니다.
다음으로 쿠버네티스 확장을 사용하면 쿼커스는 바닐라 쿠버네티스3 혹은 오픈시프트OpenShift 배포를 위한 자원(YAML 파일)을 생성해줍니다. 더 이상 YAML 파일을 헤맬 필요가 없고 들여쓰기가 잘 되어 있다고 확신할 수 있습니다. 결국 형식이 맞지 않는 YAML 한 줄을 찾기보다 코드 작성에 더 집중할 수 있습니다. 또한 쿼커스는 이미지를 쿠버네티스 클러스터에 배포하기 전에 레지스트리registry에 넣을 수 있습니다. 모든 응용프로그램 이미지는 쿼커스 응용 프로그램 설정을 통해 훨씬 향상되고 커스텀화될 수 있습니다. 예를 들어 쿼커스 1.4 이후에는 ConfigMap과 Secret를 API 서버에서 읽을 수 있습니다. 포드에 있는 파일에 마운트할 필요가 없습니다.
1.3 메모리와 첫 응답시간
쿼커스는 ‘초음속 아원자(원자보다 작은 입자)’ 자바 프레임워크로 알려져 있습니다. 이 용어를 개발자를 홀리는 마케팅 용어라고 생각할 수도 있지만, 여러분이 쿼커스의 동작을 세세하게 이해한다면 정말로 작고 빠르고 생산성 있게 실행할 수 있음을 알게 될 것입니다. 쿼커스는 쿠버네티스에서 동작하는 최적화된 네이티브 응용프로그램을 배포할 수 있습니다. 예를 들어 일반적으로 쿠버네티스에서 동작하도록 최적화된 네이티브 응용프로그램을 배포한다면 컨테이너 이미지가 200MB 정도 될 것입니다.3 쿼커스로는 이 응용프로그램이 시작되면 수초 내에 요청을 처리할 수 있으며 메모리도 50MB보다 작을 것입니다.
그림_ RSS 메모리(https://bit.ly/3njmMDa)

3 옮긴이_ 수정하지 않은 상태의 쿠버네티스를 의미합니다.
여러분이 쿠버네티스 클러스터에 배포할 때 가능한 많은 인스턴스를 넣을 수 있으면, 예상할 수 없는 부하를 확장성 있게 대처하고 가용 자원을 최대한 활용할 수 있습니다. 크기가 확장되면 여러분은 새로운 응용프로그램의 인스턴스가 빠르게 실행 상태로 준비되길 원할 것입니다. 이것이 네이티브 실행의 빛나는 측면입니다. 쿼커스는 네이티브 실행 빌드 절차 동안 여러분의 응용프로그램과 응용프로그램이 사용하는 프레임워크를 가능한 프리 부트pre-boot 상태로 만듭니다. 이렇게 되면 응용프로그램은 빠르게 시작되고 더 이상 클래스 로딩, 실행시간 탐색 혹은 그 외 JVM이 통상적으로 행하는 다른 워밍업 동작 없이도 서비스 요청을 받을 수 있습니다.
일반적으로 가용 메모리는 한정된 자원입니다. 응용프로그램이 사용하는 메모리가 얼마인지 정확하게 이해하고 사용량을 낮추면서 JVM의 가용 메모리를 운용하는 것이 배포 밀도의 핵심입니다. 쿼커스는 네이티브 실행으로 메모리 사용량은 낮고 효율성은 증가하도록 도와줍니다.
· · ·
댓글 입력
자료실