데브코스 웹풀스택 과정/TIL

0922 REST API 설계(전체 조회, 삭제, 수정), foreach문, map 함수, 리팩토링, http status code

thinktank911 2025. 9. 22. 14:57

전체 조회

  • db가 맵 형태라 json 형태로 만들어주는 게 중요
  • db.values : map 안에 있는 value값 찍기

foreach문 사용

  • 인덱스 값 없이 하나씩 찍을 수 있다.
  • 리턴값이 없다.

map 형태 json으로 변환

  • JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환
  • foreach문 돌려서 key값에 알맞는 value값 넣기
// 전체 조회
app.get('/youtubers', (req, res) => {
    // 클린코드 관점 : _json처럼 형태를 변수명에 쓰는 건 권하지 않음
    let youtubers = {}
    db.forEach((value, key)=> {
        youtubers[key] = value;
    })
    res.json(youtubers)
})

자바스크립트 foreach

  • foreach문 돌릴 때 두번째 변수값
    • 배열은 인덱스
    • 객체(map)는 key값
/**
 * 배열
 */
const arr = [1,2,3,4,5]

// 객체(또는 배열)에서 요소를 하나 꺼낸 다음 
// 매개변수로 그 요소를 전달하여 호출되는 콜백함수
// 첫번째 값 : 데이터, 두번째 값 : 인덱스, 세번째 값 : 객체 통째로 
arr.forEach((a, b, c)=>{
    // console.log(`${a}, ${b}, ${c}`);
})

// Map과 foreach의 만남
let map = new Map();
map.set(7, "seven");
map.set(9, "nine");
map.set(11, "eleven");

// 첫번째 값 : value, 두번째 값 : key, 세번째 값 : map 전체 
map.forEach((a, b, c)=>{
    console.log(`${a}, ${b}, ${c}`);

})

자바스크립트 map

  • map 함수(메서드) vs foreach 차이
    • 리턴값의 차이 : foreach는 리턴 안해줌 vs map은 리턴값으로 배열 복사본 만들어줌
const arr = [1,2,3,4,5]

// 객체(또는 배열)에서 요소를 하나 꺼낸 다음 
// 매개변수로 그 요소를 전달하여 호출되는 콜백함수
// 첫번째 값 : 데이터, 두번째 값 : 인덱스, 세번째 값 : 객체 통째로 
const foreachArr = arr.forEach((a, b, c)=>{
    return a * 2
})

console.log(arr);

const mapArr = arr.map((a, b, c)=>{
    return a * 2
})

console.log(foreachArr);
console.log(mapArr);
console.log(`${mapArr}`);

http 메서드 : delete

개별 유튜버 삭제

  • map 삭제 메소드 : db.delete(키값)
  • 예외 처리 필수 : youtuber === undefined

<API 설계>
개별 유튜버 "삭제" => DELETE/youtubers/:id
- req : params.id
- res : "channelTitle님, 다음에 또 뵙겠습니다."

// 개별 데이터 삭제
app.delete('/youtubers/:id',(req, res) => {
    let {id} = req.params;
    id = parseInt(id);

    var youtuber = db.get(id);

    if(youtuber === undefined){
        res.json({
            message : `요청하신 ${id}번 유튜버 정보를 찾을 수 없습니다.`
        })
    }
    else{
        const channelTitle = youtuber.channelTitle;

        // db에서 삭제
        db.delete(id);

        res.json({
            message : `${channelTitle}님 유튜브가 삭제되었습니다.`
        })
    }
})

 

전체 유튜버 삭제

  • map 전체 데이터 삭제 메소드 : db.clear()
  • 예외처리 필수 : db.size === 0 활용
  • clear()는 메서드, size는 프로퍼티
  • msg 변수에 msg만 넣어 분기 처리

<API 설계>
전체 유튜버 "삭제" => DELETE/youtubers
- req : x
- res : "모든 유튜버 정보가 삭제되었습니다."

