blog

Dubbo3의 고급 기능인 "마이크로서비스 클라우드 네이티브 아키텍처"는 제로 베이스에서 회사의 내부 서비스 사용자 센터 시스템 구축을 이해할 수 있도록 도와줍니다.

기본 서비스 - 사용자 센터 사용자 센터란 무엇인가요? 사용자 센터는 더 넓은 범위의 개념으로 사용자 정보, 계정 정보 및 테넌트 정보 관리 및 제어를 포함하며, 전체 디자인에서 ...

Oct 17, 2025 · 10 min. read
シェア

기본 서비스 - 사용자 센터

사용자 센터란 무엇인가요?

사용자 센터, 사용자 정보, 계정 정보 및 테넌트 정보 관리 제어를 포함한 더 넓은 범위의 개념에서 전체 설계에서 경계의 설계가 더 타이트하면 RBAC 부서의 기능 권한의 일부가 비즈니스가 급격히 증가하는 시점으로 나눌 수 있습니다.

사용자 센터 기능의 범위

  • 사용자 서비스 센터

  • 계정 서비스 센터

  • 테넌트 서비스 센터

  • RBAC서비스 센터

위의 서비스 센터는 i와 독립적으로 또는 모놀리식 배포 모드로 배포할 수 있지만 결과적으로 도메인 세분화 원칙은 변경되지 않습니다.

사용자 서비스 센터

주로 관련 사용자 서비스 정보

  • 기본 사용자 정보 관리
  • 사용자 기본 정보 검색
  • 사용자 정보 확장 기능

계정 서비스 센터

주로 연결된 계정이 있는 서비스의 i 성능에 맞춰져 있습니다.

  • 계정 정보 관리

    • 계정 등록 기능을 위한 서비스 인터페이스
    • 계정 취소 기능을 위한 서비스 인터페이스
    • 계정 상태 제어 할당량 서비스 인터페이스
  • 계정 인증 관리

    • 사용자 로그인 서비스 i-인터페이스
    • 사용자 로그아웃 서비스 인터페이스
    • 계정 JWT 체크섬 인증 서비스 기능
    • 계정 클럽화 제어 메커니즘

테넌트 서비스 센터

주로 테넌트 분리 메커니즘 및 테넌트 제어를 포함하여 관련 테넌트 개념과 관련된 i에 중점을 둡니다.

  • 테넌트 정보 유지 관리: 테넌트 정보 데이터를 유지 관리하고 테넌트의 유효 기간 또는 유효 범위를 제어합니다.

  • 테넌트 권한 제어: 테넌트 관련 데이터 권한 격리 메커니즘(예: 스키마 수준, 테이블 수준, 라이브러리 수준 등)을 사용합니다.

Dubbo3RPC 기술 호출 시스템

이 장에서는 Dubbo3의 RPC 서비스 호출 시스템을 사용하여 게이트웨이 센터와 권한 보안 센터를 사용자 센터에 인터페이스하여 게이트웨이 센터 -> 보안 센터 -> 사용자 센터로 만들 계획입니다.

보안 센터는 인증 처리, 사용자 센터는 정보 유지 관리 및 제어, 게이트웨이 센터는 라우팅 서비스 및 필터링 제어 감사를 위해 사용됩니다.

사용자 센터 디자인의 기술 콘텐츠

관련 사용 사례를 위한 Dubbo3 주석 구성

서버 측 구성 제어

먼저 서비스 제공업체의 구성 정보 클래스를 작성합니다.

@Configuration
@EnableDubbo(scanBasePackages = "xx.xx.xx")
@PropertySource("classpath:/spring/dubbo-provider.properties")
static class ProviderConfiguration {
}

EnableDubbo 어노테이션은 Spring xx.xx.xx 패키지 검색 트래버스를 활성화하여 관련 Dubbo 어노테이션과 관련된 모든 클래스를 찾도록 합니다.

서비스 공급자 인터페이스 정의

서비스 공급자 구현으로 @DubboService: 에 의해 수정되는 인터페이스 구현 클래스가 있습니다.

@DubboService
public class AnnotatedGreetingService implements GreetingService {
 public String sayHello(String name) {
 System.out.println("greeting service received: " + name);
 return "hello, " + name;
 }
}
소비자 측의 구성 제어

먼저 서비스의 소비자 측에 대한 구성 정보 클래스를 작성합니다.

@Configuration
@EnableDubbo(scanBasePackages = "xx.xx.xx")
@PropertySource("classpath:/spring/dubbo-consumer.properties")
@ComponentScan(value = {"org.apache.dubbo.samples.annotation.action"})
static class ConsumerConfiguration {
}

