Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

사고쳤어요

[Node.js] 유튜버 조회 서비스 - params에 맞는 json 전달하기 본문

웹 풀스택

[Node.js] 유튜버 조회 서비스 - params에 맞는 json 전달하기

kevinmj12 2025. 2. 13. 15:00
const express = require("express");
const app = express();

let youtuber1 = {
  channelTitle: "침착맨",
  sub: "274만명",
  videoNum: "7.4천개",
};

let youtuber2 = {
  channelTitle: "테오",
  sub: "124만명",
  videoNum: "1.2천개",
};

let youtuber3 = {
  channelTitle: "뜬뜬",
  sub: "253만명",
  videoNum: "292개",
};

 

다음과 같이 3명의 유튜버에 대한 정보가 있다.

url에 유튜버의 채널이름이 담겨 요청이 이루어졌을 때 그에 맞는 정보를 전달하려 한다.

 

app.get("/:channelName", function (req, res) {
  const { channelName } = req.params;
  
  if (channelName == "침착맨") {
    res.json(youtuber1);
  } else if (channelName == "테오") {
    res.json(youtuber2);
  } else if (channelName == "뜬뜬") {
    res.json(youtuber3);
  }
});

 

참고로 const { channelName } = req.params와 같이 정의를 하면, JavaScript의 객체 구조 분해 할당 덕분에

const channelName = req.params.channelName;와 같은 역할을 하게 되어 입력으로 들어오는 channelName을 저장할 수 있다.

 

이제 서버를 열고 침착맨, 테오, 뜬뜬을 입력하면 채널 정보가 잘 나오게 될 것이다.

 

그런데 만약 "충주시" 채널이 궁금하여 입력하게 된다면 어떻게 될까?

안타깝게도, 충주시 채널에 대한 정보는 없기 때문에 res.json()이 실행되지 않고 로딩이 계속된다.

이와 같은 예외를 처리해주기 위해 else 문을 통해 처리를 해줄 수 있다.

const express = require("express");
const app = express();

let youtuber1 = {
  channelTitle: "침착맨",
  sub: "274만명",
  videoNum: "7.4천개",
};

let youtuber2 = {
  channelTitle: "테오",
  sub: "124만명",
  videoNum: "1.2천개",
};

let youtuber3 = {
  channelTitle: "뜬뜬",
  sub: "253만명",
  videoNum: "292개",
};

app.get("/:channelName", function (req, res) {
  const { channelName } = req.params;
  
  if (channelName == "침착맨") {
    res.json(youtuber1);
  } else if (channelName == "테오") {
    res.json(youtuber2);
  } else if (channelName == "뜬뜬") {
    res.json(youtuber3);
  } else {
    res.json({ message: "모르는 유튜버입니다." });
  }
});

app.listen(3000);

 

 

하지만, 위와 같이 if else문을 사용하여 페이지를 연결한다면 유튜버를 추가할 때마다 if else문을 추가하여야 하고,

수십만명의 유튜버들을 추가한다면 수십만줄의 코드를 작성해야 할 것이다.

이를 해결하기 위해 Map() 자료구조를 활용할 수 있다.

 

let youtuber1 = {
  channelTitle: "침착맨",
  sub: "274만명",
  videoNum: "7.4천개",
};

let youtuber2 = {
  channelTitle: "테오",
  sub: "124만명",
  videoNum: "1.2천개",
};

let youtuber3 = {
  channelTitle: "뜬뜬",
  sub: "253만명",
  videoNum: "292개",
};

let youtuberDb = new Map();
youtuberDb.set("침착맨", youtuber1);
youtuberDb.set("테오", youtuber2);
youtuberDb.set("뜬뜬", youtuber3);

console.log(youtuberDb);
console.log(youtuberDb.get("침착맨");

// output
// Map(3) {
//   1 => { channelTitle: '침착맨', sub: '274만명', videoNum: '7.4천개' },
//   2 => { channelTitle: '테오', sub: '124만명', videoNum: '1.2천개' },
//   3 => { channelTitle: '뜬뜬', sub: '253만명', videoNum: '292개' }
// }
// { channelTitle: '침착맨', sub: '274만명', videoNum: '7.4천개' }

Map()에는 key와 value 한 쌍으로 이루어진 객체를 추가하여 관리할 수 있다.

그리고 key를 통해 그 key에 해당하는 value를 가져오기 위해서는 get()함수를 통해서 가져올 수 있다.

 

let youtuberDb = new Map();
youtuberDb.set("침착맨", youtuber1);
youtuberDb.set("테오", youtuber2);
youtuberDb.set("뜬뜬", youtuber3);

app.get("/:channelName", function (req, res) {
  let { channelName } = req.params;

  if (youtuberDb.get(channelName) == undefined) {
    res.json({ message: "모르는 유튜버입니다." });
  }
  else{
  	res.json(youtuberDb.get(channelName));
  }
});

app.listen(3000);

이제 youtuberDb라는 이름의 Map을 정의하고 유튜버들을 추가해준다.

그리고 res.json(youtuberDb.get(channelName));을 통해 아주 간단하게 채널 이름에 맞는 값을 가져올 수 있다.

 

물론 예외처리는 진행해주어야하는데, get(channelName)을 한 값이 존재하지 않는 경우,

즉 undefined일 경우로 처리를 해주면 된다.

 

이제 유튜버를 추가해야 할 때 if else를 추가할 필요 없이 youtuberDb라는 map에만 추가해주면 된다!

'웹 풀스택' 카테고리의 다른 글

Postman으로 GET, POST 테스트해보기  (0) 2025.02.17
Express 구조와 Express application generator  (0) 2025.02.14
Node.js의 req.params 알아보기  (0) 2025.02.13
JSON과 사용법  (1) 2025.02.12
Express 사용해보기  (0) 2025.02.12