// 전체 데이터 삭제
app.delete('/youtubers',(req, res) => {

    var msg = ""

    // 예외처리
    if(db.size === 0){
        msg = "유튜버 정보가 없습니다."
    }
    else{
        db.clear();     // 전체 db 삭제
        msg = "모든 유튜버 정보가 삭제되었습니다."
    }

    res.json({
        message : msg
    })
})

예외 처리“안정성”을 위해 모든 코드에 필수로 들어가야 한다.

리팩토링 : 수정 후 추가

  • 리팩토링 : 소프트웨어의 코드 내부구조를 변경하는 것
  • 클린코드 추구
    1) 이해하기 쉽게
    2) 성능
    3) 안정성
  • 리팩토링 언제 해야할까?
    1) 에러(문제점)이 n회 발견되었을 때
    2) 리팩토링을 하면서, 에러(문제점) 발견할 수 있다.
    3) 기능을 추가하기 전 ex> API URL 설계 수정
    4) 코드 리뷰할 때
  • 리팩토링 하면 안될 때
    • 배포, 운영 직전에는 절대로 코드 수정이 일어나선 안된다.

 

http 메서드 : put 

<API 설계>
개별 유튜버 "수정" => PUT/youtubers/:id
- req : param.id, body <= channelTitle
- res : "(이전)channelTitle님, 채널명이 (새로운)channelTitle로 변경되었습니다."
  • req.body로 수정된 값 가져오기
  • db.set으로 db값 덮어쓰기
// 개별 데이터 수정
app.use(express.json())
app.put('/youtubers/:id',(req, res) => {
    let {id} = req.params;
    id = parseInt(id);

    var youtuber = db.get(id);
    var oldTitle = youtuber.channelTitle;

    if(youtuber === undefined){
        res.json({
            message : `요청하신 ${id}번 유튜버 정보를 찾을 수 없습니다.`
        })
    }
    else{
        var newTitle = req.body.channelTitle;
    
        // db값 수정. 덮어쓰기
        youtuber.channelTitle = newTitle;
        db.set(id, youtuber)

        res.json({
            "message" : `${oldTitle}님, 채널명이 ${newTitle}로 변경되었습니다.`
        })
    }
})

http code

  • http(인터넷 상에서 통신할 때 사용하는 규약) 안에 작성되어서 들어가는 상태
    • 조회/수정/삭제 성공 : 200
    • 등록 성공 : 201
    • 찾는 페이지 없음 (url에 맞는 api 없음) : 404
    • 서버가 죽었을 때 (서버가 크리티컬한 오류를 맞았을 때) : 500
  • 상태코드 관려 자세한 내용을 정리해보았다.

2025.09.13 - [개발지식/http] - [HTTP]HTTP 상태 코드

 

[HTTP]HTTP 상태 코드

HTTP 상태코드HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다. 응답은 5개의 그룹으로 나누어진다.정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러,

thinktank911.tistory.com

 


foreach문에는 리턴값이 없다. 코딩테스트하면서 다른 반복문들과 비교해볼 만한 지점이라 조만간 정리하려고 했었는데 마침 수업에 나와서 반가웠다. http 상태 코드도 따로 공부해서 알아두려고 정리해놨었는데 마침 짚어주는 시간을 가져서 좋았다. 

map 등 자바스크립트 객체를 json 형태로 바꾸는 데 JSON.stringify()를 사용한다. 해당 메서드에 대해 궁금했는데 수업에선 더 깊게 들어가지 않았다. 활용 예시 등을 좀 더 살펴봐야겠다. foreach의 매개변수 순서가 value, key 인 지점도 한 번 더 확인할 수 있어서 좋았다. map 데이터의 삭제 메서드를 db.delete를 사용했는데 remove() 메소드와 헷갈려 살펴보니 remove는 자바에서 사용하는 메소드라고 한다. 프로그램의 안정성을 위해 예외처리를 필수적으로 해야 된다는 것을 짚고 넘어갈 수 있어서 좋았다. 앞으로 코드를 작성할 때 항상 유념해야겠다.