데브코스 TIL - Day 18
23년 12월 12일 강의를 들은 내용과 추가로 더 학습한 내용을 기록한 글입니다.
실습 3 - 전체 조회 이어서 하기
1
2
3
4
app.get("/youtubers", (req, res) => {
console.log(db.values());
res.json(db);
});
결과
1
2
{
}
values() 콘솔에 찍어보기
1
2
3
4
app.get("/youtubers", (req, res) => {
console.log(db.values());
res.json(db);
});
1
2
3
4
[Map Iterator] {
{ channelTitle: '십오야', subscriber: 5930000, videoNum: 993 },
{ channelTitle: '뜬뜬', subscriber: 1510000, videoNum: 168 }
}
forEach로 하나씩 꺼내서 저장하기
1
2
3
let youtubers = {};
db.forEach((values, key) => (youtubers[key] = values));
console.log(youtubers);
1
2
3
4
{
'1': { channelTitle: '십오야', subscriber: 5930000, videoNum: 993 },
'2': { channelTitle: '뜬뜬', subscriber: 1510000, videoNum: 168 }
}
실습 4 - 유튜버 삭제하기
API 설계
4. 개별 유튜버 삭제 (DELETE)
- /yotubers/:id
- req: params.id
- res: “channelTitle님, 탈퇴에 성공했습니다.”
5. 전체 유튜버 삭제 (DELETE)
- /yotubers
- req: X
- res: “유튜버가 전체 삭제되었습니다.”
실습 4 - 개별 유튜버 삭제하기
1
2
3
4
5
6
7
8
9
10
11
app.delete("/youtubers/:id", (req, res) => {
const { id } = req.params;
const youtuber = db.get(Number(id));
if (!youtuber) {
res.send({ message: "찾을 수 없는 유튜버입니다. 탈퇴에 실패했습니다." });
} else {
db.delete(Number(id));
res.send({ message: `${youtuber.channelTitle}님, 탈퇴에 성공했습니다.` });
}
});
결과
삭제하기 삭제하고 개별 조회해보기 없는 아이디 탈퇴하려고 시도해보기
실습 5 - 전체 유튜버 삭제하기
1
2
3
4
5
6
7
8
app.delete("/youtubers", (req, res) => {
if (db.size > 0) {
db.clear();
res.send({ message: "유튜버가 전체 삭제되었습니다." });
} else {
res.send({ message: "삭제할 유튜버가 없습니다." });
}
});
결과
전체 삭제하기 전체 조회해보기 만약, 삭제할 유튜버가 없다면?
message 변수 만들어서 코드 줄여보기
1
2
3
4
5
6
7
8
9
10
app.delete("/youtubers", (req, res) => {
let message = "";
if (db.size > 0) {
db.clear();
message = "유튜버가 전체 삭제되었습니다.";
} else {
message = "삭제할 유튜버가 없습니다.";
}
res.send({ message });
});
실습 6 - 개별 유튜버 수정
API 설계
6. 개별 유튜버 수정 (PUT)
- youtubers/:id
- req: params.id, body(channelTitle)
- res: ‘(이전)channelTitle님, 채널명이 (새로운)channelTitle으로 변경되었습니다’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
app.put("/youtubers/:id", (req, res) => {
let message = "";
const { id } = req.params;
const { channelTitle: newChannelTitle } = req.body;
const youtuber = db.get(Number(id));
if (!youtuber) {
message = `일치하는 유튜버가 없습니다.id = ${id}`;
} else {
db.set(Number(id), { ...youtuber, channelTitle: newChannelTitle });
message = `${youtuber.channelTitle}님, 채널명이 ${newChannelTitle}으로 변경되었습니다`;
}
res.send({ message });
});
결과
수정해보기 개별 유튜버 조회해보기 없는 아이디 수정요청해보기
리-팩토링
사전적 정의? ‘결과의 변경 없이 코드의 구조를 재조정함’을 뜻한다.
코드의 기능은 유지하면서 클래스, 함수, 필드처럼 여러 프로그래밍 요소를 변경하여 더 나은 코드로 개선하는 과정 또는 그러한 기술을 말합니다.
리-팩토링의 목적은?
- 이해하기 쉽게
- 성능 향상
- 프로그램의 안정성을 높이기 위해서
즉, 가독성을 높이고 유지보수를 편하게 하기 위해서 리팩토링을 한다.
그러면 리팩토링 === 클린코드?
정답은 NO!
클린코드 : 가독성이 높은 코드 (코드가 잘 읽히는지, 지저분하지 않고 정리된 코드인지?) 리팩토링 : 클린 코드를 포한한 유지 보수를 위한 코드 개선
→ 리팩토링이 더 큰 의미
리팩토링 해야할 때는 언제?
- 에러 또는 문제점이 여러번 발견되었을 때 해야한다
- 리팩토링을 하면서, 에러(문제점)을 발견할 수 있다
- 기능을 추가하기 전에 해야한다
- 코드리뷰 할 때 해야한다
리팩토링을 하면 안될 때 “배포 운영 직전!”
왜?
배포 운영 직전 리팩토링을 하게 되면 테스트를 처음부터 다시 해야하기때문에 절대로 배포 운영 직전에는 리팩토링을 하면 안된다!
HTTP 상태 코드
HTTP 응답 상태 코드
- 1xx (정보): 요청을 받았으며 프로세스를 계속한다
- 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
- 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
- 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다
- mdn http status
- restfulapi 홈페이지
This post is licensed under CC BY 4.0 by the author.