김데이의 개발공부

[ TIL ] Day 18 - 💡드디어 데이터 베이스와 ORM / MongoDB & Mongoose / 서비스 배포하기! ✨🖥️🌐 본문

코드잇 Node.js(BE) 부트 캠프/TIL (Today I Learn) 📑

[ TIL ] Day 18 - 💡드디어 데이터 베이스와 ORM / MongoDB & Mongoose / 서비스 배포하기! ✨🖥️🌐

theday365 2025. 10. 21. 18:56
반응형

🗓️ 수업 일자 : 2025.달.날짜

✨ 오늘의 수업 평가 :  [ HARD ] 지식 폭풍에 휩쓸렸다 🤪🌪️📖 &  [ PROJECT ]  실습 러버 👩‍💻🛠️ 실습 꿀잼 🍯😝

 

📝  오늘 배운 내용  
- 데이터베이스와 ORM

- MongoDB & Mongoose 환경 설정

- MongoDB & Mongoose CRUD 작업하기

- 서비스 배포하기

 


 

1. 데이터베이스와 ORM 

데이터베이스

- 데이터를 저장 해 두는 공간

- 데이터를 사용하려면 쿼리 언어를 사용해야함 (쿼리 언어는 문법이 조금 어려워서 배우는데 시간이 걸림)

 

ORM = Object-Relational Mapping

- 객체 (Object)와 데이터베이스 테이블(Table)을 매핑(Mapping)시켜놓은 언어

- 즉, 프로그래밍 언어를 사용해서 데이터베이스의 데이터 조작을 쉽게 할 수있게 해주는 언어

- 쿼리 언어를 편하게 만들어 놓은 것

 

+ 추가 SQL(Structured Query Language)

: 구조적 지리 언어, 관계형 데이터베이스에서 데이터를 조회,추가,수정,삭제 하는데 사용하는 언어

 

 

 

2. MongoDB & Mongoose 환경 설정

MongoDB 

- 대표적인 NoSQL DB

- Document 기반으로 만들어 졌음

- DataBase > Collection > Document

   • DataBase : 제일 큰 단위, 전체를 관리하는 컨테이너 DB

   • Collection : 프로젝트 혹은 폴더같이 비슷한 종류를  하나로 묶어둔 단위 DB

   • Document : 실제 데이터가 저장되는 최소 DB, JSON 기반으로 구성 됨

 

- 사용 방법

    1) 로컬에 MongoDB 소프트웨어를 컴퓨터에 직접 설치

    2) MongoDB Atlas 클라우드 서비스를 이용하여 데이터베이스를 설치하지 않고 사용 가능

        MongoDB Atlas 클라우드 서비스 바로가기 : https://www.mongodb.com/cloud/atlas/register

 

MongoDB Atlas

Get started free. No credit card required.

www.mongodb.com

Welcome to MongoDB Atlas
Welcome to MongoDB Atlas

클라우드 MongoDB 만들기 

  1. 우측 메뉴에서 Clusters 눌러서 들어간 페이지에서 [Browse Collections] 선택
    접속한 뒤 Clusters 페이지 내의 "Browse Collections" 클릭
    접속한 뒤 Clusters 페이지 내의 "Browse Collections" 클릭


  2. 초기 생성 시 : Add My Own Data 버튼 클릭
    이미 생성 한 경우 : + Create Database 버튼 클릭

  3. 아래의 창이 나오면 Database name / Collection name을 입력하고 [Create] 을 눌러 새로운 DB 생성
    Create Database 팝업창에 정보 입력 후 Create 버튼 클릭
    Create Database 팝업창에 정보 입력 후 Create 버튼 클릭


  4. DB 사용을 위하여 연결 코드를 받기위해 이전 화면인 Clusters 페이지로 이동
    다시 Clusters 페이지로 접근하여 "Connect" 클릭
    다시 Clusters 페이지로 접근하여 "Connect" 클릭


  5. Connect 누르면 아래와 같이 팝업창이 나오는데, 중간 아랫쪽에 있는 코드를 이용하여 DB 연결


 

