[DevCamp] API 설계 및 실습 익히기

동건·2025년 2월 19일
0

DevCamp

목록 보기
14/85

API 설계 및 실습 익히기

오늘은 새로 유튜브를 운영한다고 가정하고
이전 코드들을 활용해 API 설계를 해보고 직접 실습해보는 시간을 가졌다.


1. 핸들러(handler)란?

우선 핸들러에 대해 간략하게 알아보았다.

핸들러는 HTTP 요청이 발생하면 자동으로 호출되는 메소드이다.

  • Node.js:
    콜백 함수로 app.HTTPMETHOD(path, 핸들러) 형태로 작성된다.

  • Spring:
    컨트롤러가 이 역할을 수행한다.


2. 🔨 회원 API 설계

회원 관련 기능 및 상세 설명

1. 로그인 (POST /login)

사용자가 로그인할 때 ID와 비밀번호를 요청 본문으로 전달하고,
서버는 이를 검증하여 성공하면 환영 메시지를 반환한다.

  • 요청(req): body (id, pwd)

  • 응답(res): ${name}님 환영합니다. → 메인 페이지로 이동

2. 회원가입 (POST /join)

새로운 사용자의 ID, 비밀번호, 이름을 받아 회원 정보를 저장한다.
성공 시 가입된 회원의 이름을 포함한 응답을 반환한다.

  • 요청(req): body (userId, pwd, name)

  • 응답(res): ${name}님 환영합니다. → 로그인 페이지로 이동

3. 회원 정보 조회 (GET /users/:id)

특정 사용자의 ID를 URL 파라미터로 받아, 해당 사용자의 ID 및 이름을 조회하여 반환한다.
존재하지 않는 경우 404 오류를 반환한다.

  • 요청(req): URL (id)

  • 응답(res): id, name

4. 회원 탈퇴 (DELETE /users/:id)

특정 사용자의 ID를 URL 파라미터로 받아 회원 정보를 삭제한다.
성공적으로 삭제되면 탈퇴한 회원의 이름과 함께 메시지를 반환한다.

  • 요청(req): URL (id)

  • 응답(res): ${name}님 다음에 또 뵙겠습니다. → 메인 페이지로 이동

이렇게 API 설계를 진행한 후 실제 코드를 작성을 했다.


3. 📌 실습 코드 및 설명

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

app.listen(1234);
app.use(express.json())

let db = new Map(); // key - value 저장소 (JSON 유사 구조)
let id = 1;

여기서는
express 프레임워크를 사용하여 웹 서버를 생성하였으며,
express.json()을 사용해 JSON 요청을 처리할 수 있도록 설정했다.

모든 코드는 전에 사용했던 코드를 참조했다.

// 로그인
app.post('/login', (req, res) => {
    // 로그인 로직 추가 예정
})

POST /login 엔드포인트를 추가하여 사용자의 로그인 기능을 구현할 예정이나, 현재는 미완성 상태이다.

// 회원가입
app.post('/join', (req, res) => {
    if( Object.keys(req.body).length === 0 ) {
        res.status(400).json({
            message: "요청 값이 잘못되었습니다."
        });
    } else {
        console.log(req.body);
        db.set(id++, req.body);
    
        res.status(201).json({
            message: `${db.get(id-1).name} 님의 유튜브 활동을 응원합니다.`
        });
    }
})

회원가입 시 요청 본문이 비어 있는지 확인하여 유효성 검사를 수행한다.
요청 값이 올바르면 db에 데이터를 저장하고 응답을 반환한다.

// 회원 개별 조회
app.get('/users/:id', (req, res) => {
    let { id } = req.params;
    id = parseInt(id);

    const user = db.get(id);
    if (!user) {
        res.status(404).json({
            message: "유튜버 정보를 찾을 수 없습니다."
        });
    } else {
        res.status(200).json({
            userId: user.userId,
            name: user.name
        });
    }
})

GET /users/:id를 통해 특정 회원의 정보를 조회할 수 있다.
db에서 해당 ID의 사용자가 존재하는지 확인한 후, 존재하면 정보를 반환하고 없으면 404 에러를 응답한다.

// 회원 개별 탈퇴
app.delete('/users/:id', (req, res) => {
    let { id } = req.params;
    id = parseInt(id);

    const user = db.get(id);
    if (!user) {
        res.status(404).json({
            message: "유튜버 정보를 찾을 수 없습니다."
        });
    } else {
        db.delete(id);
        res.status(200).json({
            message: `${user.name}님 다음에 또 뵙겠습니다.`
        });
    }
})

DELETE /users/:id를 통해 특정 사용자의 정보를 삭제한다.
존재하지 않는 사용자의 경우 404 응답을 반환하며, 성공적으로 삭제하면 사용자 이름과 함께 탈퇴 메시지를 제공한다.

아래는 API들의 테스트 결과이다.


URL에 따라 결과가 정상적으로 출력된다.


TIL

오늘은 지금까지 학습해왔던 API로 강사님과 함께 설계도 해보고,
responsestatus 도 바꿔보고
직접 코드도 만들어보았다.

점점 코드가 길어질수록 개발자로 한걸음 더 다가간 것 같다.
API가 처음에는 마냥 어려운줄 알았는데
지금은 물론 얕게 알아서 그런걸 수도 있지만
충분히 응용하고 사용할 수 있다는 생각이 들었다.

아직 PUT 은 헷갈리는 부분이 있지만
이렇게 회고하면서 다시 공부하면서 익혀나가야겠다.

profile
배고픈 개발자

0개의 댓글