Database Amazon 검색 시스템 구축 - 장동욱 강사님 강의

2025. 3. 27. 19:11·특강

📌 3차 세션 - Amazon.com 검색 시스템 구축

이번 세션에서는 Amazon.com 검색 시스템을 구축하기 위해 MySQL 데이터베이스를 사용하여 도서 데이터를 삽입하고 검색하는 방법과 함께 주문 시스템 설계 및 트랜잭션 처리에 대해 배웁니다. 또한, 데이터베이스의 성능을 향상시키기 위한 인덱스에 대해서도 학습합니다.


🚦 도서 데이터 삽입 (INSERT)

목표:

도서를 검색하려면 기본적인 도서 데이터가 필요합니다. 이를 MySQL 데이터베이스에 삽입하는 방법을 실습합니다.

실습:

도서 데이터를 MySQL에 삽입하는 방법을 배우며, 기존 테이블을 활용하여 24686000권의 데이터를 삽입합니다.

  • 경고: 오늘 실습으로 생성한 books 테이블이 존재한다고 가정합니다. 해당 테이블을 생성하지 못한 분들은 실습 후 다시 과제를 수행해 주세요! 🙏🏻

MySQL 테이블 수정:

출판일자의 자료형을 VARCHAR(4)로 변경:

ALTER TABLE `books`
CHANGE COLUMN `published_at`
`published_at` VARCHAR(4) DEFAULT NULL;

Python 코드 (데이터 삽입):

 
import json
import pymysql

def insert_books_to_mysql(json_file):
    connection = pymysql.connect(
        host='localhost',
        user='root',
        database='amazon',
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor
    )
    cursor = connection.cursor()

    with open(json_file, 'r', encoding='utf-8') as f:
        books = json.load(f)

    insert_query = """
    INSERT INTO books (
        title, published_at
    ) VALUES (
        %s, %s
    )
    """

    # Insert each book entry
    for book in books:
        cursor.execute(insert_query, (
            book.get('title'),
            book.get('first_publish_year'),
        ))

    connection.commit()
    cursor.close()
    connection.close()
    print("Data inserted successfully")

json_file = 'amazon_books.json'
insert_books_to_mysql(json_file)

🚦 도서 데이터 조회

목표:

도서 데이터를 도서명으로 검색하는 방법을 이해합니다. 이는 인터넷 서점에서 책을 검색하는 것과 유사한 방식입니다.

핵심:

도서 검색 시스템의 브레인스토밍을 통해 효율적인 검색 방법을 설계합니다.


🚦 인덱스

목표:

효율적으로 도서를 검색할 수 있는 인덱스를 생성하는 방법을 배웁니다.

인덱스 종류:

  1. B-tree 인덱스: 기본적인 인덱스 유형으로, 정렬된 데이터를 효율적으로 검색합니다.
  2. Hash 인덱스: 해시 알고리즘을 사용해 정확한 값 찾기에서 유용합니다.
  3. 공간 인덱스: GIS 데이터 등 공간 정보를 처리할 때 사용됩니다.

인덱스 생성 예시:

  • 단일 컬럼 인덱스:
ALTER TABLE books ADD INDEX idx_title (title);

title 컬럼에 인덱스를 추가하여, 해당 컬럼을 기준으로 검색 성능을 향상시킬 수 있습니다.

  • 복수 컬럼 인덱스:
ALTER TABLE books ADD INDEX idx_title_author (title, author);

title과 author 두 컬럼을 기준으로 인덱스를 추가하여, 여러 조건에 대한 검색 성능을 향상시킬 수 있습니다.


📌 Amazon.com 주문 시스템 구축


🚦 주문 시스템 설계

목표:

주문 시스템을 어떻게 설계할지 배우고, 재고 관리와 결제 처리 등의 문제를 해결하는 방법을 학습합니다.

  • 문제점: 초당 0.38개의 주문이 들어오는 상황에서 재고가 1개 남아있을 때, 첫 번째 주문이 들어오면 재고가 0이 되어 주문이 실패할 수 있습니다. 이를 해결하려면 재고 확인 후 alert을 띄워야 합니다.
  • 기능:
    • 재고 확인: 재고가 부족하면 알림을 보냅니다.
    • 쿠폰/마일리지 차감: 사용 후 차감 처리합니다.
    • 결제 PG사 API: 한도 초과시 알림을 띄웁니다.
    • 결제/적립: 마일리지 적립 및 재고 차감을 처리합니다.

