티스토리 뷰

카테고리 없음

4주차 파트3 [백엔드 기초 4]

파이썬 초보 파이리 2025. 2. 15. 23:10

req.params란?

req.params는 URL 경로에서 동적으로 전달된 값을 추출하는 객체이다.
이를 활용하면 특정 경로에서 변수 값을 받아 원하는 데이터를 처리할 수 있다.


req.params의 동작 원리

예를 들어, /products/:n과 같은 경로를 설정하면
사용자가 /products/3으로 접근했을 때 req.params는 {"n": "3"} 형태로 데이터를 저장한다.
즉, req.params.n을 사용하면 "3"이라는 값을 가져올 수 있다.


req.params의 데이터 타입

  • req.params로 전달된 값은 문자열(string) 타입으로 저장된다.
  • 하지만 자바스크립트의 자동 형 변환 덕분에 숫자와 비교 연산, 덧셈·뺄셈 연산 등이 가능하다.
  • 보다 명확한 숫자 변환이 필요하면 parseInt() 같은 변환 함수를 사용할 수 있다.

req.params 활용 예시

1️⃣ 유튜브 채널 주소 구조

  • 유튜브의 채널 주소는 https://www.youtube.com/@채널명 형식으로 구성된다.
  • 여기서 @채널명이 params로 전달되어 해당 채널 페이지로 연결된다.

2️⃣ 유튜브 영상 URL

  • 유튜브의 영상 URL은 https://www.youtube.com/watch?v=비디오ID&t=시작시간 형태로 구성된다.
  • v=비디오ID는 특정 비디오를 식별하며, t=시작시간은 몇 초부터 재생할지를 지정한다.
  • 이러한 방식으로 URL의 특정 값을 params를 통해 전달받아 처리할 수 있다.

req.params 정리

  • URL 경로에서 변수 값을 추출하는 역할
  • 기본적으로 문자열(string) 타입이지만 연산 시 자동 변환 가능
  • 명확한 숫자 변환이 필요하면 parseInt() 사용
  • 유튜브 채널, 영상 URL 등 다양한 웹 서비스에서 활용됨

이처럼 req.params를 사용하면 사용자의 입력값을 동적으로 받아 원하는 페이지나 데이터를 제공할 수 있다. 


자바스크립트 객체, 배열 비구조화

 

객체 두개 만들어서 api테스트

 

http://localhost:1234/@15ya.fullmoon 이것을 치면

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

app.listen(1234)

let youtuber1 = {
    channelTitle : "십오야",
    sub : "593만명",
    videoNum : "993개"
}
let youtuber2 = {
    channelTitle : "침착맨",
    sub : "227만명",
    videoNum : "6.6천개"
}
let youtuber3 = {
    channelTitle : "테오",
    sub : "54.8만명",
    videoNum : "726개"
}
   
    app.get("/:nickname", function (req, res) {

        const {nickname} = req.params

       if(nickname == "@15ya.fullmoon"){
        res.json(youtuber1)
       }else if(nickname == "@ChimChakMan_Official"){
        res.json(youtuber2)
       }else if(nickname == "@Teo_universe"){
        res.json(youtuber3)
       }else{
        res.json({
            massage : "저희가 모르는 유튜버입니다"
        })
       }
       //개발자가 예상하지 못한 에러 = 예외가 발생했다!
    })
'

코드 상세 설명

이 코드는 Express.js를 이용하여 간단한 웹 서버를 구현한 것이다.
특정 유튜버의 정보(JSON 데이터)를 제공하는 API 역할을 한다.

 

  • express 모듈을 불러와서 웹 서버를 생성
  • app.listen(1234) → 포트 1234에서 서버를 실행
  • 이 상태에서 http://localhost:1234로 접속 가능
  • youtuber1, youtuber2, youtuber3 → 3명의 유튜버 정보를 저장한 객체
  • channelTitle → 채널명
  • sub → 구독자 수
  • vidioNum → 영상 개수 (videoNum 오타 있음)
  • /:nickname → URL에서 nickname 값을 가져온다
    • 예: http://localhost:1234/@15ya.fullmoon → nickname = "@15ya.fullmoon"
  • nickname 값이 특정 유튜버와 일치하면 해당 정보를 JSON 형식으로 응답

🚀 정리

  1. Express 서버 실행 (app.listen(1234))
  2. 유튜버 정보를 객체에 저장
  3. URL의 nickname 값을 받아 해당 유튜버 정보를 반환
  4. JSON 데이터 형식으로 응답 (res.json())

