Zeno ZENO
Database / DB 기초 · 조회 3 · 좋아요 0

13. 데이터베이스 최종 실습: 미니 쇼핑몰 DB 설계부터 복합 쿼리까지

기초부터 심화까지 배운 모든 데이터베이스 개념을 총동원하여 하나의 미니 쇼핑몰 시스템을 설계하고 복합 SQL 쿼리를 작성하는 최종 통합 실습입니다.

1. 통합 실습(쇼핑몰 데이터베이스 구축)의 정의

통합 실습은 현실 세계의 서비스 요구사항을 바탕으로 데이터베이스 설계(모델링)부터 테이블 생성(DDL), 데이터 입력 및 복합 쿼리 조회(DML)까지 데이터베이스 구축의 전체 주기를 직접 수행하는 종합 연습입니다.

단편적인 명령어 암기를 넘어, 실제 개발자가 서비스를 처음부터 만들 때 거치는 데이터베이스 작업 흐름을 그대로 경험하는 과정입니다.


2. 통합 실습 프로젝트가 필요한 이유

개별 명령어(CREATE, SELECT 등)를 아는 것과, 이를 조합하여 하나의 제대로 작동하는 프로그램을 만드는 것은 완전히 다른 영역입니다.

실제 개발에서 해결하는 문제

  • 실무 응용력 제고: 기획자가 요구하는 "지난달 가장 많이 팔린 상품 5개를 뽑아주세요" 같은 복잡한 비즈니스 문제를 해결하기 위해 어떤 테이블들을 어떻게 조인하고 그룹화해야 하는지 스스로 판단하는 힘을 길러줍니다.

  • 구조적 에러 예방: 테이블 간의 인과 관계와 기본키·외래키의 연결 규칙을 실전 코드로 다루며 데이터 설계 오류를 잡아내는 안목을 갖추게 합니다.


3. 반드시 알아야 할 핵심 개념

  • 요구사항 정의서: 만들고자 하는 서비스에 어떤 데이터들이 어떤 규칙으로 저장되어야 하는지 글로 명확하게 정리해 놓은 개발 기획서입니다.

  • ERD (Entity Relationship Diagram, 개체-관계 다이어그램): 테이블의 구조와 테이블 간의 기본키·외래키 연결 관계를 시각적인 표와 선으로 그려낸 데이터베이스 설계도입니다.

  • 참조 제약조건 순서: 테이블을 만들거나 데이터를 넣을 때, 부모 테이블(참조 대상)이 자식 테이블(참조하는 쪽)보다 무조건 먼저 처리되어야 하는 물리적 규칙입니다.


4. 함께 알아야 하는 주변 기초 개념

  • 더미 데이터 (Dummy Data): 시스템이 정상적으로 작동하는지, 통계 쿼리가 정확하게 추출되는지 테스트하기 위해 의도적으로 임의 가작하여 채워 넣는 가짜 테스트용 데이터입니다.

  • 비즈니스 로직 (Business Logic): 프로그램이 회원, 상품, 주문 등 현실의 사업 규칙에 맞춰 데이터를 가공하고 처리하는 핵심 연산 흐름을 뜻합니다.


5. 쇼핑몰 DB 구축 실무 흐름

개발자가 서비스를 설계하고 최종 데이터를 뽑아내기까지의 4단계 실행 순서입니다.

  1. 1단계 (요구사항 분석): "회원은 이름이 필요하다", "주문은 어떤 회원이 어떤 상품을 샀는지 기록해야 한다" 등의 규칙을 정리합니다.

  2. 2단계 (테이블 구축): 정규화 규칙에 맞춰 회원(users), 상품(products), 주문(orders) 테이블을 CREATE TABLE문으로 만듭니다.

  3. 3단계 (테스트 데이터 적재): 관계를 고려하여 부모 테이블부터 자식 테이블 순으로 INSERT문을 실행해 데이터를 채웁니다.

  4. 4단계 (비즈니스 쿼리 해결): 조인(JOIN)과 그룹화(GROUP BY)를 사용해 원하는 통계 데이터를 SELECT문으로 적절히 추출합니다.


6. 쇼핑몰 통합 실습 SQL 코드 예시

회원, 상품, 주문 테이블을 만들고 데이터를 넣은 뒤, 복합 통계를 조회하는 일련의 종합 스크립트 코드입니다.

