- 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 파일을 생성 후 해당 파일안에 "환경변수" 작성
예시2 ) render.com 에서 새로운 웹서비스 만들 때 작성하는 Environment Variables 영역
환경변수 명칭과 값을 입력하면 값의 경우 바로 암호화 처리 됨, 해당 영역을 선택하면 보임
CORS(Cross-Origin Resource Sharing) 란?
교차 출처 리소스 공유, 웹 브라우저의 기본 정책이 처음 리소스를 받아 온 곳에서만 추가 리소스를 받아올 수 있어서(SOP, Same-Origin Policy), 서버와 클라이언트의 주소가 다르면 리소스를 받아오는데 문제가 생깁니다. 이때 설정을 해 주는것이 바로 "교차 출처 리소스 공유, CORS"입니다. (자바스크립트 코드로는 리퀘스트를 자요롭게 보낼 수 있기 때문에 이와같은 보안 정책이 생겨남)
실제 배포 진행 with render.com
작업한 내용을 Git에 신규 repository로 만들어 작업 내용 업로드 (.gitignore 파일을 생성 후 [ node_modules(디렉토리), .env, .http ] 같이 불필요한 파일은 제외 후 push)
아래의 배포 사이트 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 메뉴를 사용하여 원하는 레포지토리 찾아보기- 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] 눌러서 최종 배포 시작