[BACK-001][입문] 서버와 HTTP 요청·응답의 구조 > IT 기술 공유

본문 바로가기

사이트 내 전체검색

뒤로가기 IT 기술 공유

[BACK-001][입문] 서버와 HTTP 요청·응답의 구조

페이지 정보

작성자 기술팀장 작성일 26-08-29 00:33 조회 234 댓글 0

본문

[이번 수업]

브라우저에 주소를 입력하면 클라이언트가 요청을 보내고 서버가 응답을 돌려줍니다. 백엔드 개발은 이 요청을 해석해 필요한 작업을 수행하고 올바른 응답을 만드는 일에서 시작합니다. 이번에는 로컬 서버를 직접 실행해 HTTP 요청·응답을 눈으로 확인합니다.

[선수지식]

WEB-001에서 만든 index.html 파일과 TOOL-001의 터미널 사용법이 필요합니다. Python 설치 여부도 확인하세요.

[학습목표]

1. 클라이언트와 서버가 프로그램의 역할을 뜻한다는 것을 설명할 수 있습니다.
2. HTTP 요청과 응답의 핵심 구성요소를 구분할 수 있습니다.
3. 로컬 서버에 요청을 보내고 상태코드·헤더·본문을 확인할 수 있습니다.

[핵심개념]

클라이언트는 연결을 시작해 요청을 보내는 프로그램이고, 서버는 연결을 받아 요청에 응답하는 프로그램입니다. 브라우저와 curl은 클라이언트가 될 수 있습니다. ‘서버’는 큰 컴퓨터만 뜻하지 않습니다. 노트북에서 실행한 작은 프로그램도 요청을 기다리고 응답하면 서버 역할을 합니다. 한 프로그램도 상황에 따라 다른 서버의 클라이언트가 될 수 있습니다.

HTTP는 웹에서 메시지를 주고받는 요청·응답 프로토콜입니다. 요청에는 보통 메서드, 대상 경로, 헤더, 선택적인 본문이 있습니다. GET은 자원을 조회하려는 의도를 나타냅니다. 헤더는 받을 수 있는 형식이나 클라이언트 정보 같은 메타데이터를 전달하고, 폼이나 JSON을 보낼 때는 요청 본문이 사용될 수 있습니다.

응답에는 상태코드, 헤더, 선택적인 본문이 있습니다. 200은 요청이 성공했다는 뜻이고 404는 대상 자원을 찾지 못했다는 뜻입니다. Content-Type 헤더는 본문이 HTML인지 JSON인지 같은 형식을 설명합니다. 본문에는 실제 HTML 문서나 데이터가 들어갑니다. HTTP/2·HTTP/3은 전송 표현이 달라져도 요청 메서드와 상태코드 같은 핵심 의미는 유지됩니다.

URL의 localhost는 현재 컴퓨터 자신을 가리키고 8000은 서버 프로그램이 기다리는 포트 번호입니다. 포트는 한 컴퓨터 안에서 어떤 프로그램과 통신할지 구분하는 번호라고 이해하면 됩니다.

[따라하기]

1. WEB-001의 index.html이 있는 it-study 폴더로 이동합니다. 아래 명령으로 외부 네트워크가 아닌 현재 컴퓨터에서만 접근 가능한 서버를 실행합니다.

Windows:
py -m http.server 8000 --bind 127.0.0.1

macOS·Linux:
python3 -m http.server 8000 --bind 127.0.0.1

터미널에 ‘Serving HTTP’와 127.0.0.1:8000이 표시되면 서버가 요청을 기다리는 중입니다. 이 터미널은 그대로 둡니다.

2. 브라우저에서 http://127.0.0.1:8000/ 을 엽니다. index.html 내용이 보이고 서버 터미널에는 GET 요청과 200 상태가 기록됩니다.

3. 새 터미널을 열어 응답 전체를 확인합니다.

Windows PowerShell:
curl.exe -i http://127.0.0.1:8000/

macOS·Linux:
curl -i http://127.0.0.1:8000/

첫 줄에서 200 상태를, Content-Type 같은 헤더를, 빈 줄 아래에서 HTML 본문을 찾으세요. 존재하지 않는 주소인 /missing을 요청하면 404가 표시됩니다. 실습이 끝나면 서버 터미널에서 Ctrl+C로 종료합니다.

[흔한 실수]

서버 터미널을 닫은 뒤 브라우저만 새로고침하면 연결할 수 없습니다. 서버를 실행한 폴더가 다르면 index.html 대신 폴더 목록이나 404가 나올 수 있습니다. 8000 포트가 이미 사용 중이라는 오류가 나면 기존 실습 서버를 종료하거나 8001처럼 다른 번호를 사용하고 URL도 맞춰야 합니다. 404는 서버 전체가 죽었다는 뜻이 아니라 요청한 경로의 자원을 찾지 못했다는 응답입니다.

[보안 주의]

Python 공식 문서는 http.server가 프로덕션용이 아니며 기본적인 보안 검사만 제공한다고 경고합니다. 이번처럼 --bind 127.0.0.1을 사용해 로컬 실습에만 쓰고 인터넷에 공개하지 마세요. URL에 비밀번호·토큰·주민번호를 넣으면 기록에 남을 수 있습니다. 실제 서비스는 HTTPS를 사용하고, 서버는 모든 외부 입력을 길이·형식·권한 기준으로 검증해야 합니다.

[직접 해볼 과제]

같은 폴더에 about.html을 만들고 자기소개 대신 ‘학습 목표’처럼 공개 가능한 내용만 작성하세요. /about.html과 /missing을 각각 curl로 요청해 200과 404 응답의 첫 줄·헤더·본문 차이를 표로 정리해 보세요.

[확인문제]

1. 서버는 반드시 별도의 고성능 컴퓨터여야 하나요?
2. HTTP 요청과 응답에는 각각 어떤 정보가 들어가나요?
3. --bind 127.0.0.1을 사용하는 보안상 이유는 무엇인가요?

[다음 학습]

다음 게시 과정은 DB-001 ‘표·행·열·키와 관계형 데이터베이스’입니다. BACK 트랙의 다음 단계는 BACK-002 ‘HTTP 메서드·상태코드·헤더’입니다.

[공식 참고 자료]

IETF RFC 9110 — HTTP Semantics
https://www.rfc-editor.org/rfc/rfc9110.html

MDN — HTTP messages
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages

Python 공식 http.server 문서
https://docs.python.org/3/library/http.server.html

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

PC 버전으로 보기