오늘 끝나면
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를 보내면 서버가 거절한다. 읽기만 되는 경로이기 때문이다. 같은 주소도 메서드에 따라 받기도 하고 거절하기도 한다.
맨 아래 서버 고장내기를 켜면 내 요청은 멀쩡한데 서버가 터질 때 어떤 답이 오는지 보인다.
200·404·500, 답의 첫마디
응답은 늘 세 자리 숫자로 시작한다. 그게 상태코드다. "어떻게 됐는지"를 한 단어로 요약한다.
외울 건 앞자리뿐이다. 2로 시작하면 성공이다. 200은 "잘 됐음, 여기 있음"이다. 가장 자주 보는 답이다.
4로 시작하면 요청한 쪽 잘못이다. 404는 "그런 페이지 없음"이다. 주소를 잘못 쳤거나 페이지가 지워진 경우다.
5로 시작하면 서버 잘못이다. 500은 "서버가 처리하다 터짐"이다. 내 요청은 멀쩡한데 서버 쪽 코드가 죽은 것이다. 앞자리만 봐도 누구 탓인지 바로 안다.
2 성공 · 4 요청한 내 잘못 · 5 서버 잘못. 세 자리 첫 숫자가 핵심
헤더와 바디, 봉투와 알맹이
요청도 응답도 두 부분으로 나뉜다. 헤더(header)와 바디(body)다. 편지에 비유하면 딱 맞는다.
헤더는 봉투에 적는 정보다. 어떤 형식인지, 누가 보냈는지, 길이가 얼만지 같은 메타 정보가 들어간다. 사람은 잘 안 보지만 컴퓨터가 읽고 처리한다.
바디는 알맹이다. 실제로 주고받는 내용이다. GET 요청의 응답 바디엔 페이지 내용이, POST 요청의 바디엔 보낼 데이터(아이디나 비번 등)가 담긴다.
정리하면 클라이언트가 메서드 + 경로 + 헤더 + 바디로 묻고, 서버가 상태코드 + 헤더 + 바디로 답한다. 이 단순한 왕복이 웹 전체를 굴린다.
코드 보기
GET /products/1 HTTP/1.1
Host: shop.com # ← 헤더(봉투)
Accept: application/json
# (GET은 보통 바디 없음)
200 OK # ← 상태코드
Content-Type: application/json # 헤더
{ "id": 1, "name": "키보드" } # ← 바디(알맹이)편지처럼 봉투(헤더)에 정보, 안(바디)에 알맹이를 담아 주고받는다