그런 다음 @DubboReference 어노테이션을 사용하여 해당 인터페이스를 수정하여 관련 원격 서비스 구현 클래스를 삽입합니다.

@Component("annotatedConsumer")
public class GreetingServiceConsumer {
 @DubboReference
 private GreetingService greetingService;
 ...
}

사용자 로그인 기능 개발 및 인터페이스 디자인 구현.

주로 사용자 정보 자격 증명 입력, 사용자 이름 + 비밀번호 사용을 통해 로그인 메커니즘을 수행하기 위해 사용자와의 작업 제어 인터페이스 구현에 중점을두고 로그인 작업을 수행합니다.

  • 주요 지향 서비스 1: 지속적인 사용자 쿼리 정보를 위한 사용자 중심 서비스
  • 주요 지향 서비스 2: 보안 인증 서비스, 스프링 보안 서비스에 대한 인증 제어

사용자 등록, 로그아웃 기능 개발 및 구현, 인터페이스 정의 구현

  • 주로 사용자 중심의 계정 등록 기능

  • 주로 사용자의 계정 취소 기능에 중점을 두고 계정 아래의 모든 관련 정보를 지웁니다.

사용자 로그인 정보 가져오기 및 잊어버린 비밀번호 구현 및 인터페이스 정의

  • 주로 사용자가 로그인한 후 토큰 및 관련 자격 증명을 기반으로 기본 사용자 정보 모델을 획득하며, 이는 시스템의 글로벌 사용자 정보 컨텍스트 역할을 합니다.

  • 비밀번호를 잊어버렸을 때 주로 시스템 인증 자격 증명 채널을 사용하여 사용자 사서함, 휴대폰 번호를 비밀번호 변경 자격 증명으로 사용합니다.

    • 식별 코드/인증 코드를 전송할 관련 사용자 이메일 또는 휴대폰 번호를 받습니다.
    • 사용자의 비밀번호를 변경하려면 관련 인증 코드/식별 코드에 따라 오!

사용자 개인 정보 업데이트, 인터페이스 정의 및 기능 구현

  • 주로 계정 또는 개인 정보 데이터를 업데이트하는 데 사용되며, 일반적으로 기본 정보 및 관련 확장 정보 등으로 확장할 수 있습니다.

관련 비밀번호 재설정에 대한 인터페이스 정의 및 기능 구현이 완료되었습니다.

  • 비밀번호 재설정 작업은 일반적으로 시스템 관리자가 사용자의 비밀번호가 불편한 상황에서 사용자의 비밀번호를 기본 임의 비밀번호로 직접 재설정할 수 있는 기능입니다.

데이터 테넌트 격리 메커니즘을 달성하기 위한 MybatisPlus를 통한 멀티 테넌트 운영 구현 메커니즘

마이바티스플러스 프레임워크는 주로 인터셉터 메커니즘을 통해 관련 tenant_id 데이터 값의 주입을 직접 가로채는 데 사용됩니다:

멀티테넌트 사용
  • 핵심 플러그인: 테넌트라인 내부 인터셉터

  • 코어 프로세서: 테넌트라인핸들러-

public interface TenantLineHandler {
 /**
 * 테넌트 ID 값 가져오기 표현식은 단일 ID 값만 지원합니다.
 * <p>
 *
 * @return 테넌트 ID 값 표현식
 */
 Expression getTenantId();
 /**
 * 테넌트 필드 이름 가져오기
 * <p>
 * 기본 필드 이름은: tenant_id
 *
 * @return 테넌트 필드 이름
 */
 default String getTenantIdColumn() {
 return "tenant_id";
 }
 /**
 * 테이블 이름을 기준으로 스플라이스 멀티테넌시 조건 무시 여부 결정하기
 * <p>
 * 기본적으로 멀티테넌트 조건 구문 분석 및 연결하기
 *
 * @param tableName  
 * @return 무시 여부, true:무시,false:멀티테넌트 조건을 파싱하고 연결해야 하는 경우
 */
 default boolean ignoreTable(String tableName) {
 return false;
 }
}

설명:

