👩🏻‍💻 웹 개발/🔠✏️ ECC [full-stack]

[Spring Boot] Redis + NoSQL + RDBMS 조합으로 데이터 처리하기

hyo00 2025. 4. 20. 21:28

스터디 진행 시 대략적인 프로세스는 다음과 같다. 여기서 데이터 처리에 관련해 생긴 고민들을 해결한 과정을 정리해봤다.

1️⃣ 팀은 카테고리별 추천 주제 목록에서 n개를 선택한다. 
2️⃣ 각 주제에 대해 스터디를 진행하다가 모르는 표현이나 피드백이 필요한 표현을 입력하여 전송한다.
3️⃣ AI가 적합한 답변을 생성하여 스터디 기록에 추가한다. (아래 사진 파란색 글씨 참고. 예문도 추가할 예정)
4️⃣ 2&3 과정을 계속하여 반복 후 스터디 종료 시 해당 데이터를 기반으로 보고서가 저장된다.

 

스터디 진행 중 화면 예시

 

 

1. RDBMS로 처리 시 join 관계가 너무 많고 복잡해진다.

하나의 study → category N개 → topic N개 → expression N개 .. 로 중첩과 반복이 많은 비정형 데이터 구조이기 때문에, 별도 테이블 분리 없이 문서 단위로 데이터를 저장하는 MongoDB로 처리한다! 예시 데이터 구조는 아래와 같다. 

{
  "id": 6,
  "teamId": 1,
  "topics": [
    {
      "topicId": 1,
      "category": "RANDOM",
      "topic": "동물원에서의 경험",
      "expressions": [
        {
          "expressionId": 1,
          "question": "원숭이가 영어로 뭐야",
          "english": "monkey",
          "korean": "원숭이",
          "example": "His monkey wanted a banana ~"
        },
        {
          "expressionId": 2,
          "question": "사과하다를 say sorry라고 해?",
          "english": "apologize",
          "korean": "사과하다",
          "example": "You should apologize ~"
        }
      ]
    },
    {
      "topicId": 2,
      "category": "BALANCE_GAME",
      "topic": "놀이공원 VS 동물원",
      "expressions": [
      ..
      ]
    }
  ]
}

 

 

 

 

2. 스터디를 진행하는 동안 주제와 표현 등 내용이 계속해서 추가되며, 이를 팀원들이 채팅 형식으로 실시간 조회해야 하는데 속도가 걱정된다.

스터디 진행과정은 팀원들과 ai가 함께 채팅하는 방식이기 때문에 속도가 중요하다. 이를 데이터를 디스크가 아닌 메모리에 저장하는 Redis에서 처리하게 되면 훨씬 빠른 속도로 생성/수정 및 조회가 가능해진다. 2시간 가량 진행되는 스터디 내용을 Redis에 임시로 저장하고, 스터디 종료 시 이를 MongoDB에 옮겨 담으면 된다. 

 


 

결론적으로 RDBMS(MariaDB)를 기반으로 두고, 실시간성을 위한 Redis와 유연한 데이터 처리를 위한 MongoDB를 함께 활용하는 전략을 채택하게 되었다. 각 목적에 맞게 이를 구분하여 아래 데이터 흐름도를 완성했다.

 

ERD는 Entity-Relationship Diagram이니 DFD(Data Flow Diagram)이나 Data Architecture Diagram이 적절한 표현이다 :)

⬛️=MariaDB, 🟩=MongoDB, 🟥=Redis

 

Redis, MongoDB, MariaDB(JPA) 각각의 데이터 저장소와 연동하기 위해 아래 의존성을 추가했다. 구현 과정은 굉장히 복잡할 거라고 생각했던 거에 비해 수월했다. 다음 글에서 정리해야지

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'