Mongoose

- MongoDB와 쉽게 통신할 수 있게 하는 툴,기술

- 터미널에서 명령어를 사용하여 설치하여 사용 : npm i mongoose@"<8.0.0" (버전 설정하여 설치)

- 자바스크립트 문법으로 MongoDB를 사용 가능

- 사용법 관련 링크 : https://mongoosejs.com/

 

Mongoose ODM v8.19.1

Let's face it, writing MongoDB validation, casting and business logic boilerplate is a drag. That's why we wrote Mongoose. const mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1:27017/test'); const Cat = mongoose.model('Cat', { name:

mongoosejs.com

 

 

Mongoose의 핵심 요소 Schema / Model / Seeding

- Schema : 데이터의 타입, 길이, 기본값등 데이터의 구조 또는 형태를 설정하는 것. 별도의 파일에 작성한 뒤 import로 불러와 사용

- Model : Schema를 기반으로 만들어진 객체로, CRUD 작업을 수행 할 수 있음. 일종의 조작 도구.

- Seeding : 초기에 DB에 기본이 되는 데이터를 삽입하는 것. 별도의 파일을 만든 뒤 터미널 명령어(node seed.js / npm run seed 등)를 사용해 데이터 등록.

 

 

 

3. MongoDB & Mongoose CRUD 작업하기

0) 기본 셋팅 

- Mongoose는 비동기로 작동하기 때문에 async & await 문법을 활용하여 데이터를 받아온다

- 데이터 서버와 연결하기 위하여 최상단에 await mongoose.connect(DATABASE_URL); 을 작성한다

 

 

1) Create ( = POST ) 

app.post('/items', async (req, res) => {
  const data = req.body;
  const newItem = await Item.create(data);

  res.status(201).send(newItem);
  // 응답이 완료되면 "201"넘버와 함께 새로 생성한 item 정보를 표기
});

 

2) Read ( = GET )

app.get('/items', async (req, res) => {
  const count = Number(req.query.count) || 0;

  const items = await Item.find().limit(count);
  // item을 받아올 때 count 숫자 개수 만큼 받아오기

  res.send(items);
});

 

3) Update ( = PATCH )

app.patch('/items/:id', async (req, res) => {
  const item = await Item.findById(req.params.id);

  if (item) {
    // 전달받은 id를 이용하여 item을 찾은 경우
    const { body } = req;
    Object.keys(body).forEach((key) => {
      item[key] = body[key];
    });
    await item.save();
    res.send(item);
    
  } else {
    // 에러가 발생한 경우 응답코드 404와 함께 메세지 출력
    res.status(404).send({ message: 'Cannot find given id' });
  }
});

 

4) Delete ( = DELETE ) 

app.delete('/items/:id', async (req, res) => {
  const item = await Item.findByIdAndDelete(req.params.id);
  // .findByIdAndDelete() : 전달받은 id를 사용해 item을 찾은 뒤 바로 삭제
  
  if (item) {
    res.sendStatus(200);
  } else {
    res.status(404).send({ message: 'Cannot find given id' });
  }
});

 

 

 

4. 서비스 배포하기

배포란?

우리 컴퓨터에서 작업한 내용(=local workspace)을, 클라우드 서버등에 연결한 뒤 365일 24시간 내내 언제든 누구든 접속이 가능하도록 특정 서비스를 제공하는 것을 의미한다

 

환경변수란?  

프로그램이 실행되는 환경과 관련있는 변수들을 의미합니다. 

예시1) 로컬 작업 시 .env 파일에 작성 

  1. 로컬 작업 공간에서 터미널을 이용해 Dotenv 다운로드 : npm install dotenv

  2. ".env" 라는 파일을 생성 후 DB URL과 PORT 번호 등을 작성 

