JS

나의 첫 'REST API' 사용

2024. 9. 16. 22:40

그놈의 REST API...

개발 공부를 하면서 수도 없이 들어왔고 목격했던 용어지만

정확한 뜻은 전혀 알지 못했다...

그러다가 오늘 유데미 JS 강의를 들으면서 드디어 처음으로 REST API라는 것을 사용해보았다.

 

사용 계기

유데미 강좌에 클라이언트(프론트)에서 서버(백)로 POST 요청을 보내는 과정이 있었다.

  • 클라이언트단 코드 (프론트)
// node.js 서버의 '/add-location'으로 요청 보내기
fetch("http://localhost:3000/add-location", {
  method: "POST",
  // body에 JSON 형식으로 제공해야함
  body: JSON.stringify({
    address: address,
    lat: coordinates.lat,
    lng: coordinates.lng,
  }),
  headers: {
    "Content-Type": "application/json",
  },
})
  // 보낸 요청에 대한 응답 받아서 json으로 변환하고,
  .then((response) => {
    return response.json();
  })
  // 변환된 데이터 받아서 확인
  .then((data) => {
    console.log(data);
  });

위 코드는 클라이언트에서 http://localhost:3000/add-location 으로 POST 요청을 보내는데, 해당 주소가 바로 서버단이다.

 

  • 서버단 코드 (백)
const express = require("express");
const router = express.Router();

// 임시 백엔드 대체용 스토리지 (서버 끄면 데이터 날라감)
const locationStorage = {
  locations: [],
};

// 라우트1: post 요청을 보내야만 익명함수 실행
router.post("/add-location", (req, res, next) => {
  // 요청 받은 데이터를 locationStorage에 넣음
  locationStorage.locations.push({
    id: Math.random(),
    address: req.body.address,
    coords: { lat: req.body.lat, lng: req.body.lng },
  });

  res.json({ message: "위치를 저장했습니다!" }); // json 데이터로 회신(응답)
});

// 라우트2: get 요청
router.get("/location");

module.exports = router; // express.js식 export

여기서 router.post("/add-location", ~) 구문이 보이는가?

여기서 바로 POST 요청을 받고 그에 따른 응답을 회신하는 작업이 일어난다. add-location 앞에 슬래시(/) 안 붙여서 혼났다..ㅋ

 

이렇게 클라이언트와 서버가 분리되어 있는 프로젝트에서 서로 요청을 주고 받을 수 있도록 사용되는 것이 바로 REST API다.

그러니까 여기서 사용된 REST API는 바로 Express.js 인 것이다!


REST란? (Representational State Transfer)

  1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
  3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것.

=> HTTP 프로토콜을 기반으로 자원을 URI로 표현하고, CRUD 연산을 HTTP 메서드(GET, POST, PUT, DELETE)로 매핑하는 것.

'JS' 카테고리의 다른 글

한글만 두 번씩 입력되는 문제 (IME Composition)  (0) 2025.02.16
debounce & throttle  (0) 2025.01.05
리턴값으로 프로미스를 반환하는 함수 사용법  (0) 2024.09.10
[webpack] build:dev와 build:prod의 차이  (0) 2024.09.07
한 컷으로 보는 개발 워크플로우 (dev-prod)  (0) 2024.09.06
'JS' 카테고리의 다른 글
  • 한글만 두 번씩 입력되는 문제 (IME Composition)
  • debounce & throttle
  • 리턴값으로 프로미스를 반환하는 함수 사용법
  • [webpack] build:dev와 build:prod의 차이
쥬피썬더의노예
쥬피썬더의노예
오히려 좋아
  • 쥬피썬더의노예
    d.log
    쥬피썬더의노예
    글쓰기 관리
    • 분류 전체보기 (112)
      • JS (37)
      • TS (3)
      • WEB (10)
      • React.js (20)
      • Next.js (4)
      • tanstack query (2)
      • Node.js (2)
      • HTML (5)
      • CSS (13)
      • CS (1)
      • 에이전트 (1)
      • Git (4)
      • JAVA (0)
      • SQL (0)
      • db (0)
      • GSAP (0)
      • 자료구조 (1)
      • 알고리즘 (0)
      • ✨회고 (5)
      • 포꾸 (0)
      • 인터뷰 (0)
      • 개발일지 (0)
      • 일기 (1)
      • etc (3)
      • 정처기 실기 (0)
        • C (0)
        • Java (0)
        • Python (0)
      • fonts (0)
      • articles (0)
      • 도서 (0)
  • 인기 글

  • 태그

    css
    Til
    javascript
    useState
    state
    폼
    React.JS
    슬라이딩 윈도우
    SSG
    WEB
    Next.js
    SSR
    클로저
    CSR
    HTML
    TypeScript
    조합 패턴
    zustand
    프론트엔드
    자바스크립트
    useEffect
    리액트
    아키텍처
    안티그래비티
    React
    리팩토링
    React Query
    GIT
    상태 관리
    유효성 검사
  • 최근 글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
쥬피썬더의노예
나의 첫 'REST API' 사용
상단으로

티스토리툴바