오늘 끝나면
HTTP, 보이지 않는 대화
- ✓HTTP, 보이지 않는 대화의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 HTTP,이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
요청과 응답 — GET·POST·상태코드(404의 정체) 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
개발 · Day 13 / 인터넷 · 웹
요청을 보내면
응답이 온다
웹페이지가 뜰 때 보이지 않는 대화가 오감. 브라우저가 묻고 서버가 답함. 그 대화의 규칙이 HTTP임.
묻고, 답한다
웹은 한마디로 묻고 답하기임. 한쪽이 요청하고, 다른 쪽이 응답함.
주소창에 naver.com을 치면, 내 브라우저가 네이버 서버에 "그 페이지 좀 줘"라고 요청(request)을 보냄. 묻는 쪽이 클라이언트임 — 보통 내 브라우저나 앱임.
서버는 페이지를 찾아 응답(response)으로 돌려줌. 답하는 쪽이 서버임. 이 한 번의 묻고-답하기가 웹의 가장 작은 단위임.
핵심은 항상 클라이언트가 먼저 묻는다는 것임. 서버는 묻기 전엔 먼저 말 안 함. 요청 없으면 응답도 없음.
항상 클라이언트가 먼저 묻고, 서버는 그제야 답함 — 요청 없으면 응답 없음
GET 읽기, POST 보내기
요청엔 "뭘 하려는지"를 적음. 그게 메서드임. 가장 많이 쓰는 둘만 알면 됨.
GET은 읽기임. "그 정보 좀 보여줘". 페이지를 열거나 목록을 불러올 때 씀. 서버 것을 바꾸지 않고 가져오기만 함.
POST는 보내기임. "이 데이터 받아서 저장해". 로그인·글쓰기·회원가입처럼 서버에 뭔가 남길 때 씀. 보낼 내용을 요청에 같이 실어 보냄.
같은 주소라도 메서드가 다르면 뜻이 달라짐. /login에 GET은 "로그인 화면 줘", POST는 "이 아이디·비번으로 로그인해"임. 다음 페이지 실험실에서 직접 눌러보셈.
GET은 서버에서 받아오기만, POST는 서버로 보내 남김 — 방향이 반대임
직접 요청을 보내본다
말로만 들으면 안 와닿음. 직접 요청을 보내보면 단번에 이해됨.
오른쪽에서 메서드와 경로를 고르고 [요청 보내기]를 누르면 작은 가짜 서버가 응답을 돌려줌. /products에 GET을 보내면 상품 목록이, POST를 보내면 "등록됨"이 옴.
재밌는 건 /products/1에 POST를 보낼 때임. 그 경로는 읽기만 되는 곳이라 서버가 거절함. 같은 주소도 메서드에 따라 받기도 거절하기도 함.
맨 아래 서버 고장내기도 켜보셈. 내 요청은 멀쩡한데 서버가 터지면 어떤 답이 오는지 바로 보임. 그게 다음 페이지의 500임.
200·404·500 — 답의 첫마디
응답은 늘 세 자리 숫자로 시작함. 그게 상태코드임 — "어떻게 됐는지"를 한 단어로 요약함.
외울 건 앞자리뿐임. 2로 시작하면 성공임. 200은 "잘 됐음, 여기 있음"임. 가장 자주 보는 답임.
4로 시작하면 요청한 쪽 잘못임. 그 유명한 404는 "그런 페이지 없음"임. 주소를 잘못 쳤거나 페이지가 지워진 경우임.
5로 시작하면 서버 잘못임. 500은 "서버가 처리하다 터짐"임. 내 요청은 멀쩡한데 서버 쪽 코드가 죽은 것임. 앞자리만 봐도 누구 탓인지 바로 앎.
2 성공 · 4 요청한 내 잘못 · 5 서버 잘못 — 세 자리 첫 숫자가 핵심
헤더와 바디 — 봉투와 알맹이
요청도 응답도 두 부분으로 나뉨. 헤더(header)와 바디(body)임. 편지에 비유하면 딱 맞음.
헤더는 봉투에 적는 정보임. 어떤 형식인지·누가 보냈는지·길이가 얼만지 같은메타 정보가 들어감. 사람은 잘 안 보지만 컴퓨터가 읽고 처리함.
바디는 알맹이임. 실제로 주고받는 내용임. GET 요청의 응답 바디엔 페이지 내용이, POST 요청의 바디엔 보낼 데이터(아이디·비번 등)가 담김.
정리하면 — 클라이언트가 메서드 + 경로 + 헤더 + 바디로 묻고, 서버가 상태코드 + 헤더 + 바디로 답함. 이 단순한 왕복이 웹 전체를 굴림. 다음은 이 대화의 양 끝, 클라이언트 vs 서버를 자세히 봄.
코드 보기
GET /products/1 HTTP/1.1
Host: shop.com # ← 헤더(봉투)
Accept: application/json
# (GET은 보통 바디 없음)
200 OK # ← 상태코드
Content-Type: application/json # 헤더
{ "id": 1, "name": "키보드" } # ← 바디(알맹이)편지처럼 봉투(헤더)에 정보, 안(바디)에 알맹이를 담아 주고받음