.env 파일을 생성 후 해당 파일안에 &quot;환경변수&quot; 작성
.env 파일을 생성 후 해당 파일안에 "환경변수" 작성

 

예시2 ) render.com 에서 새로운 웹서비스 만들 때 작성하는 Environment Variables 영역

환경변수 명칭과 값을 입력하면 값의 경우 바로 암호화 처리 됨, 해당 영역을 선택하면 보임
환경변수 명칭과 값을 입력하면 값의 경우 바로 암호화 처리 됨, 해당 영역을 선택하면 보임

 

CORS(Cross-Origin Resource Sharing) 란?

교차 출처 리소스 공유, 웹 브라우저의 기본 정책이 처음 리소스를 받아 온 곳에서만 추가 리소스를 받아올 수 있어서(SOP, Same-Origin Policy), 서버와 클라이언트의 주소가 다르면 리소스를 받아오는데 문제가 생깁니다. 이때 설정을 해 주는것이 바로 "교차 출처 리소스 공유, CORS"입니다. (자바스크립트 코드로는 리퀘스트를 자요롭게 보낼 수 있기 때문에 이와같은 보안 정책이 생겨남)

 

 

실제 배포 진행 with render.com

  1. 작업한 내용을 Git에 신규 repository로 만들어 작업 내용 업로드
    (.gitignore 파일을 생성 후 [ node_modules(디렉토리), .env, .http ] 같이 불필요한 파일은 제외 후 push)
  2. 아래의 배포 사이트 render.com에 접속하여 가입 후 방금 만든 repository 연동
    배포 사이트 Render 주소 : https://render.com/  
    - 1. 상단의 [ New → Web Service ] 를 접속 
    - 2. Git Provider  오른쪽 버튼으로 계정 선택 후 필요한 레포지토리 선택, 없을 경우 [ configure in GitHub ]로 불러오기
          또는 Public Git Repository → repo clone url 붙여넣기 하면 불러올 수 있음 
    Git Provider 메뉴를 사용하여 원하는 레포지토리 찾아보기
    Git Provider 메뉴를 사용하여 원하는 레포지토리 찾아보기
    - 3. 나머지 정보는 알아서 잘 들어가지만 일부 정보는 알맞게 변경 해야 함 
          Branch : 내가 작업한 Git branch 선
          Start Command : 시작하는 파일 정보. 보통 app.js 또는 index.js 
          Environment Variables : 환경 변수 지정 영역. 해당 부분에 DB URL, Node.js version (내 로컬 버전) 등이 필요함
    new web service - Branch 정보 셋팅
    new web service - Start Command 정보 셋팅
    new web service - Environment Variables 정보 셋팅

    - 4. 맨 하단의 [Deploy Web Service] 눌러서 최종 배포 시작

  3. 배포 결과 확인한 뒤 에러 수정하고, 완료 되면 나오는 웹사이트 주소를 사용하여 배포 한 내용 검토하기 
    배포 주소 : https://codeit-nodejs-6th-express.onrender.com/tasks?sort=%22oldest%22&count=100

배포 완료 된 화면, 서버 창 맨 마지막에 사용할 수 있는 URL 주소 나옴
배포 완료 된 화면, 서버 창 맨 마지막에 사용할 수 있는 URL 주소 나옴
최종 배포 화면 with render.com
✨🖥️🌐 최종 배포 화면 with render.com ✨🖥️🌐

 

 

++ 진짜 궁금했던 MongoDB 와 Mongoose 라서 더욱 값진 수업이었다.

다만 NoSQL 모델이다보니 현업에서는 많이 사용되지 않아 다음 수업부터는 다른 DB를 적용하여 배운다고 한다!

그래도 이렇게나마 한번이라도 사용해 볼 수 있었다는것에 의미를 둔다 👍💡


 

📃 내일은 뭘 배울까 🤔

- 관계형 데이터베이스 연동하기

반응형