Skip to content

하이브리드 아키텍처 구성 방안 #54

@jeli01

Description

@jeli01

하이브리드 아키텍처 구성 방안

  1. 데이터 동기화 서비스 구현 (이 방법은 사용하지 않습니다. 사용자 수 및 스펙 데이터들이 바로바로 동기화가 되어야 하기 때문입니다.)

    • RDBMS와 MongoDB/Redis 간 데이터 동기화 처리

    • 구현 예시:

      java
      @Service
      @RequiredArgsConstructor
      public class DataSynchronizationService {
          private final SpecRepository specRepository;
          private final MongoTemplate mongoTemplate;
          private final RedisTemplate redisTemplate;
      
          @Scheduled(fixedRate = 3600000)// 1시간마다 실행
          @Transactional(readOnly = true)
          public void synchronizeRankingData() {
      // RDBMS에서 데이터 조회
              List<Spec> specs = specRepository.findAllActive();
      
      // Redis Sorted Set 업데이트
              for (Spec spec : specs) {
                  String key = "ranking:" + spec.getJobField();
                  redisTemplate.opsForZSet().add(key, spec.getId().toString(), spec.getTotalAnalysisScore());
              }
      
      // MongoDB 통계 데이터 업데이트// ...
          }
      }
  2. 이벤트 기반 아키텍처 구현

    • 스펙 변경 시 이벤트를 발행하여 캐시 및 MongoDB 데이터 업데이트

    • Spring Events, Kafka 등 활용

    • 구현 예시:

      java
      @Service
      @RequiredArgsConstructor
      public class SpecEventHandler {
          private final RedisRankingService redisRankingService;
          private final MongoTemplate mongoTemplate;
      
          @EventListener
          public void handleSpecUpdateEvent(SpecUpdateEvent event) {
      // Redis 랭킹 업데이트
              redisRankingService.updateRanking(
                  event.getJobField().toString(),
                  event.getSpecId(),
                  event.getNewScore()
              );
      
      // MongoDB 문서 업데이트
              Query query = Query.query(Criteria.where("specId").is(event.getSpecId()));
              Update update = Update.update("totalScore", event.getNewScore());
              mongoTemplate.updateFirst(query, update, "spec_details");
          }
      }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions