Docs Menu
Docs Home
/ /

튜토리얼: MongoDB 로 마이크로서비스 앱 빌드

이 튜토리얼에서는 Spring Boot, Spring 클라우드, MongoDB 사용하여 마이크로서비스 아키텍처를 빌드 방법을 보여줍니다. 특히 이 튜토리얼에서는 함께 작동하여 완전한 애플리케이션 형성하는 여러 서비스를 만드는 방법을 안내합니다.

전체 소스 코드 다음 GitHub 리포지토리에서 찾을 수 있습니다.

  • 마이크로서비스 애플리케이션

  • 구성 리포지토리

Spring Boot는 Spring Framework를 기반으로 구축된 프레임워크 입니다. 자동 구성, 기본값 및 프로덕션 지원 기능을 추가하여 Spring Data MongoDB 와의 통합을 포함하여 Spring 기반 Java 애플리케이션 빌드를 간소화합니다. 자세한 내용은 Spring Boot 문서를 참조하세요.

Spring Cloud는 분산된 시스템 및 마이크로서비스를 구축하기 위한 도구 컬렉션 입니다. 구성 관리, 서비스 검색 및 지능형 라우팅을 위한 기능을 제공합니다. 자세한 내용은Spring 클라우드 문서를참조하세요.

이 튜토리얼에서는 다음 조치를 수행하는 방법을 보여줍니다.

  • 전제 조건 확인

  • 예시 리포지토리 복제

  • config 서버 설정

  • 서비스 레지스트리 설정

  • API 게이트웨이 구성

  • MongoDB 마이크로서비스 생성

  • REST API 테스트

1

시작하기 전에 다음 항목이 설치되어 있는지 확인합니다.

  • JDK( Java 개발 키트) 21 이상. Oracle 웹사이트에서 JDK를 다운로드 할 수 있습니다.

  • Git

  • MongoDB (로컬 개발을 위한 두 가지 배포). 로컬에서 MongoDB 설정하다 방법을 학습하려면 Docker 사용하여 로컬 Atlas 배포 만들기 가이드를 참조하세요.

2

다음 명령을 실행 하여 마이크로서비스 애플리케이션 및 구성 리포지토리를 복제합니다.

git clone git@github.com:mongodb-developer/microservices-architecture-mongodb.git
git clone git@github.com:mongodb-developer/microservices-architecture-mongodb-config-repo.git

microservices-architecture-mongodb 리포지토리 의 README.md 파일 에 있는 지침에 따라 각 서비스를 시작합니다.

3

config 서버 마이크로서비스에 대한 모든 설정 파일을 단일 리포지토리 내에 저장합니다.

config 서버 구성은 microservices-architecture-mongodb/config-server/src/main/resources/application.properties 파일 에 정의되어 있습니다.

spring.application.name=config-server
server.port=8888
spring.cloud.config.server.git.uri=${HOME}/Work/microservices-architecture-mongodb-config-repo
spring.cloud.config.label=main

이 구성은 마이크로서비스 구성과 사용할 브랜치를 저장하는 Git 리포지토리 의 위치 지정합니다.

config 서버 애플리케이션 microservices-architecture-mongodb/config-server/src/main/java/com/mongodb/configserver/ 디렉토리 에 있는 다음 Java 클래스에 정의되어 있습니다.

ConfigServerApplication.java
package com.mongodb.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}

참고

@EnableConfigServer 주석은 Spring Boot 애플리케이션 에서 config 서버 기능을 활성화합니다.

4

서비스 레지스트리는 실행 마이크로서비스와 해당 위치를 추적합니다. 다른 서비스는 이 정보를 사용하여 필요한 마이크로서비스와 통신합니다.

서비스 레지스트리 구성은 다음 속성 파일 에 정의되어 있습니다.

spring.application.name=service-registry
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

마지막 두 속성은 서비스 레지스트리가 자체적으로 등록되지 않도록 합니다.

서비스 레지스트리 애플리케이션 microservices-architecture-mongodb/service-registry/src/main/java/com/mongodb/serviceregistry/ 디렉토리 에 있는 다음 Java 클래스에 정의되어 있습니다.

ServiceRegistryApplication.java
package com.mongodb.serviceregistry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class ServiceRegistryApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistryApplication.class, args);
}
}

참고

@EnableEurekaServer 주석은 Spring Boot 애플리케이션 에서 서비스 레지스트리 기능을 활성화합니다.

5

API 게이트웨이는 모든 마이크로서비스 액세스 할 수 있는 단일 진입 점 제공합니다. 게이트웨이는 요청을 여러 마이크로서비스에 분산하고 보안, 모니터링 및 기타 문제를 처리합니다.

API 게이트웨이 구성은 microservices-architecture-mongodb/api-gateway/src/main/resources/application.yml 파일 에 정의되어 있습니다.

