이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
클라우드 컴퓨팅 시대에는 여러 서버에 배포할 수 있는 애플리케이션에 대한 요구가 점점 커지고 있습니다. 여기에서 마이크로서비스가 등장합니다. 마이크로서비스는 독립적으로 배포하고 확장할 수 있는 작고 독립적인 서비스 세트로 애플리케이션을 구축하는 방법입니다.
Node.js는 마이크로서비스 구축에 널리 사용되는 플랫폼입니다. 가볍고 효율적이며 라이브러리 및 도구의 대규모 에코 시스템이 있습니다.
이 기사에서는 Node.js를 사용하여 마이크로서비스 아키텍처를 구축하는 방법을 살펴보겠습니다. 간단한 모놀리식 애플리케이션으로 시작하여 일련의 마이크로서비스로 세분화합니다. 그런 다음 마이크로 서비스를 배포하고 확장하는 방법을 살펴보겠습니다.
Node.js와 마이크로서비스에 대해 알아보기 전에 한 걸음 물러나 모놀리식 아키텍처와 마이크로서비스 아키텍처의 차이점을 이해해 보겠습니다.
모놀리식 애플리케이션은 하나의 큰 단위로 구축된 애플리케이션입니다. 응용 프로그램의 모든 구성 요소는 밀접하게 결합되어 서로 의존합니다. 모놀리식 애플리케이션은 일반적으로 단일 서버에 단일 프로세스로 배포됩니다.
마이크로서비스 아키텍처는 애플리케이션이 작고 독립적인 서비스 집합으로 구축되는 아키텍처입니다. 이러한 서비스는 느슨하게 결합되어 있으며 독립적으로 배포하고 확장할 수 있습니다. 마이크로서비스는 일반적으로 일련의 서버에 작고 격리된 프로세스 집합으로 배포됩니다.
마이크로서비스 아키텍처를 사용하면 다음과 같은 몇 가지 주요 이점이 있습니다.
확장성: 마이크로서비스는 독립적으로 배포하고 확장할 수 있으므로 필요에 따라 애플리케이션의 특정 부분을 쉽게 확장할 수 있습니다.
격리: 각 마이크로서비스는 자체 프로세스에서 실행되므로 하나의 마이크로서비스가 실패해도 다른 마이크로서비스에 영향을 미치지 않습니다.
유연성: 마이크로서비스는 다양한 프로그래밍 언어로 작성하고 다양한 서버에 배포할 수 있으므로 작업에 적합한 도구를 선택할 수 있습니다.
이제 마이크로서비스의 이점을 살펴보았으므로 모놀리식 애플리케이션을 마이크로서비스 세트로 나누는 방법을 살펴보겠습니다.
예제 모놀리식 애플리케이션은 간단한 할 일 목록입니다. To-Do 항목을 만들고 관리하기 위한 사용자 인터페이스와 데이터를 저장하기 위한 백엔드가 있습니다. 백엔드는 단순한 관계형 데이터베이스입니다.
첫 번째 단계는 응용 프로그램의 다양한 구성 요소를 식별하는 것입니다. 할 일 목록 예제에는 몇 가지 분명한 구성 요소가 있습니다.
이러한 구성 요소를 더 작은 서비스로 더 세분화할 수 있습니다. 예를 들어 사용자 인터페이스는 HTML 및 CSS를 처리하는 프런트엔드 서비스와 데이터를 처리하는 백엔드 서비스로 나눌 수 있습니다.
백엔드 데이터베이스는 데이터를 처리하는 데이터베이스 서비스와 파일을 처리하는 스토리지 서비스로 나눌 수 있습니다.
그리고 To-Do 목록 데이터는 To-Do 항목을 처리하는 작업 서비스와 사용자 데이터를 처리하는 사용자 서비스로 나눌 수 있습니다.
이제 독립적으로 배포하고 확장할 수 있는 작고 독립적인 서비스 집합이 있습니다.
이제 마이크로서비스가 있으므로 이를 배포하는 방법을 살펴보겠습니다.
마이크로서비스를 배포하는 몇 가지 방법이 있습니다. 가장 일반적인 방법은 Docker Swarm 또는 Kubernetes와 같은 컨테이너 오케스트레이터를 사용하는 것입니다.
또 다른 옵션은 AWS Lambda 또는 Azure Functions와 같은 서버리스 플랫폼을 사용하는 것입니다. 서버리스 플랫폼은 트래픽이 많지 않거나 가끔 필요한 마이크로서비스에 적합합니다.
To-Do 목록 예제에서는 Docker Swarm을 사용하여 마이크로서비스를 배포합니다. 서비스를 정의하는 docker-compose.yml 파일을 생성합니다.
version: "3"
services:
frontend:
image: frontend:latest
ports:
- "80:80"
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
backend:
image: backend:latest
ports:
- "8080:8080"
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
database:
image: database:latest
ports:
- "3306:3306"
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
storage:
image: storage:latest
ports:
- "9000:9000"
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
task:
image: task:latest
ports:
- "8081:8081"
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
user:
image: user:latest
ports:
- "8082:8082"
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
그런 다음 다음 명령을 사용하여 서비스를 배포할 수 있습니다.
$ docker stack deploy -c docker-compose.yml todo
마이크로서비스가 배포되면 필요에 따라 확장하거나 축소할 수 있습니다. 예를 들어 프런트엔드 서비스를 2개의 복제본에서 4개의 복제본으로 확장할 수 있습니다.
$ docker service scale todo_frontend=4
백엔드 서비스를 하나의 복제본으로 축소할 수도 있습니다.
$ docker service scale todo_backend=1
이 기사에서는 Node.js를 사용하여 마이크로서비스 아키텍처를 구축하는 방법을 살펴보았습니다. 우리는 모놀리식 애플리케이션을 작고 독립적인 서비스 집합으로 나누는 방법과 이러한 서비스를 배포하고 확장하는 방법을 살펴보았습니다.
마이크로서비스는 많은 이점을 제공하지만 몇 가지 문제도 따릅니다. 예를 들어 작고 독립적인 서비스 집합을 관리하는 것은 복잡할 수 있습니다. 또한 서비스 간 통신으로 인해 애플리케이션에 대기 시간이 추가될 수 있습니다.
이러한 문제에도 불구하고 마이크로서비스는 확장 가능하고 탄력적인 애플리케이션을 구축하는 강력한 방법입니다. 그리고 Node.js는 마이크로서비스 구축을 위한 훌륭한 플랫폼입니다.