제46장. 종합 프로젝트
"작은 쇼핑몰 데이터베이스를 관리해 봅시다!"
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- 지금까지 학습한 SQL 명령을 실제 업무 흐름에 맞게 사용할 수 있다.
- 고객, 상품, 주문 데이터를 조회하고 관리할 수 있다.
- 여러 SQL을 순서대로 실행하여 하나의 업무를 완성할 수 있다.
- 실무에서 SQL이 어떻게 사용되는지 이해할 수 있다.
오늘은 여러분이 개발자입니다.
여러분은
온라인 쇼핑몰의 데이터베이스를 관리하는 개발자입니다.
오늘 해야 할 업무는 다음과 같습니다.
- 고객 정보를 조회한다.
- 새로운 고객을 등록한다.
- 상품 가격을 수정한다.
- 주문을 등록한다.
- 주문 내역을 조회한다.
- 잘못 입력된 데이터를 삭제한다.
- 모든 작업을 안전하게 저장한다.
우리가 지금까지 배운 SQL만으로
이 모든 업무를 처리할 수 있습니다.
프로젝트에서 사용할 테이블
이번 프로젝트에서는
다음 테이블을 사용한다고 가정합니다.
Customers
Products
Orders
OrderDetails
Categories
Suppliers
Employees
Shippers
지금까지 실습했던 데이터베이스와 같습니다.
STEP 1
고객 조회하기
먼저
서울에 사는 고객을 찾아봅시다.
SELECT *
FROM Customers
WHERE City='Seoul';
조회 결과를 확인한 후
필요한 고객이 있는지 확인합니다.
STEP 2
고객 추가하기
새로운 고객이 가입했습니다.
INSERT INTO Customers
(CustomerName, City, Country)
VALUES
('OpenAI Company','Seoul','Korea');
정상적으로 추가되었는지
다시 조회합니다.
SELECT *
FROM Customers
WHERE CustomerName='OpenAI Company';
STEP 3
상품 가격 수정하기
여름 할인 행사를 진행합니다.
모든 음료 가격을
10% 할인합니다.
UPDATE Products
SET Price = Price * 0.9
WHERE CategoryID = 1;
수정 후
다시 조회합니다.
SELECT ProductName, Price
FROM Products
WHERE CategoryID = 1;
STEP 4
주문 내역 조회하기
특정 고객이
무엇을 주문했는지 확인합니다.
SELECT Customers.CustomerName,
Products.ProductName,
OrderDetails.Quantity
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
INNER JOIN Products
ON Products.ProductID = OrderDetails.ProductID;
지금까지 배운 JOIN을
실제 업무에 활용한 예입니다.
STEP 5
VIEW 활용하기
자주 사용하는 조회라면
VIEW를 만들어 둡니다.
CREATE VIEW OrderList AS
SELECT Customers.CustomerName,
Products.ProductName,
OrderDetails.Quantity
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
INNER JOIN Products
ON Products.ProductID = OrderDetails.ProductID;
이제는
SELECT *
FROM OrderList;
만 실행하면 됩니다.
STEP 6
잘못 입력한 데이터 삭제하기
실수로 등록한 고객을 삭제합니다.
먼저 확인합니다.
SELECT *
FROM Customers
WHERE CustomerName='OpenAI Company';
확인 후
삭제합니다.
DELETE FROM Customers
WHERE CustomerName='OpenAI Company';
STEP 7
안전하게 저장하기
중요한 작업이라면
트랜잭션을 사용합니다.
START TRANSACTION;
UPDATE Products
SET Price = Price * 0.95
WHERE CategoryID = 2;
COMMIT;
오류가 발생했다면
ROLLBACK;
을 실행합니다.
프로젝트 전체 흐름
고객 조회
↓
고객 등록
↓
상품 수정
↓
주문 조회
↓
VIEW 생성
↓
데이터 삭제
↓
TRANSACTION
↓
COMMIT
이것이
실무에서 SQL이 사용되는 기본 흐름입니다.
실제 업무에서는?
실제 쇼핑몰에서는
하루에도 수천 번의 SQL이 실행됩니다.
예를 들어
- 회원 가입
- 로그인
- 상품 조회
- 장바구니 추가
- 주문
- 결제
- 배송 조회
모든 기능이
SQL과 연결되어 있습니다.
웹사이트에서 버튼을 한 번 누를 때마다
여러 개의 SQL이 실행되고 있는 것입니다.
많이 하는 실수
실수 ①
SELECT 결과를 확인하지 않고
UPDATE를 실행한다.
실수 ②
JOIN 조건을 잘못 작성한다.
실수 ③
DELETE 전에
삭제될 데이터를 확인하지 않는다.
실수 ④
COMMIT를 잊는다.
한눈에 정리
| 업무 | 사용한 SQL |
| 고객 조회 | SELECT |
| 고객 등록 | INSERT |
| 상품 수정 | UPDATE |
| 주문 조회 | INNER JOIN |
| 조회 저장 | VIEW |
| 데이터 삭제 | DELETE |
| 안전한 처리 | TRANSACTION |
이번 장 핵심 정리
✅ SQL은 각각의 명령을 따로 사용하는 것이 아니라 여러 명령을 연결하여 하나의 업무를 완성한다.
✅ 조회, 추가, 수정, 삭제는 대부분의 업무 시스템에서 반복적으로 사용된다.
✅ JOIN과 VIEW를 활용하면 복잡한 조회도 쉽게 처리할 수 있다.
✅ 중요한 작업은 TRANSACTION으로 안전하게 처리한다.
종합 실습 과제
다음 업무를 순서대로 수행해 보시오.
① 독일(Germany)에 있는 고객을 조회한다.
② 새로운 고객을 추가한다.
③ 특정 상품의 가격을 5% 인상한다.
④ 주문 내역을 JOIN으로 조회한다.
⑤ 조회 SQL을 VIEW로 저장한다.
⑥ 추가한 고객을 다시 삭제한다.
⑦ 마지막 작업을 TRANSACTION으로 처리한다.
도전 프로젝트
학교 도서관 관리 시스템을 위한 SQL을 작성해 보시오.
다음 기능을 구현해 보세요.
- 도서 조회
- 도서 등록
- 도서 수정
- 도서 삭제
- 대출 현황 조회(JOIN)
- 인기 도서 통계(GROUP BY)
- 자주 사용하는 조회(VIEW)
- 안전한 처리(TRANSACTION)
정답 예시
정답은 하나가 아닙니다.
학생이 지금까지 배운 SQL을 적절한 순서로 사용하여 업무를 완성했다면 올바른 답으로 인정할 수 있습니다.
💡 실무 이야기
지금까지 여러분은 SQL의 개별 문법을 배웠습니다. 하지만 실제 개발자는 문법 하나만 사용하는 경우보다 여러 SQL을 연결하여 하나의 업무를 완성하는 경우가 훨씬 많습니다.
예를 들어 고객이 쇼핑몰에서 상품을 주문하면, 고객 정보 조회(SELECT), 주문 등록(INSERT), 재고 차감(UPDATE), 주문 내역 조회(JOIN), 그리고 모든 작업을 안전하게 저장하는 TRANSACTION까지 하나의 흐름으로 이어집니다.
이번 프로젝트는 바로 이러한 실제 업무의 흐름을 경험하기 위한 연습입니다.
✨ 다음 장 예고
다음 장에서는 "SQL 성능을 생각하는 습관"을 배워 보겠습니다.
같은 결과를 얻는 SQL이라도 어떤 SQL은 1초 만에 끝나고, 어떤 SQL은 수십 초가 걸릴 수 있습니다. 지금까지 배운 INDEX, WHERE, JOIN 등을 다시 살펴보며 빠르고 효율적인 SQL을 작성하는 방법을 익혀 보겠습니다.
'프로그래밍 > MySQL' 카테고리의 다른 글
| 📊 [SQL] 제44장 TRANSACTION - 실수한 작업을 되돌릴 수 있을까요? (0) | 2026.07.31 |
|---|---|
| 📊 [SQL] 제43장 INDEX - 데이터를 더 빨리 찾을 수 있을까요? (0) | 2026.07.31 |
| 📊 [SQL] 제42장 VIEW - 복잡한 SELECT를 저장해 둘 수 있을까요? (0) | 2026.07.21 |
| 📊 [SQL] 제41장 DELETE(3) - DELETE와 TRUNCATE, DROP은 무엇이 다를까요? (0) | 2026.07.21 |
| 📊 [SQL] 제40장 DELETE(2) - 여러 개의 데이터를 한 번에 삭제할 수 있을까요? (0) | 2026.07.15 |