개발자의 logs
node.js - 블로그 구현 / 블로그 api 본문
참여중인 부트캠프에서 node.js 개인 과제로 블로그 api 구현 과제를 받았다.
아래는 과제 상세내용이다 !
Goal: "Node.js와 express로 로그인 기능이 없는 나만의 항해 블로그 백엔드 서버 만들기"
- 학습 과제를 끝내고 나면 할 수 있어요!
- Node.js를 이용해서 웹 프레임워크를 구성 할 수 있어요.
- mongoDB와 mongoose를 이용하여 원하는 데이터베이스를 만들고 활용할 수 있어요.
- express를 기반으로 CRUD(Create, Read, Update, Delete) 기능이 포함된 REST API를 만들 수 있어요.
- AWS에 express와 mongoDB 서비스를 배포할 수 있어요.
✅ 서비스 완성
- 전체 게시글 목록 조회 API
- 제목, 작성자명, 작성 날짜를 조회하기
- 작성 날짜 기준으로 내림차순 정렬하기
- 게시글 작성 API
- 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
- 게시글 조회 API
- 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
- 게시글 수정 API
- API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 수정되게 하기
- 게시글 삭제 API
- API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 삭제되게 하기
✅ AWS 배포
- EC2 배포
- Ubuntu EC2 를 구매한 뒤, 노드 포트(3000)를 80번 포트로 포워딩해서 포트 번호 없이도 서비스에 접속 가능하도록 하기
- → 수업시간에 배웠던 iptable을 사용하기
- mongoDB를 EC2 내부에 설치해서 연결하기
API 구현 코드 (CRUD) :
1. 전체 게시글 목록 조회 API
router.get("/lists", async (req, res) => {
const lists = await Lists.find();
res.json({
lists,
});
});
2. 게시글 작성 API
// 중복 게시물 검사 및 게시물 작성 (Validation)
router.post("/lists", async (req, res) => {
const { title, name, data, password } = req.body;
const lists = await Lists.find({ title });
var now = dayjs();
var time = now.format();
time = time.slice(0,16).split('T').join(' ')
if (lists.length) {
return res.status(400).json({ success: false, errorMessage: "이미 있는 데이터입니다." });
}
const createdLists = await Lists.create({ title, name, data, password, time });
res.json({ lists: createdLists });
});
3. 게시글 조회 API
// 타이틀로 목록 조회
router.get("/lists/:title", (req, res)=>{
const {title} = req.params;
res.json({
detail: lists.filter((item)=>{
return item.title === title;
})[0],
});
});
// 작성자명으로 조회
router.get("/lists/:name", (req, res)=>{
const {name} = req.params;
res.json({
detail: lists.filter((item)=>{
return item.name === name;
})[0],
});
});
// 작성 날짜로 조회
router.get("/lists/:data", (req, res)=>{
const {data} = req.params;
res.json({
detail: lists.filter((item)=>{
return item.data === data;
})[0],
});
});
4. 게시글 수정 API
// 게시글 수정 API
// - API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 수정되게 하기
router.put("/lists/:title", async (req, res) => {
const {title} = req.params;
const {data} = req.body;
const {password} = req.body;
// 없을 때
const [existsLists] = await Lists.find({title});
// console.log(existsLists.length); // 셀수가 없다.
if (!existsLists){
return res.status(400).json({ success: false, errorMessage: "해당 게시물이 없습니다."});
}
// 있을 때
if (Number(password) !== Number(existsLists.password)){
return res.status(400).json({ success: false, errorMessage: "비밀번호가 틀립니다."});
}
await Lists.updateOne({title}, {$set: {data}});
res.json({ success: true});
});
5. 게시글 삭제 API
// 게시글 삭제 API
// API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 삭제되게 하기
router.delete("/lists/:title", async (req, res) => {
const { title } = req.params;
const {data} = req.body;
const { password } = req.body;
const existsLists = await Lists.find({title});
if (existsLists.length){
if (Number(password) === Number(existsLists.password)){
await Lists.deleteOne({ title });
}else{
return res.status(400).json({ success: false, errorMessage: "비밀번호가 틀립니다."});
}
}
res.json({ success: true});
});
느낀점 :
그동안 node.js나 spring 같은 런타임 플랫폼을 사용해서 웹개발을 해본적이 없었다.
처음으로 node.js를 사용해보니 생각보다 편리한 부분이 많았다
npm를 이용해서 많은 라이브러리를 가져와 조금만 수정해서 쓸 수 있었던 점도 정말 편했다. 자바스크립트 오픈소스 생태계가 언어중에서 가장 크다는데 새삼 조금(?)은 실감됐다.
get, post, put, delete, patch 등 여러 메소드를 배워서 어느정도는 익숙해진 것 같고, 심화강의 수강해서 jwt나 다른 여러 기능도 탑재
한 완벽한 웹페이지를 만들어 보고 싶다 !!
또 알고리즘 공부도 꾸준히해서 개발하다가 막히는 부분이 없도록 해야겠다 ㅎㅎ
'개발 공부지식 > *개발 공부*' 카테고리의 다른 글
gRPC 프로토콜로 통신하는 서버 프로그램은 API 서버인가? (0) | 2022.06.02 |
---|---|
항해99 CS 스터디 - 슈퍼 컴퓨터부터 사물 인터넷까지 (0) | 2022.05.27 |
개발자의 마음가짐 - OverEngineering (0) | 2022.05.24 |
항해99 - 프로그래밍 기초주차 Node.js 과제 (0) | 2022.05.19 |
항해99 CS 스터디 - 50년 넘게 유지된 무어의 법칙 (0) | 2022.05.18 |
Comments