server:
port: 8080
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: company-service
uri: lb://company-service
predicates:
- Path=/api/company/**,/api/companies
- id: employee-service
uri: lb://employee-service
predicates:
- Path=/api/employee/**,/api/employees
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: localhost

이 구성은 회사 및 직원 서비스에 대한 경로를 정의하고 게이트웨이를 서비스 레지스트리에 등록합니다.

6

이 애플리케이션 에는 회사 서비스와 직원 서비스라는 두 가지 마이크로서비스가 포함되어 있습니다. 각 microservices 자체 MongoDB 인스턴스 에 연결하여 독립성을 유지합니다.

회사 서비스 구성은 microservices-architecture-mongodb-config-repo/company-service.properties 파일 에 정의되어 있습니다.

spring.data.mongodb.uri=${MONGODB_URI_1:mongodb://localhost:27017}
spring.threads.virtual.enabled=true
management.endpoints.web.exposure.include=*
management.info.env.enabled=true
info.app.name=Company Microservice
info.app.java.version=21
info.app.type=Spring Boot
server.port=8081
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.hostname=localhost

직원 서비스 구성은 microservices-architecture-mongodb-config-repo/employee-service.properties 파일 에 정의되어 있습니다.

spring.data.mongodb.uri=${MONGODB_URI_2:mongodb://localhost:27018}
spring.threads.virtual.enabled=true
management.endpoints.web.exposure.include=*
management.info.env.enabled=true
info.app.name=Employee Microservice
info.app.java.version=21
info.app.type=Spring Boot
server.port=8082
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.hostname=localhost

참고

로컬 개발의 경우 회사 서비스는 포트 27017 에서 MongoDB 에 연결하고 직원 서비스는 포트 27018에서 MongoDB 에 연결합니다. 프로덕션의 경우 별도의 MongoDB Atlas 클러스터를 사용하고 MONGODB_URI_1MONGODB_URI_2 환경 변수를 사용하여 연결 문자열을 설정하십시오.

7

모든 서비스를 시작한 후 다음 서비스가 실행 중인지 확인하여 마이크로서비스 아키텍처가 올바르게 작동하는지 확인합니다.

  • 포트 8888의 config 서버

  • 포트 8761의 서비스 레지스트리

  • 포트 8080의 API 게이트웨이

  • 포트 8081의 회사 서비스

  • 포트 8082의 직원 서비스

또한 포트 27017 및 27018에서 2개의 MongoDB 인스턴스가 실행 거나 2개의 MongoDB Atlas 클러스터가 있는지 확인합니다.

다음 명령을 실행 하여 테스트 스크립트 실행합니다.

./2_api-tests.sh

이 스크립트 회사와 직원을 생성한 다음 REST API 사용하여 조회합니다. 스크립트 가 반환하는 출력은 다음과 유사합니다.

DELETE Companies
2
DELETE Employees
2
POST Company 'MongoDB'
POST Company 'Google'
GET Company 'MongoDB' by 'id'
{
"id": "661aac7904e1bf066ee8e214",
"name": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00"
}
GET Company 'Google' by 'name'
{
"id": "661aac7904e1bf066ee8e216",
"name": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00"
}
GET Companies
[
{
"id": "661aac7904e1bf066ee8e214",
"name": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00"
},
{
"id": "661aac7904e1bf066ee8e216",
"name": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00"
}
]
POST Employee Maxime
POST Employee Tim
GET Employee 'Maxime' by 'id'
{
"id": "661aac79cf04401110c03516",
"firstName": "Maxime",
"lastName": "Beugnet",
"company": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00",
"joined": "2018-02-12T00:00:00.000+00:00",
"salary": 2468
}
GET Employee 'Tim' by 'id'
{
"id": "661aac79cf04401110c03518",
"firstName": "Tim",
"lastName": "Kelly",
"company": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00",
"joined": "2023-08-23T00:00:00.000+00:00",
"salary": 13579
}
GET Employees
[
{
"id": "661aac79cf04401110c03516",
"firstName": "Maxime",
"lastName": "Beugnet",
"company": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00",
"joined": "2018-02-12T00:00:00.000+00:00",
"salary": 2468
},
{
"id": "661aac79cf04401110c03518",
"firstName": "Tim",
"lastName": "Kelly",
"company": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00",
"joined": "2023-08-23T00:00:00.000+00:00",
"salary": 13579
}
]

직원 서비스는 회사 서비스를 쿼리하여 회사 세부 정보를 조회 . 다음 코드는 직원 서비스가 서비스 레지스트리를 통해 회사 서비스와 통신하는 방법을 보여줍니다.

private CompanyDTO getCompany(String company) {
String url = "http://company-service/api/company/name/";
CompanyDTO companyDTO = restTemplate.getForObject(url + company, CompanyDTO.class);
if (companyDTO == null) {
throw new EntityNotFoundException("Company not found: ", company);
}
return companyDTO;
}

URL IP 주소 와 포트가 아닌 이름으로 회사 서비스를 참조하므로 서비스 레지스트리가 올바르게 작동하는지 확인할 수 있습니다.

Spring 및 MongoDB 사용하여 마이크로서비스를 빌드하는 방법에 대해 자세히 학습 다음 리소스를 참조하세요.

돌아가기

Spring 데이터 CSFLE

이 페이지의 내용