디텍토리 정리 + 자바스크립트 네이밍룰

폴더를 만들어서 정리했음!

 

  • 폴더,파일(demo-a, a.js) : 알파벳 소문자, 두개 이상의 단어를 합쳐서 쓸땐 첫번째와 두번째 단어 사이에 하이픈
  • 변수, 함수(chnnelTitle)    두개 이상의 단어를 합쳐서 쓸땐 ,두번째 단어의 첫글자를 "대문자"로

자바스크립트 Map

let db = new Map()
db.set(1, "NoteBook")//키로 벨류를 찾을 수 있는 한 쌍을 저장
db.set(2, "Cup")
db.set(3, "Chair")

console.log(db)
console.log(db.get(1))
console.log(db.get(2))
console.log(db.get(3))

 

-> 출력

[Running] node "c:\node-base\demo-apt\map-demo.js"
Map(3) { 1 => 'NoteBook', 2 => 'Cup', 3 => 'Chair' }
NoteBook
Cup
Chair

 

 

📌 JavaScript Map 객체 요약

키-값(key-value) 저장 자료구조
모든 타입을 키로 사용 가능 (객체 {} 는 문자열·심볼만 가능)
키의 삽입 순서 유지
크기 확인: size 사용

const map = new Map();

// 값 추가
map.set("name", "Alice").set(123, "Number Key");

// 값 가져오기
console.log(map.get("name")); // Alice

// 값 존재 확인
console.log(map.has(123)); // true

// 값 삭제
map.delete(123);

// 전체 삭제
map.clear();

자바스크립트 Map

 

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

//서버 셋팅 : 포트 넘버(번호) 1234로 셋팅
app.listen(1234)

//GET + "/"
app.get('/:id', function(req, res) {
    let {id} = req.params
    console.log(id)
    id = parseInt(db.get(id))})

    if (db.get(id) == undefined){
        res.json({
            message : "없는 상품 입니다."
        })
    }else{
        res.json({
            id : id,
            productName : db.get(id)
        })
    }

//localhost:1234//1 => NoteBook
//localhost:1234//2 => Cup
//localhost:1234//3 => Chair

let db = new Map()
db.set(1, "NoteBook")//키로 벨류를 찾을 수 있는 한 쌍을 저장
db.set(2, "Cup")
db.set(3, "Chair")

//console.log(db)
//console.log(db.get(1))
//console.log(db.get(2))
//console.log(db.get(3))

-> 전코드 오류났음

 

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

//서버 셋팅 : 포트 넘버(번호) 1234로 셋팅
app.listen(1234);

//GET + "/"
app.get('/:id', function(req, res) {
    let { id } = req.params; // id 가져오기
    id = parseInt(id); // 숫자로 변환

    console.log(id);

    if (db.get(id) == undefined) {  // 없는 상품 처리
        res.json({
            message: "없는 상품 입니다."  // 오타 수정 (massage -> message)
        });
    } else {  // 존재하는 상품 처리
        res.json({
            id: id,
            productName: db.get(id)
        });
    }
});

//localhost:1234/1 => NoteBook
//localhost:1234/2 => Cup
//localhost:1234/3 => Chair

let db = new Map();
db.set(1, "NoteBook"); // 키로 값을 찾을 수 있는 한 쌍을 저장
db.set(2, "Cup");
db.set(3, "Chair");

-> 완성

원래 코드와 달라진 점

  1. 잘못된 변수명 수정
    • let { p } = req.params → let { id } = req.params
    • id를 가져와야 하는데 p를 사용하고 있었음.
  2. id 숫자 변환 방식 수정
    • id = parseInt(db.get(id)) → id = parseInt(id)
    • db.get(id)가 아니라 id 자체를 숫자로 변환해야 함.
  3. console.log(id) 위치 수정
    • 기존 코드에서는 id가 선언되기 전에 console.log(id)를 실행하여 오류 발생 가능.
  4. if-else 구조 적용
    • 기존 코드에서는 if (db.get(id) == undefined) { ... }가 app.get 바깥에 있어서 실행되지 않았음.
    • if-else를 app.get 내부로 이동하여 정상 작동하도록 수정.
  5. res.json() 응답 오류 수정
    • 기존 코드에서는 res.json()을 실행하기 전에 if 문이 app.get 바깥에 있어서, 실행되지 않았음.
    • 올바른 위치로 이동하여 정상적으로 응답하도록 수정.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
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 29 30 31
글 보관함