프론트엔드에서 데이터를 다루는 법부터 시작해볼게요:
// React에서 게시글 목록 관리하기
const [posts, setPosts] = useState([
{
id: 1,
title: "첫 번째 글",
content: "안녕하세요"
},
{
id: 2,
title: "두 번째 글",
content: "반갑습니다"
}
]);
이런 문제를 해결하기 위해 데이터베이스가 필요합니다!
엑셀 스프레드시트를 생각해보세요:
// MySQL 테이블 구조
const posts = {
// 이 구조에서 벗어날 수 없어요!
columns: {
id: '번호',
title: '제목',
content: '내용',
author: '작성자'
},
// 모든 데이터는 위 구조를 따라야 해요
rows: [
[1, '안녕하세요', '내용입니다', '김철수'],
[2, '반갑습니다', '두번째 글', '이영희']
]
}
JavaScript 객체와 매우 비슷해요:
// MongoDB 컬렉션 구조
const posts = [
{
_id: 1,
title: "안녕하세요",
content: "첫 번째 글입니다",
// 여기에 원하는 필드를 자유롭게 추가할 수 있어요
tags: ["인사", "소개"],
comments: []
},
{
_id: 2,
title: "반갑습니다",
content: "두 번째 글입니다",
// 다른 문서와 다른 구조를 가질 수 있어요
author: {
name: "이영희",
email: "lee@test.com"
}
}
];
// 프론트엔드에서 API 호출
const getPosts = async () => {
// 서버에서는 SQL 쿼리로 데이터를 가져옴
// SELECT * FROM posts WHERE author = '김철수';
const response = await axios.get('/api/posts');
setPosts(response.data);
};
// 프론트엔드에서 API 호출
const getPosts = async () => {
// 서버에서는 MongoDB 쿼리로 데이터를 가져옴
// Post.find({ author: '김철수' });
const response = await axios.get('/api/posts');
setPosts(response.data);
};
// MySQL에서 받은 데이터
const mysqlData = [
{
id: 1,
title: "제목",
content: "내용",
// 정해진 필드만 옴
}
];
// MongoDB에서 받은 데이터
const mongoData = [
{
_id: "507f1f77bcf86cd799439011", // MongoDB의 특별한 ID 형식
title: "제목",
content: "내용",
// 추가 필드들이 있을 수 있음
comments: [],
tags: []
}
];
데이터 구조가 명확할 때
데이터 간의 관계가 복잡할 때
데이터 구조가 자주 바뀔 때
빠른 개발이 필요할 때
MongoDB가 좋아요:
const blogPosts = [
{
title: "일반 글",
content: "텍스트만 있는 글"
},
{
title: "사진 글",
content: "text",
images: ["image1.jpg", "image2.jpg"],
imageLayout: "gallery"
},
{
title: "비디오 글",
content: "text",
video: "video.mp4",
thumbnail: "thumb.jpg"
}
];
MySQL이 좋아요:
// 주문 정보는 항상 같은 구조를 가져요
const orders = {
columns: {
id: '주문번호',
userId: '사용자ID',
productId: '상품ID',
quantity: '수량',
price: '가격',
status: '주문상태'
}
};
MySQL은 엑셀처럼 정해진 형식이 있어요
MongoDB는 JavaScript 객체처럼 자유로워요
프론트엔드 개발자 입장에서는