DB 생성 및 관리

wera4677·2025년 8월 28일

프로젝트

목록 보기
12/18

데이터 저장소 설계 의사결정: RDS/DynamoDB vs S3 + Cognito

개요

프로젝트 초반에는 RDS나 DynamoDB를 도입할지 고민했다.
하지만 실제 요구사항을 검토하고 테스트한 결과, Cognito + S3 조합으로 충분하다는 결론을 내렸다.
이 과정에서 어떤 기준으로 판단했고, 왜 해당 결정을 내렸는지를 기록한다.


후보안 비교

항목RDSDynamoDBS3 + Cognito
구조적 데이터 저장관계형 구조에 강점Key-Value/NoSQL 구조비정형 데이터(S3), 인증은 Cognito
데이터 성격스키마 강제 필요빠른 읽기/쓰기, 단순 구조 적합파일 중심(이력서, 음성, 분석 결과)
운영 복잡도스키마 관리, 백업 필요파티션 키 설계 필수단순 저장/조회, 관리 부담 적음
비용인스턴스 비용 지속 발생읽기/쓰기 요청 단위 비용저장량 기반 과금, 소규모 프로젝트 저렴
성능/지연높은 일관성 보장마이크로초 단위 응답S3는 대량 파일에도 안정적
확장성수직 확장 중심수평 확장 우수대규모 파일 저장에 최적화

테스트 및 검토

  • 데이터 형태
    • 실제로 저장해야 하는 정보는 이력서 파일, 생성된 질문, 답변, 피드백 위주 → 비정형 데이터 중심
  • 실시간 요구사항
    • 면접 서비스는 실시간 처리(STT, TTS)가 핵심 → DB의 강한 트랜잭션 기능까지는 필요 없음
  • 비용/운영 편의
    • RDS는 인스턴스 유지비가 커서 프로젝트 규모에 맞지 않음
    • DynamoDB는 테이블 설계와 사용 패턴이 단순하지 않으면 오히려 과설계 위험
  • S3 + Cognito 테스트
    • 사용자 로그인은 Cognito로 간단히 해결
    • 이력서 업로드/분석 결과를 S3에 저장 후 DynamoDB 없이도 충분히 관리 가능

DB 생성 테스트

기본 키 구성

키 종류이름타입설명
Partition Keyuser_idStringCognito에서 발급되는 사용자 고유 ID (sub 값)
Sort Keyinterview_idString각 면접을 구분하기 위한 고유 ID (날짜 기반 or UUID 가능)

주요 속성 필드

필드명타입설명
timestampString면접 시작 시간 (ISO 8601 형식)
resume_s3StringS3에 업로드된 이력서 파일 경로
resume_keywordsList of Strings이력서 분석을 통해 추출된 주요 키워드
questionsList of Maps생성된 질문 목록 (type, text 포함)
answersList of Strings사용자의 답변 목록
feedbackMap분석 피드백 (text, score) 포함
{
  "user_id": {
    "S": "user-abc123"
  },
  "interview_id": {
    "S": "interview-20250602-001"
  },
  "answers": {
    "L": [
      {
        "S": "저는 컴퓨터공학을 전공했고..."
      },
      {
        "S": "작년 팀 프로젝트에서 리더 역할을 맡았고..."
      }
    ]
  },
  "feedback": {
    "M": {
      "score": {
        "N": "87"
      },
      "text": {
        "S": "명확한 논리와 사례 사용이 좋았습니다."
      }
    }
  },
  "questions": {
    "L": [
      {
        "M": {
          "text": {
            "S": "자기소개 부탁드립니다."
          },
          "type": {
            "S": "기본질문"
          }
        }
      },
      {
        "M": {
          "text": {
            "S": "리더십 경험을 말씀해 주세요."
          },
          "type": {
            "S": "꼬리질문"
          }
        }
      }
    ]
  },
  "resume_keywords": {
    "L": [
      {
        "S": "Python"
      },
      {
        "S": "Leadership"
      },
      {
        "S": "AI"
      }
    ]
  },
  "resume_s3": {
    "S": "s3://your-bucket/user-abc123/resume.pdf"
  },
  "timestamp": {
    "S": "2025-06-02T14:00:00Z"
  }
}
  • 항목 생성 -> Json뷰에 입력

최종 결정

Cognito + S3

“데이터베이스는 무조건 필요하다”는 고정관념을 버리고,
현재 프로젝트의 데이터 성격과 운영 부담을 기준으로 선택하는 게 중요했다.

초기에는 DynamoDB를 고려했지만, 실제 기능 요구를 테스트한 결과 과도한 설계라는 결론에 도달했다.

결과적으로 Cognito + S3 구조는 간단하고 비용 효율적이며, 팀 내 모두가 이해하기 쉬운 방식이었다.
profile
클라우드 꿈나무🌳

0개의 댓글