🔌 SPARTA/Courses

HTTP와 REST API

eunjiom 2026. 1. 5. 20:36

📎 HTTP

 

1) 동작 원칙

  • 클라이언트 요청(손님이 주문) > 서버 처리 및 응답(주방이 요리를 내어줌)
  • 텍스트로 작성된 정보를 전달하기 위한 규약으로 지속적인 버전업 진행

2) 주요 특징

  • 무상태성: 서버가 클라이언트 이전 상태를 기억하지 않음
  • 비연결성: 클라이언트 요청 후 서버가 클라이언트 응답을 마치면 연결을 끊음 / 단, 정해진 시간동안 연결 유지를 할 수도 있음

3) 구조  : 시작 줄 (Start-Line), 상태 줄(Status-Line) > 헤더 (Headers) > 본문 (Body)

 

4) HTTP 요청

// (1) 시작 줄 (Start-Line)
Version: HTTP/1.1
Method: POST 
URL: 홈페이지 주소:80/items

// (2) 헤더 (Headers)
Content-Type: application/json
Accept: application/json, text/html
...

// (3) 본문 (Body)
{
  "name": "새우깡",
  "price": 1500,
  "category": "living"
}
  • 시작 줄 (Start-Line)

- Version : 어느 버전에 HTTP 요청을 보냈는지 알려줌

- Method

GET: 주문 조회 (Read)

POST: 주문 추가 (Create)

PUT/PATCH: 주문 수정 (Update)

DELETE: 주문 취소 (Delete)

- URL

홈페이지 주소 (IP 주소)
:80 (포트)
/items (경로)

Method: POST 
URL: 홈페이지 주소:80/items
→  홈페이지 주소에 80번 문으로 찜 상품을 추가
  • 헤더 (Headers)

- Content-Type: 본문(Body)에 담긴 콘텐츠(데이터)가 어떤 형식인지 본문 해석 전에 알 수 있게하는 정보

application/json (콘텐츠 형식)
> 아래 본문이 ‘JSON’ 형식으로 작성

//[app.js 코드 매칭] 
fetch() 함수에 Headers 정보를 넣습니다.
const response = await fetch(API_URL, {
    // ...
    Headers: { 'Content-Type': 'application/json' },
    // ...
});

Headers: { 'Content-Type': ... } 코드가 "Content-Type: application/json" 텍스트를 생성
> 서버에게 "지금부터 보낼 Body는 JSON이니 준비하세요!"라고 알려줍니다.

 

- Accept : 전달 받을 수 있는 콘텐츠 형식(JSON, HTML)

  • 본문 (Body)

- 실제 주문한 콘텐츠

- JSON: key: value 쌍으로 이루어진 텍스트(Text) 형식

// 찜 목록 추가를 위해 사용자가 입력한 값을 -> Json 객체로 변환!
{
  "name": "새우깡", // 상품명 (key) : "새우깡" (value)
  "price": 1500,  // 가격 (key) : 1500 (value)
  "category": "living" // 카테고리(key) : 생활용품 (value)
}

 

[app.js 코드 매칭] 

JavaScript로 JSON '객체(Object)'를 만듭니다.

// Json 객체
const newItem = {
  name: "새우깡",
  price: 1500,
  category: "living"
};
HTTP Body에 JSON을 텍스트로 변환하여 전달합니다.

const response = await fetch(API_URL, {
    // ...
    body: JSON.stringify(newItem)
});

 

5) HTTP 응답

// (1) 상태 줄 (Status Line)
Version: HTTP/1.1
Status Code: 201 
Status Text: Created

// (2) 헤더 (Headers)
Content-Type: application/json

// (3) 본문 (Body)
{
  "id": "abc-123-xyz",
  "name": "새우깡",
  "price": 1500,
  "category": "living"
}
  • 상태 줄 (Status Line)

- Version 

- Status Code & Text:  요청 처리 결과에 상태를 구분하는 코드

2xx (Success - 성공)

4xx (클라이언트 오류)
5xx (서버 오류)

  • 헤더 (Headers)

- 응답에 대한 상세 정보를 담는 운송장

- Content-Type: 돌려주는 요리(데이터)도 'JSON'

  • 형식본문 (Body)

- 서버는 newItem을 데이터베이스에 저장하면 id(고유 값)가 생성됨

- 서버는 주문 성공의 증거로, 이 id까지 포함된 '완성된 객체(JSON)'를 Body에 담아 보내줌

//app.js 코드 매칭
// (app.js)
// (B) 바로 이 부분! '본문(Body)'의 'JSON 텍스트'를
//     JS가 쓸 수 있는 '객체'로 '해석(Parse)'합니다.
const addedItem = await response.json(); 

// (C) '해석'된 객체를 사용해 화면을 그립니다.
addItemToDOM(addedItem);

 

6) HTTP 데이터 전송방법

  • 주소에 붙여 보내기: GET

- 조건만 간단히 보낼 때 사용

- "새우깡"을 검색하는 요청은 URL 끝에 ?를 붙여 보냄

GET 홈페이지 주소 : 80/search?keyword=새우깡
→  홈페이지 주소에 80번 문으로 상품을 찾아주세요. 상품 키워드는 새우깡입니다.
  • 본문(Body)에 숨겨서 보내기 (POST, PUT, PATCH)

- '추가'나 '수정'처럼 보낼 데이터가 많거나, 비밀번호처럼 민감할 때 사용

 

🗺️ REST API (표준 설계 원칙)

1) API란?

  • Representation (표현): 서버의 자원을 클라이언트가 이해할 수 있는 형태로 쉽게 표현하는 방식(JSON,HTML,이미지 등)
    State (상태): 서버가 관리하는 자원에 현재 상태
    Transfer (전송): 클라이언트-서버 간 통신(HTTP통신)

2) 6가지 원칙

  • 균일한 인터페이스
    : 모든 데이터는 고유한 주소로 식별 / 클라이언트의 표현된 데이터 조작 / 코드와 타입을 통한 상태 설명
  • 클라이언트-서버 역할분리
  • 무상태성
  • 주문형 코드: 필요할 때만 기능 전송
  • 캐시 가능: 서버가 응답할 때 데이터 캐시 가능한지 명시 / 임시저장 된 것 재사용
  • 계층형 시스템

3) ARI 요청 명세서

  • Method
    POST: 추가
    GET: 조회
    PUT: 수정
    DELETE: 삭제
    PATCH: 일부 수정
  • Endpoint(목적지 주소)
    -구조: 기본 주소(base URL) 뒤에 붙는 URL 경로(path)
    ex) https://api.example.com + /items
    - 작성원칙: 명사 / 복수형
  • 요청 파라미터 - 전달 데이터

 

 

 

 

'🔌 SPARTA > Courses' 카테고리의 다른 글

Java 기초문법(2)  (0) 2026.01.08
Java 기초문법(1)  (0) 2026.01.08
GIT  (0) 2026.01.06
웹 개발의 기초(2)  (0) 2026.01.05
웹개발의 기초  (0) 2026.01.02