회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
> 이 글은 'Is Node.js a Good Choice to Create an App Based on Microservices?'을 각색하여 작성되었습니다.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
마이크로서비스(microservice)를 도입하는 것이 프로젝트에 어떻게 도움이 될 수 있을까요? 앱 개발에서 마이크로서비스를 이용하면 얻을 수 있는 장점들은 많이 있습니다. 하지만 마이크로서비스와 노드(Node.js)를 연결하면 프로젝트의 워크플로우가 어떻게 향상되며, 프로젝트에서 얻을 수 있는 비즈니스적인 가치는 무엇일까요? 이번 글에서 하나씩 설명을 하겠습니다. 제목의 질문에 대해서 대답을 하기 전에, 잠시 한 걸음 뒤로 물러 서서 먼저 기본적인 두 가지의 질문을 던져 보겠습니다. 마이크로서비스란 무엇일까요? 그리고 노드는 무엇일까요?
마이크로서비스 아키텍처(microservice architecture)라고 부르기도 하는 마이크로서비스는
커다란 어플리케이션을 작고 간단한 어플리케이션(또는 서비스)로 나누어서 유지관리와 테스트를 보다 쉽게 하고, 느슨하게 결합하고, 개별적으로 배포할 수 있고, 비즈니스의 기능을 중심으로 체계화 하는 소프트웨어 디자인 패턴(design pattern)입니다. 그리고 소프트웨어 개발에 있어서 전체적인 비즈니스를 지향하는 접근법이기도 합니다.
그렇다면 노드는 무엇일까요? 노드는 “확장 가능한 네트워크 어플리케이션을 구축하기 위해 설계된 비동기 이벤트 기반의 자바스크립트(JavaScript) 런타임”입니다. 이 모든 것이 실제로 무엇을 의미하는 것일까요? 그리고 두 가지의 개념은 서로 어떻게 결합되는 것일까요? 이제부터 알아보겠습니다!
다시 말해서, 노드(Node.js) 개발과 마이크로서비스 사이의 관계는 마치 땅콩 버터와 젤리 사이의 관계와 같은 것입니다. 즉, 서로를 위해서 만들어진 것이라고 할 수 있습니다.
- 더 나은 구조. 구조가 잘 짜인 앱은 이해하기 쉬우며, 따라서 새로운 기능을 좀 더 쉽게 디자인하고 구현할 수 있습니다. 좀 더 실용적인 측면에서 볼 때, 비즈니스 분석과 개발자 채용에 걸리는 시간은 적게 걸리고(따라서 비용도 줄어들고), 개발 자체에 더 많은 시간을 투입할 수 있습니다.
- 매우 복잡한 제품도 막힘없이 개발. 복잡한 어플리케이션은 개념을 그리고, 구축하고, 이후에 관리하는 작업도 엄청나게 어렵습니다. 그렇기 때문에 이런 어플리케이션을 작은 단위로, 즉 마이크로서비스로 나누면, 이런 작업들이 훨씬 더 수월해집니다.
- 확장성. 예전의 패러다임에 의해 만들어진 모놀리식(monolithic) 앱은 기본적으로 빽빽하게 결합된 코드로 이루어진 거대한 하나의 덩어리라고 할 수 있습니다. (모놀리식 앱에 대해서는 뒤에서 추가 설명) 이렇게 만들면 내부의 작동 원리가 어떻게 되어 있는지를 파악하려면 엄청난 시간을 허비해야 하기 때문에, 모놀리식 앱을 확장한다는 것은 끔찍한 악몽이 될 수 있습니다. 마이크로서비스를 이용하면, 이런 작업이 훨씬 더 간단해집니다. 즉, 어떤 마이크로서비스가 보틀넥(bottleneck)인지가 금방 드러나기 때문에, 수많은 작업들을 훨씬 간단하게 처리할 수 있습니다.
- 적은 오류. 이런 식으로 생각해 보겠습니다. 맞춤법 오류를 찾을 때, 한 문장씩 찾는게 쉬울까요, 아니면 책 한권을 통째로 찾는게 쉬울까요? 여기에서 마이크로서비스는 문장이라고 할 수 있습니다. 즉, 전체를 알맞은 크기로 나누어서, 오류를 쉽게 발견하고 제거할 수 있습니다. 모놀리식 앱에서는 버그를 찾는 일은 마치 소설 <모비딕>을 읽는 것과 같습니다. 물론, 훌륭한 소설이기는 하지만, 다 읽으려면 시간이 아주 오래 걸립니다.
- 성능 향상. 모든 마이크로서비스는 한 개의 작업만 수행하기 때문에, 효율성 향상을 위해서 쉽게 조정과 최적화를 할 수 있습니다. 또 다른 비유를 들자면, 마이크로서비스는 주방용 칼이고, 모놀리식 앱은 스위스 군용 나이프라고 할 수 있습니다. 둘 다 샐러드를 만들 수는 있지만, 주방용 칼이 본래의 목적에 훨씬 더 적합합니다.
- 의존성 방지. 커다란 어플리케이션 내에 있는 수많은 마이크로서비스들은 상황에 따라서 다양한 프로그래밍 언어를 사용해서 만들 수 있습니다. 즉, 일부에서 외부의 컴포넌트를 사용하고 있다고 하더라도, 마이크로서비스를 적절하게 교체하면 얼마든지 최신의 어플리케이션으로 거듭날 수도 있습니다.
이런 어플리케이션을 기업의 조직구조와 비교해서 생각할 수도 있습니다. 대기업들은 혼란을 방지하기 위해서, 조직의 구조를 전문 부서로 나누고, 각 부서에게 명확한 책임을 부여합니다. 각 부서들도 역시 자신들의 권한을 벗어나는 이슈에 대해서는 누구와 연락해야 하는지를 알고 있습니다. 이것이 바로 마이크로서비스가 작동하는 방식입니다. 마이크로서비스는 앱이라는 기업 구조에서 세부적으로 전문화된 작은 부서라고 할 수 있습니다.
모놀리식 구조에서는 기업의 업무가 명확하게 구분되지 않기 때문에, 출입카드를 발급하는 단순한 업무조차도 10개의 다른 부서에서 관여하고 있을 수도 있습니다. 이러한 패러다임에서는 어플리케이션에 로그인(출입카드)을 할 때 발생하는 작은 문제를 수정할 때 조차도, 개발자가 로그인과 관련한 간단한 프로세스가 아닌 어플리케이션의 전체를 다 이해해야 합니다.
- 성능 및 신뢰성. 앱이 산뜻하고 안정적입니다. 게다가, 예산만 허용된다면 앱을 무한대로 확장할 수 있습니다. 이를 가능하게 해주는 노드의 한 가지 특징은 바로 단일 스레드(single-thread)의 비동기 아키텍처라는 것입니다. (비동기 아키텍처에 대한 자세한 설명은 여기에 있습니다.)
- 비용 관리. 모놀리식 앱을 확장하는 유일한 방법은 인스턴스(instance)를 추가로 생성하는 것입니다. 예를 들어서, 1개의 인스턴스가 최대 10만 명의 고객에게 서비스를 할 수 있고, 그 비용은 하루에 500달러라고 가정해 보겠습니다. 그런데 12만 명에게 서비스를 해야 한다면, 2개의 인스턴스를 생성해야 하고, 비용은 2배가 됩니다. 노드의 주요 관심사인 마이크로서비스를 이용하면, 추가된 트래픽에 따라서 실제로 필요한 만큼만 복제를 해서 사용할 수 있기 때문에, 비용을 절약할 수 있습니다.
- 손 쉬운 유지관리 및 업데이트. 예전의 모놀리식 방식에서는 코드가 뒤엉켜 있지 않기 때문에, 새로운 기능을 추가하는 것은 마치 고고학에서 유적지를 발굴하는 것과 같았습니다. 하지만 마이크로서비스에서는 그렇지 않습니다. 이건 업데이트에서도 마찬가지입니다. 막대한 비용을 투자해서 새로 만드는 대신에, 조금씩 시스템을 개선할 수 있습니다. 노드에서는 어플리케이션을 서비스에 기반한 모듈형 구조로 만들기 때문에, 이러한 접근 방식을 더욱 용이하게 해줍니다.
- 개발 워크플로우의 간소화. 이것도 복잡하게 들리시나요? 복잡한 모놀리식 방법을 이용하면 개발자들이 서로의 길을 방해할 수 있지만, 워크플로우가 간소화된다는 것은 개발자들이 각자 담당하는 부분에만 집중하면 된다는 것을 의미합니다. 이것이 노드가 가진 확실한 강점입니다. “커다란” 앱은 다수의 “작은” 앱들로 구성되어 있기 때문에, 개발자들이 서로의 길을 막는 일 없이 작업을 서로 쉽게 나누어 맡을 수 있습니다.
이번 짧은 글에서 우리는 마이크로서비스의 철학에 대해서 설명을 했으며, 마이크로서비스 아키텍처를 구현할 때 노드가 좋은 기술인 이유에 대해서도 살펴봤습니다. 마이크로서비스는 비용 관리가 좋고, 개발 및 업데이트를 쉽게 해주고, 확장을 용이하게 해주는 등 다양한 장점을 제공해줍니다. 노드와 마이크로서비스는 트래픽이 많고 복잡한 어플리케이션에서도 아주 잘 작동하는데, 이는 모놀리식 방식으로 만든 앱에서는 따라하기 힘든 강점이라고 할 수 있습니다.
여러분의 비즈니스 아이디어가 마이크로서비스에 적합하다고 생각하시나요? 아니면 기존의 어플리케이션을 요즘 시대에 좀 더 적합하게 새로 작성하고 싶으신가요?
> 이 글은 'Is Node.js a Good Choice to Create an App Based on Microservices?'을 각색하여 작성되었습니다.