-- [1단계] 테이블 생성 (부모 테이블 먼저 생성)
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(30) NOT NULL
);

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(50) NOT NULL,
    price INT NOT NULL
);

-- 자식 테이블 생성 (외래키 포함)
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    product_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

-- [2단계] 데이터 입력 (부모 데이터 먼저 입력)
INSERT INTO users VALUES (1, '홍길동'), (2, '이영희');
INSERT INTO products VALUES (10, '마우스', 20000), (20, '키보드', 50000);

-- 자식 데이터 입력
INSERT INTO orders VALUES (101, 1, 10, '2026-06-01'), (102, 1, 20, '2026-06-02'), (103, 2, 10, '2026-06-02');

-- [3단계] 복합 통계 조회 (회원별 총 구매 금액 조회)
SELECT u.name, SUM(p.price) AS total_payment
FROM orders AS o
INNER JOIN users AS u ON o.user_id = u.user_id
INNER JOIN products AS p ON o.product_id = p.product_id
GROUP BY u.name;

7. 예시 코드 상세 설명

  • FOREIGN KEY (user_id) REFERENCES users(user_id): orders 테이블의 user_id 칸에는 오직 users 테이블에 존재하는 회원 번호만 들어올 수 있도록 외래키 연결 통로를 지정한 것입니다.

  • INNER JOIN 2번 실행: orders(주문 정보)를 중심으로 users(회원 이름)와 products(상품 가격)를 3단으로 이어붙여 "누가 어떤 가격의 제품을 샀는지"를 알 수 있는 거대한 가상 표를 만듭니다.

  • GROUP BY u.name / SUM(p.price): 3단 합체된 테이블을 회원 이름별로 묶어 그룹을 만든 뒤, 각 회원이 구매한 상품 가격들을 전부 더해(SUM) total_payment라는 항목으로 요약 출력합니다.


8. 초보자가 프로젝트 중 가장 많이 하는 치명적 실수

외래키 관계를 무시한 처리 순서 오류

테이블을 생성하거나 데이터를 입력할 때 가장 흔하게 발생하는 에러는 부모와 자식의 순서를 뒤바꾸는 것입니다.

  • 생성/입력 오류: users 테이블에 홍길동(id: 1)을 만들지도 않은 상태에서, orders 테이블에 user_id = 1이 포함된 주문 데이터를 먼저 넣으려고 하면 외래키 참조 무결성 에러가 발생합니다. 반드시 부모(회원, 상품) 데이터를 먼저 넣고 자식(주문) 데이터를 넣어야 합니다.

  • 삭제 오류: 반대로 테이블을 지울 때는 자식 테이블(orders)을 먼저 지워야 부모 테이블(users)을 무사히 지울 수 있습니다.


9. 시리즈 최종 마무리 요약

이것으로 데이터베이스 기초 시리즈를 마칩니다. 데이터베이스는 데이터를 격자 표 형태인 테이블에 격리하여 정규화 규칙에 맞게 저장하고, 기본키와 외래키라는 관계를 통해 연결합니다. 안전한 거래 단위인 트랜잭션과 속도를 높여주는 인덱스를 기반으로 작동하며, 최종적으로는 JOIN과 GROUP BY 같은 SQL 대화 언어를 활용해 대량의 데이터 속에서 실무에 필요한 정확한 황금 정보를 가공하고 추출해 냅니다.


10. 핵심 용어 정리

ERD = 테이블의 구조와 테이블 간의 상호 연결 관계를 시각적으로 나타낸 데이터베이스 설계도

더미 데이터 = 시스템의 정상 작동 및 통계 쿼리 검증을 위해 임의로 채워 넣는 테스트용 가짜 데이터

비즈니스 로직 = 기획상의 사업 규칙에 따라 데이터를 처리하고 연산하는 소프트웨어 내부의 핵심 흐름

복합 쿼리 = JOIN, GROUP BY, 집계 함수 등 여러 개의 SQL 명령 기술을 복합적으로 조합하여 작성한 고난도 조회문

데이터베이스 모델링 = 현실 세계의 비즈니스 데이터를 규칙에 맞춰 데이터베이스 구조로 추상화하여 설계하는 기법

AD

제휴 광고

일부 링크는 제휴 링크이며, 구매 또는 가입 시 일정 수수료를 받을 수 있습니다.

AD

'DB 기초' 카테고리의 다른 글

전체보기