LangTailor

Lesson

웹 통신과 REST API

HTML에서 시작해 HTTP·REST·DOM·JSON까지, 브라우저와 서버가 데이터를 주고받는 전 과정을 훑습니다.

12개 주제

01

마크업 · 마크다운 · HTML

마크(Mark)는 데이터에 이름표를 붙이는 행위다. 같은 '안녕하세요'라도 태그로 감싸면 그것이 제목임을 기계가 알 수 있다. 마크업은 기계를 위한 정교한 설계도, 마크다운은 사람을 위한 간결한 메모다.

마크업 · 마크다운 · HTML
  • 마크(Mark) = 데이터에 성격과 구조를 부여하는 이름표
  • 마크업(HTML)은 기계(브라우저)용, 마크다운(.md)은 사람(작성자)용
  • 하이퍼텍스트(HT)는 문서 사이를 순간이동시키는 비선형 텍스트
  • 하이퍼링크 `<a>`는 이미 만들어진 길로 이동, 폼 태그 `<form>`은 새 데이터를 주문
  • `<!DOCTYPE html>`은 최신 규격(HTML5)으로 그리라는 작전 개시 선언
02

웹 통신을 물류 시스템으로 이해하기

프론트엔드가 손님이고 백엔드가 기지라면, 그 사이를 오가는 기차가 요청과 응답이다. 화물은 JSON 패키지, 선로는 URL 주소, 기관차는 Axios 같은 라이브러리, 운행 규칙은 REST다.

웹 통신을 물류 시스템으로 이해하기
  • 패키지(객체) = 실제 데이터 조각, JSON 형식
  • 선로(API) = 데이터 전용 통로와 정거장, URL 주소
  • 기관차(Axios) = 화물을 싣고 움직이게 하는 동력
  • 물류 규정(REST) = 선로 설계와 운행 방식에 대한 표준 규칙
  • 상태 코드: 200(배송 성공) · 404(선로 없음) · 500(기지 사고)
03

동기 vs 비동기 통신

모뎀 시대에는 요청 하나를 보내고 전체 응답이 올 때까지 기다려야 했다. 현대 인터넷은 텍스트·이미지·광고를 동시에 요청하고 도착하는 대로 각각 렌더링한다.

동기 vs 비동기 통신
  • 동기(Synchronous): 순차 처리, 자원 점유(대기), 제어는 간단하지만 비효율적
  • 비동기(Asynchronous): 동시 처리, 자원 효율적, 제어는 복잡하지만 높은 응답성
  • 비유 — 동기는 전화 통화(한 명이 말하면 다른 한 명은 듣기만), 비동기는 메신저(보내 놓고 다른 일 수행)
04

Stateless(무상태)를 올바르게 이해하기

무상태는 '아무도 상태를 갖지 않는다'는 뜻이 아니다. 프론트엔드는 화면 상태를 갖고 백엔드는 영구 데이터를 갖는다. 무상태인 것은 그 사이를 오가는 REST API 통신 구간뿐이다.

Stateless(무상태)를 올바르게 이해하기
  • 프론트엔드: 다크모드 설정, 장바구니 목록 등 화면 상태(State)를 보유 — Stateful
  • 백엔드/DB: 회원 정보, 게시글 등 영구적 데이터를 저장 — Stateful
  • 가운데 통신 구간만 Stateless — 서버는 이전 요청을 기억하지 않는다
  • 장점: 확장성(서버 증설이 쉬움), 안정성(한 서버가 고장 나도 무관), 단순성
05

회원가입으로 보는 상태의 여정

입력창에 타이핑하는 동안은 프론트엔드 내부 상태다. 가입 버튼을 누르는 순간 그 상태는 무상태 패키지로 포장되어 전송되고, 백엔드에서 객체로 조립된 뒤 데이터베이스에 영구 상태로 정착한다.

회원가입으로 보는 상태의 여정
  • 1단계: 입력창 내부 상태(State) → 버튼 클릭 시 무상태 패키지로 포장
  • 2단계: 백엔드의 독립 모듈에서 패키지를 수신하고 저장 처리
  • 3단계: '부품(객체)'으로 조립되어 데이터베이스에 영구 상태로 정착
  • HTTP 통신은 무상태 요청과 무상태 응답의 규칙을 따른다 (예: JWT 인증)
06

HTTP 메서드와 상태 전송

REST의 이름 그대로 '표현 상태 전송(REpresentational State Transfer)'이다. 클라이언트가 가진 상태를 HTTP 메서드에 실어 서버로 보내고, 서버는 속성과 기능으로 처리한 뒤 응답한다.