멀티 테넌시! = 권한 필터링, 테넌트는 서로 완전히 격리됩니다 !!!! 멀티 테넌시가 활성화되면 실행된 모든 메소드 쿼리가 처리됩니다. 사양에 따라 직접 SQL을 작성하세요.

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
 // 페이징 플러그인을 사용하는 경우에는 먼저 TenantLineInnerInterceptor를 추가한 다음 PaginationInnerInterceptor를 추가해야 한다는 점에 유의하세요.
 // 페이징 플러그인을 사용하는 경우 MybatisConfiguration을 설정해야 합니다.#useDeprecatedExecutor = false
 // interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
 interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(
 new TenantLineHandler() {
 // manager_id = 1088248166370832385
 // 테넌트 ID 값 가져오기 표현식은 단일 ID 값만 지원합니다.
 @Override
 public Expression getTenantId() {
 return new LongValue(1088248166370832385L);
 }
 // 이것은 기본 방법으로, 모든 테이블에 멀티테넌트 조건의 철자가 필요하다는 것을 나타내는 false를 반환합니다.,
 // 이 조건은 여기에서 역할 테이블을 설정하는 데 필요하지 않습니다.
 @Override
 public boolean ignoreTable(String tableName) {
 if ("role".equals(tableName)) {
 return true;
 }
 return false;
 }
 @Override
 public String getTenantIdColumn() {
 return "manager_id";
 }
 }));
 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
 return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
 return configuration -> configuration.setUseDeprecatedExecutor(false);
}

관련 트리플 통신 프로토콜의 도입 및 구현을 소개합니다.

RPC 프로토콜 선택

프로토콜은 RPC의 핵심으로, 네트워크를 통한 데이터 전송의 내용과 형식을 규제합니다. 필수 요청 및 응답 데이터 외에도 일반적으로 단일 요청의 직렬화 방법, 시간 초과, 압축 및 인증 정보와 같은 추가 제어 데이터가 포함됩니다.

계약의 내용은 다음 세 부분으로 구성됩니다.
  • 데이터 교환 형식: 직렬화라고도 하는 네트워크 전송에서 RPC 요청 및 응답 객체의 바이트 스트림의 내용을 정의합니다.
  • 프로토콜 구조: 정의에는 필드 목록과 각 필드의 의미, 서로 다른 필드의 배열이 포함되어 있습니다.
  • 프로토콜은 규칙, 형식 및 의미를 정의하여 네트워크에서 데이터가 전송되는 방식에 대해 합의합니다. 성공적인 RPC를 위해서는 통신의 양쪽 끝이 프로토콜에 따라 네트워크 바이트 스트림과 개체를 읽고, 쓰고, 변환할 수 있어야 합니다. 양쪽 끝에서 사용할 프로토콜에 동의하지 못하면 원격 통신의 요구 사항을 충족하지 못합니다.
Dubbo3통신 프로토콜
  • Dubbo3는 Dubbo 프레임워크의 기본 프로토콜인 Triple(Dubbo3) 및 Dubbo2 프로토콜을 제공합니다. 또한 Dubbo3는 gRPC, Thrift, JsonRPC, Hessian2, REST 등 여러 타사 프로토콜을 Dubbo의 프로그래밍 및 서비스 거버넌스에 통합합니다. 다음 섹션에서는 Triple 및 Dubbo2 프로토콜에 대해 중점적으로 설명합니다.

  • 트리플은 Dubbo3에서 도입한 주요 프로토콜입니다. 트리플은 3세대를 의미하며, Dubbo1.0/Dubbo2.0 프로토콜의 진화와 클라우드 네이티브가 가져온 기술 표준화의 물결을 통해 개발된 새로운 프로토콜인 트리플은 Dubbo3를 위해 개발되었습니다.

Triple 프로토콜
  • 트리플 프로토콜은 프로토콜 수준에서 로드 밸런싱 및 흐름 제어 관련 메커니즘을 확장한, HTTP/2를 통한 gRPC와 완벽하게 호환되는 Dubbo3의 기본 프로토콜입니다. 이 문서의 목적은 사용자가 트리플 프로토콜을 올바르게 사용할 수 있도록 안내하는 것입니다.

  • 서비스가 신규 서비스인 경우 더 나은 성능과 언어 간 결과를 위해 기본 직렬화 방법으로 protobuf를 사용하는 것이 좋습니다. 기존 서비스를 업그레이드하려는 경우, 트리플 프로토콜은 이미 헤시안 / JSON과 같은 다른 직렬화 방법을 지원합니다.

서비스 트래픽 관리

더보 정의 라우팅 규칙을 통한 트래픽 분산 제어

트래픽 관리

트래픽 관리의 핵심은 다음 그림과 같이 잘 구성된 라우팅 규칙에 따라 애플리케이션 서비스에 요청을 배포하는 것입니다:

