프론트엔드 개발자를 위한 데이터베이스 초보자 가이드
1. 우리가 아는 것에서 시작하기
프론트엔드에서 데이터를 다루는 법부터 시작해볼게요:
1-1. React에서의 데이터 저장
// React에서 게시글 목록 관리하기
const [posts, setPosts] = useState([
  {
    id: 1,
    title: "첫 번째 글",
    content: "안녕하세요"
  },
  {
    id: 2,
    title: "두 번째 글",
    content: "반갑습니다"
  }
]);
1-2. 근데 여기에는 문제가 있어요
- 새로고침하면 데이터가 사라져요
 - 다른 사용자와 데이터를 공유할 수 없어요
 - 데이터가 많아지면 관리가 어려워요
 
이런 문제를 해결하기 위해 데이터베이스가 필요합니다!
2. 데이터베이스의 두 가지 타입
2-1. MySQL (엄격한 규칙의 데이터베이스)
엑셀 스프레드시트를 생각해보세요:
- 모든 열(column)이 미리 정의되어 있어요
 - 각 행(row)은 같은 구조를 가져야 해요
 
// MySQL 테이블 구조
const posts = {
  // 이 구조에서 벗어날 수 없어요!
  columns: {
    id: '번호',
    title: '제목',
    content: '내용',
    author: '작성자'
  },
  // 모든 데이터는 위 구조를 따라야 해요
  rows: [
    [1, '안녕하세요', '내용입니다', '김철수'],
    [2, '반갑습니다', '두번째 글', '이영희']
  ]
}
2-2. MongoDB (자유로운 규칙의 데이터베이스) : nosql
JavaScript 객체와 매우 비슷해요:
- 원하는 대로 데이터 구조를 만들 수 있어요
 - 각 문서(document)마다 다른 형태를 가질 수 있어요
 
// MongoDB 컬렉션 구조
const posts = [
  {
    _id: 1,
    title: "안녕하세요",
    content: "첫 번째 글입니다",
    // 여기에 원하는 필드를 자유롭게 추가할 수 있어요
    tags: ["인사", "소개"],
    comments: []
  },
  {
    _id: 2,
    title: "반갑습니다",
    content: "두 번째 글입니다",
    // 다른 문서와 다른 구조를 가질 수 있어요
    author: {
      name: "이영희",
      email: "lee@test.com"
    }
  }
];
3. 실제 프론트엔드 개발에서는 어떻게 쓰나요?
3-1. MySQL을 사용할 때
// 프론트엔드에서 API 호출
const getPosts = async () => {
  // 서버에서는 SQL 쿼리로 데이터를 가져옴
  // SELECT * FROM posts WHERE author = '김철수';
  const response = await axios.get('/api/posts');
  setPosts(response.data);
};
3-2. MongoDB를 사용할 때
// 프론트엔드에서 API 호출
const getPosts = async () => {
  // 서버에서는 MongoDB 쿼리로 데이터를 가져옴
  // Post.find({ author: '김철수' });
  const response = await axios.get('/api/posts');
  setPosts(response.data);
};
3-3. 프론트엔드 입장에서는...
- API 호출하는 방식은 동일해요
 - 받는 데이터 형태가 조금 달라요
// MySQL에서 받은 데이터 const mysqlData = [ { id: 1, title: "제목", content: "내용", // 정해진 필드만 옴 } ]; 
// MongoDB에서 받은 데이터
const mongoData = [
  {
    _id: "507f1f77bcf86cd799439011", // MongoDB의 특별한 ID 형식
    title: "제목",
    content: "내용",
    // 추가 필드들이 있을 수 있음
    comments: [],
    tags: []
  }
];
## 4. 어떤 걸 선택해야 할까요?
### 4-1. MySQL이 좋을 때
1. 데이터 구조가 명확할 때
   - 예: 회원가입 정보 (이름, 이메일, 비밀번호...)
   - 예: 주문 정보 (상품, 수량, 가격...)
2. 데이터 간의 관계가 복잡할 때
   - 예: 쇼핑몰 (주문-상품-사용자-리뷰...)
### 4-2. MongoDB가 좋을 때
1. 데이터 구조가 자주 바뀔 때
   - 예: 블로그 포스트 (글마다 다른 형식)
   - 예: SNS 게시물 (사진, 동영상, 링크 등 다양한 형식)
2. 빠른 개발이 필요할 때
   - JavaScript 객체처럼 자유롭게 데이터 저장 가능
   - 스키마 변경이 쉬움
## 5. 실제 프로젝트 예시
### 5-1. 블로그 프로젝트
MongoDB가 좋아요:
```javascript
const blogPosts = [
  {
    title: "일반 글",
    content: "텍스트만 있는 글"
  },
  {
    title: "사진 글",
    content: "text",
    images: ["image1.jpg", "image2.jpg"],
    imageLayout: "gallery"
  },
  {
    title: "비디오 글",
    content: "text",
    video: "video.mp4",
    thumbnail: "thumb.jpg"
  }
];5-2. 쇼핑몰 프로젝트
MySQL이 좋아요:
// 주문 정보는 항상 같은 구조를 가져요
const orders = {
  columns: {
    id: '주문번호',
    userId: '사용자ID',
    productId: '상품ID',
    quantity: '수량',
    price: '가격',
    status: '주문상태'
  }
};
정리
MySQL은 엑셀처럼 정해진 형식이 있어요
- 데이터가 정형화되어 있을 때 좋아요
 - 은행, 쇼핑몰 같은 서비스에 적합해요
 
MongoDB는 JavaScript 객체처럼 자유로워요
- 데이터 구조가 유연해야 할 때 좋아요
 - 블로그, SNS 같은 서비스에 적합해요
 
프론트엔드 개발자 입장에서는
- API 호출 방식은 동일해요
 - 받는 데이터 형식만 조금 달라요
 - MongoDB가 JavaScript와 비슷해서 더 친숙할 수 있어요
 
'Front > Node.js' 카테고리의 다른 글
| Next.js와 MongoDB 연동하여 CRUD API 만들기 (0) | 2024.12.26 | 
|---|---|
| 프론트엔드 개발자를 위한 MongoDB & Mongoose 가이드 (0) | 2024.12.26 | 
| Node.js 모듈과 객체 (0) | 2024.12.25 | 
| 자바스크립트 비동기 처리 (2) | 2024.12.25 | 
| next.js로 CRUD API 서버 만들기 (1) | 2024.12.09 |