HTTP 메서드와 상태 전송
  • GET — 조회(READ), POST — 생성(CREATE)
  • DELETE — 삭제(DELETE), PUT/PATCH — 수정(UPDATE)
  • 클라이언트는 HTML(속성)과 Script(기능)를 갖고, 서버도 동일하게 속성과 기능을 갖는다
  • 연결 자체는 무상태(Stateless)로 유지된다
07

Safe 메서드와 Unsafe 메서드

서버의 데이터 상태를 바꾸느냐가 기준이다. 단순 조회는 몇 번을 호출해도 서버가 그대로지만, 생성·수정·삭제는 호출할 때마다 서버의 물리적 상태가 달라진다.

Safe 메서드와 Unsafe 메서드
  • Safe Methods (상태 변화 X): GET — 요청 전후 서버 상태가 동일하게 유지
  • Unsafe Methods (상태 변화 O): POST / PUT / DELETE — 서버 데이터가 물리적으로 변경
08

REST API의 3대 구성 요소

REST는 자원을 주소로 지목하고, 행위를 메서드로 표현하며, 실제 내용물은 JSON으로 주고받는다. 주소에 동사를 넣지 않는 것이 핵심 원칙이다.

REST API의 3대 구성 요소
  • 자원(Resource): 데이터의 위치를 나타내는 주소(URI) — 오직 명사 형태로 구성
  • 행위(Verb): 자원을 어떻게 다룰지 결정하는 메서드(GET/POST 등)
  • 표현(Representation): 실제 주고받는 데이터(JSON 등)
09

DOM — 정적 HTML에서 동적 객체로

브라우저가 HTML 소스 코드를 파싱하면 각 태그가 메모리 위의 객체가 되어 트리를 이룬다. 이 객체들도 결국 속성과 기능을 가진 객체이므로, 객체지향에서 배운 개념이 그대로 적용된다.

DOM — 정적 HTML에서 동적 객체로
  • 정적 HTML 소스 → 브라우저 파싱 → 동적 DOM 트리 객체
  • 속성(Property): 고유 식별자 id, 디자인 스타일 class, 사용자 정의 데이터 `data-*`
  • 기능(Method): DOM 동적 제어(수정·생성), 이벤트 처리(클릭·입력 감지), 애니메이션 실행
  • DOM의 태그는 객체지향의 클래스 인스턴스, 어트리뷰트는 멤버 변수, 스크립트는 메서드에 대응
10

DOM vs JSON — 텍스트에서 객체로

둘 다 텍스트를 프로그래밍 가능한 객체로 바꾼다는 점에서 같지만, 출발점과 목적이 다르다. DOM은 HTML 문서를 구조화(Modeling)하고, JSON은 데이터를 표기법에 맞춰 형식화(Notation)한다.

DOM vs JSON — 텍스트에서 객체로
  • DOM: HTML 문서(텍스트) → 모델링 → 트리 구조 객체
  • JSON: 데이터 구조(텍스트) → 표기법 → 네이티브 메모리 객체
  • DOM 접근은 `document.getElementById()`, JSON 파싱은 `JSON.parse()`
11

JSON과 React의 데이터 흐름

표기법(Notation)은 데이터를 기록하는 규칙이고, 주석(Annotation)은 부가 정보를 덧붙이는 라벨이다. React에서는 상태(State)가 바뀌면 UI가 다시 그려진다 — UI = f(state).

JSON과 React의 데이터 흐름
  • 직렬화(Stringify): 객체 → 텍스트, 역직렬화(Parsing): 텍스트 → 객체
  • JSON의 본질은 Key : Value 문법
  • React 핵심 공식: UI = f(state) — 상태가 바뀌면 화면이 다시 렌더링된다
  • `useState` 훅은 읽기 전용 값과 변경 함수를 쌍으로 제공한다
12

아토믹 디자인 — 차원으로 보는 UI 설계

원자에서 페이지까지 UI를 단계적으로 조립하는 방법론이다. 앞서 본 데이터 차원의 확장과 같은 구조로, 점에서 시작해 선·면·입체로 확장된다.

아토믹 디자인 — 차원으로 보는 UI 설계
  • 0차원 Atoms(원자): 위치만 존재하는 최소 단위 — 버튼, 입력창
  • 1차원 Molecules(분자): 요소 간 관계성이 형성된 선형 결합
  • 2차원 Organisms(유기체): 독립적 개체로 실재하는 복합 결합
  • 추상 Templates(템플릿): 내용 없는 구조의 틀 (`null`)
  • 3차원 Pages(페이지): 데이터가 주입되어 완성된 최종 화면