🚦 트랜잭션의 특징 (ACID 원칙)

목표:

ACID 원칙을 이해하고 트랜잭션 처리에 어떻게 적용할지 배웁니다.

ACID 원칙은 데이터베이스 트랜잭션에서 정확하고 일관된 처리를 보장하는 4가지 핵심 요소입니다:

  1. Atomicity (원자성): "전체 작업이 하나처럼 실행된다"
    • 예: 결제 시스템에서 오류가 발생하면 전체 주문이 취소됩니다.
  2. Consistency (일관성): "데이터가 항상 올바른 상태를 유지한다"
    • 예: 사용자가 존재하지 않으면 주문을 생성할 수 없습니다.
  3. Isolation (격리성): "다른 트랜잭션과 영향을 받지 않는다"
    • 예: 할인 프로모션을 적용한 가격으로 결제해야 합니다.
  4. Durability (영속성): "완료된 트랜잭션은 영구적으로 저장된다"
    • 예: 시스템 장애가 발생해도, 완료된 주문은 절대로 사라지지 않습니다.

정리:

ACID 특징설명실생활 예시
Atomicity 트랜잭션은 하나의 단위로 처리되어야 하며, 부분 실패가 없어야 한다. 결제 실패 시, 모든 작업이 취소되어야 한다.
Consistency 트랜잭션이 완료될 때 데이터의 일관성이 보장되어야 한다. 사용자가 존재하지 않으면 주문을 생성하지 않는다.
Isolation 동시에 실행되는 트랜잭션들은 서로 영향을 미치지 않아야 한다. 할인 프로모션을 적용한 가격으로 결제가 이루어야 한다.
Durability 트랜잭션이 완료되면, 그 결과는 영구적으로 저장된다. 완료된 주문은 장애가 있어도 사라지지 않는다.

🧠 쉽게 말하면:

ACID는 트랜잭션의 핵심 원칙으로, 데이터베이스에서 정확하고 안전하게 데이터를 처리하기 위해 필요한 4가지 보장입니다:

  • Atomicity: 트랜잭션은 완전하게 실행되거나, 전혀 실행되지 않음.
  • Consistency: 트랜잭션 전후에 데이터의 일관성이 유지됨.
  • Isolation: 트랜잭션은 다른 트랜잭션과 격리되어 독립적으로 실행됨.
  • Durability: 트랜잭션이 완료되면 영구적으로 저장됨.

ACID 원칙을 통해 시스템이 안정적이고 신뢰성 있게 동작하도록 돕습니다.

'특강' 카테고리의 다른 글

HTML/CSS/JAVASCRIPT- 윤도 강사님 강의(250401)(2/3)  (0) 2025.04.01
HTML/CSS/JAVASCRIPT- 윤도 강사님 강의(250401)(1/3)  (0) 2025.04.01
Database Erd 및 관계형 데이터베이스 모델링 쉽게 이해하기- 장동욱 강사님 강의(250325)  (0) 2025.03.25
Database - 파머 강사님 강의(250321)  (0) 2025.03.21
Database 설계 실습 정리 - 장동욱 강사님 강의  (0) 2025.03.20
'특강' 카테고리의 다른 글
  • HTML/CSS/JAVASCRIPT- 윤도 강사님 강의(250401)(2/3)
  • HTML/CSS/JAVASCRIPT- 윤도 강사님 강의(250401)(1/3)
  • Database Erd 및 관계형 데이터베이스 모델링 쉽게 이해하기- 장동욱 강사님 강의(250325)
  • Database - 파머 강사님 강의(250321)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (793) N
      • Python (32)
      • 프로젝트 (113) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    chinanightlife
    classaction
    global politics
    bts
    americanlaw
    life reflection
    btsdischarge
    btsreunion
    gpterror
    remittance
    btsjungkook
    trumpmuskclash
    basalcellcarcinoma
    youngprofessionals
    self-growth
    hotcoffeecase
    btscomeback
    urbantrends
    newpoliticalparty
    titaniumcase
    americaparty
    RM
    college reunions
    lawsuitculture
    travel ban
    뷔
    smartphonedurability
    chatgpterror
    livebroadcast
    homebartrend
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Database Amazon 검색 시스템 구축 - 장동욱 강사님 강의
상단으로

티스토리툴바