테마
02. URI와 브라우저 요청 흐름
학습 목표
- URI, URL, URN의 관계를 구분할 수 있다.
- URL의 각 구성 요소가 무엇을 의미하는지 설명할 수 있다.
path,query,fragment의 차이를 실무 감각으로 이해할 수 있다.- 사용자가 URL을 입력했을 때 브라우저 안에서 어떤 일이 벌어지는지 큰 흐름을 설명할 수 있다.
- 브라우저 요청 흐름이 01장에서 배운 DNS, TCP, Port와 어떻게 이어지는지 연결해서 이해할 수 있다.
전체 구조
1. 왜 URI를 먼저 정리해야 할까?
HTTP를 공부하다 보면 URL, URI, endpoint, path, query string 같은 용어가 계속 나온다.
그런데 이 단어들의 관계가 머릿속에서 정리되지 않으면, 뒤에서 API 설계나 브라우저 요청 흐름을 배울 때 계속 헷갈린다.
특히 실무에서 자주 생기는 혼동은 다음과 같다.
- URL과 URI를 완전히 다른 것으로 생각하는 경우
query와path의 역할을 섞어 생각하는 경우fragment도 서버로 전송된다고 오해하는 경우
이번 장의 목적은 이 용어들을 엄밀하게 외우는 것이 아니라, 브라우저와 서버가 무엇을 보고 통신하는지를 정확히 잡는 것이다.
2. URI, URL, URN
URI는 가장 큰 개념이다
URI(Uniform Resource Identifier)는 말 그대로 리소스를 식별하는 통합된 방식이다.
여기서 리소스는 HTML 문서만 뜻하지 않는다. 다음은 모두 리소스가 될 수 있다.
- 회원 정보
- 상품 상세 화면
- 이미지 파일
- 동영상
- 검색 결과
- 실시간 교통 정보
즉, 구분하고 가리킬 수 있는 대상이라면 URI로 식별할 수 있다고 생각하면 된다.
URL과 URN의 관계
URI 아래에는 대표적으로 URL과 URN이 있다.
URL: 위치로 식별
URL은 리소스가 어디 있는지를 알려주는 방식이다.
예:
https://example.com/members/100https://example.com/search?q=http
브라우저에서 주소창에 입력하는 대부분의 값이 URL이다.
URN: 이름으로 식별
URN은 리소스의 이름 자체를 부여하는 방식이다.
예:
urn:isbn:8960777331
이름 자체는 안정적일 수 있지만, 실제 웹에서 “그 이름만으로 바로 리소스를 찾아가는” 체계는 보편적으로 쓰이지 않는다.
그래서 일반 웹 개발에서는 URI를 설명할 때 사실상 URL 중심으로 이해해도 충분하다.
실무 기준 정리: 개념적으로는
URI > URL관계를 알고, 실전에서는 대부분 URL을 다룬다고 보면 된다.
3. URL은 어떤 조각으로 이루어져 있을까?
다음 URL을 예시로 보자.
text
https://www.example.com:443/members/100?tab=profile&lang=ko#activity이 URL은 다음 요소로 나눌 수 있다.
URL 구성 요소 정리
| 요소 | 예시 | 의미 | 실무 메모 |
|---|---|---|---|
scheme | https | 어떤 방식으로 접근할지 | http, https, ftp 등이 있음 |
host | www.example.com | 접속할 서버 이름 | 도메인 또는 IP 주소 |
port | 443 | 서버 안의 어느 프로그램으로 갈지 | 생략 가능, http=80, https=443 |
path | /members/100 | 리소스의 계층적 경로 | 보통 디렉터리처럼 설계 |
query | ?tab=profile&lang=ko | 추가 조건/파라미터 | key=value, 여러 개면 &로 연결 |
fragment | #activity | 문서 내부 위치 정보 | 서버로 전송되지 않음 |
scheme
scheme은 보통 프로토콜 정보를 담는다.
http면 기본 포트는80https면 기본 포트는443
그래서 https://example.com처럼 포트를 생략해도, 브라우저는 기본적으로 443을 떠올린다.
host
host는 목적지 서버다. 보통 도메인 이름이 오지만, IP 주소를 직접 넣을 수도 있다.
www.example.com203.0.113.10
path
path는 리소스의 경로다. 보통 계층 구조처럼 설계한다.
예:
/members/members/100/products/iphone-16
이 구조를 잘 설계하는 것이 뒤에서 배울 리소스 중심 URI 설계의 출발점이다.
query
query는 ?로 시작하고, 주로 key=value 형태로 전달된다.
예:
?q=http?page=2&sort=latest
이 값은 보통 검색, 필터, 정렬, 페이지 번호 같은 추가 조건을 전달할 때 많이 사용한다.
userinfo
URL 문법에는 userinfo도 있지만, 브라우저 기반 웹 개발에서는 거의 사용하지 않는다.
그래서 실무에서는 보통 scheme, host, port, path, query, fragment 정도를 중심으로 보면 충분하다.
4. Query와 Fragment는 무엇이 다를까?
둘 다 URL 뒤쪽에 붙기 때문에 헷갈리기 쉽다.
하지만 브라우저와 서버 입장에서 보면 역할이 완전히 다르다.
Query는 서버에 전달된다
예:
text
https://example.com/search?q=http&lang=ko서버는 여기서 /search와 q=http, lang=ko를 보고 검색 결과를 만들 수 있다.
Fragment는 서버에 전달되지 않는다
예:
text
https://example.com/docs#install브라우저는 서버에 /docs를 요청한다.#install은 브라우저가 응답 문서를 받은 뒤, 그 문서 안의 특정 위치로 스크롤하거나 이동할 때 사용한다.
| 항목 | Query | Fragment |
|---|---|---|
| 시작 문자 | ? | # |
| 서버 전송 여부 | 전송됨 | 전송되지 않음 |
| 주 용도 | 검색, 필터, 옵션 전달 | 문서 내부 북마크, SPA 라우팅 등 |
핵심 암기 포인트:
query는 서버가 읽고,fragment는 브라우저가 읽는다.
5. 브라우저는 URL을 입력받으면 무엇을 할까?
이제 01장에서 배운 네트워크 흐름과 URL 개념을 연결해 보자.
사용자가 주소창에 URL을 입력하면 브라우저는 대략 다음 순서로 움직인다.
- URL을 해석한다.
host를 DNS로 조회한다.scheme에 따라 port를 정한다.- 서버와 TCP 연결을 맺는다.
- HTTP 요청 메시지를 만든다.
- 서버 응답을 받는다.
- HTML을 파싱하고 추가 리소스를 요청한다.
- 최종 화면을 렌더링한다.
단계로 보기
URL 입력은 해석, 조회, 연결, 요청, 렌더링으로 이어진다
1 / 5URL 해석
브라우저는 입력값에서 scheme, host, path, query를 분리해 어디로 어떤 요청을 보낼지 정한다.
스스로 확인
브라우저가 HTTP 요청을 보내기 전에 반드시 해결해야 하는 준비 작업은 무엇일까?
요청 흐름을 그림으로 다시 보면
6. 브라우저는 어떤 HTTP 요청을 만들까?
예를 들어 사용자가 다음 URL을 입력했다고 하자.
text
https://www.example.com/search?q=http&lang=ko브라우저는 내부적으로 대략 이런 요청을 만든다.
http
GET /search?q=http&lang=ko HTTP/1.1
Host: www.example.com여기서 주목할 점은 다음과 같다.
- 메서드는 일단
GET - 서버로 가는 대상은
path + query Host헤더로 어느 도메인을 요청하는지 알린다
서버는 응답으로 대략 이런 형태를 돌려준다.
http
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 3421
<html>...</html>이 응답을 받은 브라우저는 HTML을 바로 화면에 그리는 것이 아니라, 먼저 파싱한다.
그 과정에서 CSS, JavaScript, 이미지가 더 필요하면 추가 요청을 보낸다.
중요한 감각: 브라우저가 한 번 요청해서 한 번 응답 받고 끝나는 경우도 있지만, 실제 화면 하나를 그리기 위해서는 여러 개의 추가 요청이 이어지는 경우가 많다.
7. 정리
이번 장의 핵심은 세 가지다.
- URI는 상위 개념이고, 실무에서는 URL 중심으로 이해하면 된다.
- URL은 scheme, host, port, path, query, fragment 같은 조각으로 이루어진다.
- 브라우저는 URL을 입력받으면 DNS 조회, 연결, HTTP 요청/응답, 파싱, 렌더링 순서로 동작한다.
다음 장에서는 이 흐름 위에서 HTTP가 가지는 더 본질적인 성격, 즉 클라이언트-서버 구조, 무상태, 비연결성을 정리한다.
핵심 암기 포인트
URI: 리소스를 식별하는 상위 개념.
URL: 리소스의 위치로 식별하는 방식. 실무에서 대부분 이것을 사용한다.
URN: 리소스의 이름으로 식별하는 방식. 일반 웹 개발에서는 드물다.
path: 리소스의 계층적 경로.
query: 서버에 전달되는 추가 조건 정보.
fragment: 브라우저 내부에서만 사용하는 위치 정보. 서버로 전송되지 않는다.
브라우저 요청 흐름: URL 해석 → DNS → 연결 → HTTP 요청 → HTTP 응답 → 파싱 → 렌더링.
확인 질문
- URI와 URL의 관계를 한 문장으로 설명하면 어떻게 표현할 수 있을까?
https://example.com/products/10?view=full#review에서 서버가 실제로 받는 정보는 어디까지일까?scheme과port는 왜 서로 연결해서 이해해야 할까?query와fragment는 왜 용도와 동작 방식이 완전히 다를까?- 브라우저가 HTML 응답을 받은 뒤에도 추가 요청을 보내는 이유는 무엇일까?