본문으로 건너뛰기

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(기지 사고)

배달 음식 주문으로 이해하는 인터넷 개념

인터넷에서 일어나는 일을 '배달 음식 주문'에 비유하면 헷갈리는 이 6가지 개념의 차이가 한눈에 들어옵니다.

우리가 스마트폰으로 치킨을 주문해서 집으로 배달받는 과정을 예로 들어 설명해 드릴게요.

1. 주소 및 위치 관련 개념

  • IP (인터넷 프로토콜 주소)
    • 개념: 인터넷에 연결된 모든 컴퓨터, 스마트폰, 서버가 가지는 '실제 물리적 집 주소(위치)'입니다.
    • 비유: 서울시 강남구 테헤란로 123 같은 실제 도로명 주소
    • 특징: 숫자 형태(192.168.0.1 등)로 되어 있어 사람이 외우기 어렵습니다.
  • DNS (도메인 네임 시스템)
    • 개념: 사람이 읽기 쉬운 글자 주소를 컴퓨터가 이해하는 숫자 주소(IP)로 바꿔주는 '전화번호부(주소록)'입니다.
    • 비유: 스마트폰 내 주소록에서 '내 친구'를 누르면 저장된 전화번호 010-XXXX-XXXX로 연결해 주는 서비스
    • 작동: 웹브라우저에 naver.com을 치면, DNS가 "아, 그곳의 실제 IP는 223.130.195.95입니다"라고 찾아줍니다.
  • NS (네임서버 / Name Server)
    • 개념: DNS라는 시스템 안에서 '실제 주소록 데이터를 가지고 있는 서버(컴퓨터)' 그 자체입니다.
    • 비유: 구글 지도, 네이버 지도 같은 '주소록 데이터베이스 건물'
    • 관계: DNS가 '주소를 변환해 주는 전체 규칙/체계'라면, NS는 그 규칙에 따라 주소 정보를 저장하고 답해주는 '담당 서버'입니다.
  • URL (통합 자원 식별자)
    • 개념: 인터넷상에서 '어떤 건물(IP/도메인)의 몇 호, 어떤 방'에 있는 자료인지 알려주는 전체 웹 주소입니다.
    • 비유: 서울시 강남구 테헤란로 123, B동 302호 치킨집의 메뉴판
    • 특징: https://www.example.com/menu/chicken처럼 접속 방식, 도메인, 세부 경로가 모두 포함되어 있습니다.

2. 통신 및 전달 방식 관련 개념

  • HTTP (하이퍼텍스트 전송 프로토콜)
    • 개념: 웹 브라우저(나)와 웹 서버(상점)가 글자, 사진, 영상 등을 주고받을 때 사용하는 대화 규칙(규약)입니다.
    • 비유: 배달 앱으로 음식을 주문할 때 사용하는 '손님과 가게 간의 일반적인 주문 대화 양식'
    • 참고: 암호화를 거쳐 안전하게 정보를 주고받는 표준 형태를 HTTPS라고 합니다.
  • SSH (시큐어 셸)
    • 개념: 다른 컴퓨터(서버)에 안전하게(암호화하여) 원격 접속할 때 사용하는 보안 통신 규칙입니다.
    • 비유: 치킨집 주인이 가게 문을 열고 들어가서 주방을 관리하기 위한 '보안키와 비밀 통로'
    • 특징: 일반 사용자가 웹사이트를 볼 때는 HTTP를 쓰고, 개발자나 관리자가 서버 내부를 직접 제어할 때는 SSH를 씁니다.

3. 기능 및 서비스 제공 개념

  • API (응용 프로그램 인터페이스)
    • 개념: 서로 다른 프로그램(앱)끼리 데이터를 주고받을 수 있도록 만든 '창구(약속된 주문 창구)'입니다.
    • 비유: 식당에서 손님의 주문을 받아 주방에 전달하고, 요리를 받아 손님에게 가져다주는 '배달원 또는 카운터 직원'
    • 예시: 배달 앱에서 '카카오맵' 지도나 '토스' 결제창이 작동하는 건, 배달 앱이 카카오와 토스의 API를 사용하고 있기 때문입니다.

한눈에 정리하는 요약표

용어역할비유
IP컴퓨터의 실제 숫자 주소도로명 주소
DNS글자 주소를 IP로 바꿔주는 시스템전화번호부 / 주소록
NS주소 정보를 저장하고 알려주는 서버주소록 정보를 가지고 있는 관리소
URL인터넷상의 상세 페이지 전체 주소건물의 특정 층, 특정 방까지 표시된 전체 주소
HTTP웹에서 데이터를 주고받는 규칙일반적인 손님-가게 주문 대화법
SSH서버에 안전하게 원격 접속하는 보안 규칙관리자용 비밀 통로 및 키
API프로그램 간에 데이터를 주고받는 중간 창구주문을 전달하는 배달원 / 창구 직원
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(페이지): 데이터가 주입되어 완성된 최종 화면