그중에서도:
  • 라우팅 규칙은 둘 이상일 수 있으며 서로 다른 라우팅 규칙 간에는 우선순위가 있습니다. 예: 라우터(1) -> 라우터(2) -> ...... -> 라우터(n)
  • 라우팅 규칙은 여러 다른 애플리케이션 서비스로 라우팅할 수 있습니다. 예를 들어 라우터(2)는 서비스(1) 또는 서비스(2)로 라우팅할 수 있습니다.
  • 여러 개의 서로 다른 라우팅 규칙이 동일한 애플리케이션 서비스로 라우팅할 수 있습니다. 예를 들어 라우터(1)과 라우터(2)는 모두 서비스(2)로 라우팅할 수 있습니다.
  • 라우팅 규칙은 어떤 애플리케이션 서비스로도 라우팅하지 않을 수도 있습니다. 예를 들어 라우터가 어떤 서비스로도 라우팅되지 않으면 라우터에 도달하는 모든 요청을 처리할 해당 애플리케이션 서비스가 없기 때문에 오류가 발생합니다.
  • 애플리케이션 서비스는 단일 인스턴스 또는 애플리케이션 클러스터일 수 있습니다.
더보 교통 관리 소개

Dubbo는 트래픽 관리 정책의 메시 모드를 지원하여 A/B 테스트, 카나리아 릴리스, 파란색 및 녹색 릴리스 및 기타 기능을 쉽게 구현할 수 있습니다.

  • VirtualService는 주로 인바운드 트래픽 분류 규칙을 처리하며 서비스 수준 및 메서드 수준 분류를 모두 지원합니다.
  • DubboRoute는 주로 서비스 수준 분류 문제를 해결합니다. 동시에 재시도 메커니즘, 시간 초과, 오류 주입, 이미지 트래픽 및 기타 기능도 제공합니다.
  • 주로 특정 서비스에서 메서드 수준 분류 문제를 해결합니다. 메서드 이름, 메서드 매개변수, 매개변수 수, 매개변수 유형, 헤더 및 기타 분류 기능의 다른 차원을 지원합니다. 또한 메서드 수준 재시도 메커니즘 , 시간 초과 , 오류 주입 , 이미지 트래픽 및 기타 기능을 지원합니다.
  • DubboDestination은 라우팅된 트래픽의 대상 주소를 설명하는 데 사용되며 호스트, 포트, 서브넷 및 기타 방법을 지원합니다.
  • DestinationRule은 주로 호스트, 서브넷 등을 통해 제공자 클러스터에 연결할 수 있는 대상 주소 규칙을 다룹니다. 동시에 트래픽폴리시를 통해 로드 밸런싱을 달성할 수 있습니다.
  • 이 설계 개념은 트래픽 우회와 목적지 주소 간의 결합 문제에 대한 좋은 해결책입니다. 구성 규칙이 단순화되어 구성 중복 문제를 효과적으로 피할 수 있을 뿐만 아니라, 다양한 비즈니스 사용 시나리오를 지원하기 위해 매우 유연하게 VirtualService와 DestinationRule의 모든 조합을 지원할 수 있습니다.
gRPC와 호환되며, 전송 계층으로 HTTP2를 사용하는 새로운 프로토콜인 Triple을 구축합니다.
  • 성능: 트리플 프로토콜은 메타데이터와 페이로드를 분리하는 전략을 채택하여 페이로드를 파싱하고 역직렬화하는 게이트웨이와 같은 중간 장치가 필요하지 않으므로 응답 시간이 단축됩니다.

  • 라우팅 지원, 메타데이터는 사용자가 사용자 지정 헤더를 추가할 수 있도록 지원하기 때문에 사용자는 헤더에 따라 클러스터 또는 라우팅을 더 편리하게 나눌 수 있으므로 컷플로우 그레이 스케일 또는 재해 복구의 릴리스가 더 높은 수준의 유연성을 갖습니다.

  • 보안을 위해 양방향 TLS 인증과 같은 암호화된 전송 기능이 지원됩니다.

  • 사용 편의성 측면에서 Triple은 기본 gRPC에서 권장하는 Protobuf 직렬화를 지원할 뿐만 아니라 Hessian/JSON과 같은 다른 직렬화도 일반적인 방식으로 지원하므로 사용자가 Triple 프로토콜로 쉽게 업그레이드할 수 있습니다. 기존 Dubbo 서비스의 경우, 트리플 프로토콜을 수정하거나 추가하려면 선언된 서비스의 코드 블록에 프로토콜 구성 한 줄만 추가하면 되며, 변환 비용은 거의 들지 않습니다.

Read next

파이썬 아키텍처 패턴: 1.

고급 및 저급 TDD는 서비스 계층을 도입하여 작동 중인 애플리케이션에서 필요한 추가 오케스트레이션 책임 중 일부를 포착합니다. 서비스 계층은 리포지토리에서 가져와야 하는 것, 리포지토리에서 가져와야 하는 것, 애플리케이션에서 가져와야 하는 것 등 각 사용 사례와 워크플로우를 명확하게 정의하는 데 도움이 됩니다.

Oct 17, 2025 · 69 min read