Post

데브코스 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}님, 탈퇴에 성공했습니다.` });
  }
});

결과

삭제하기 삭제 삭제하고 개별 조회해보기 삭제2 없는 아이디 탈퇴하려고 시도해보기 삭제예외

실습 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 });
});

결과
수정해보기 채널명 바꾸기 개별 유튜버 조회해보기 변경완료 없는 아이디 수정요청해보기 아이디가없을때변경

리-팩토링

사전적 정의? ‘결과의 변경 없이 코드의 구조를 재조정함’을 뜻한다.

코드의 기능은 유지하면서 클래스, 함수, 필드처럼 여러 프로그래밍 요소를 변경하여 더 나은 코드로 개선하는 과정 또는 그러한 기술을 말합니다.

리-팩토링의 목적은?

  1. 이해하기 쉽게
  2. 성능 향상
  3. 프로그램의 안정성을 높이기 위해서

즉, 가독성을 높이고 유지보수를 편하게 하기 위해서 리팩토링을 한다.

그러면 리팩토링 === 클린코드?

정답은 NO!

클린코드 : 가독성이 높은 코드 (코드가 잘 읽히는지, 지저분하지 않고 정리된 코드인지?) 리팩토링 : 클린 코드를 포한한 유지 보수를 위한 코드 개선

→ 리팩토링이 더 큰 의미

리팩토링 해야할 때는 언제?

  1. 에러 또는 문제점이 여러번 발견되었을 때 해야한다
  2. 리팩토링을 하면서, 에러(문제점)을 발견할 수 있다
  3. 기능을 추가하기 전에 해야한다
  4. 코드리뷰 할 때 해야한다

리팩토링을 하면 안될 때 “배포 운영 직전!”

왜?
배포 운영 직전 리팩토링을 하게 되면 테스트를 처음부터 다시 해야하기때문에 절대로 배포 운영 직전에는 리팩토링을 하면 안된다!

HTTP 상태 코드

HTTP 응답 상태 코드

  • 1xx (정보): 요청을 받았으며 프로세스를 계속한다
  • 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
  • 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
  • 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
  • 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다

  • mdn http status
  • restfulapi 홈페이지
This post is licensed under CC BY 4.0 by the author.