개발 4년 차에 접어들고 있는 시점에서 다시 기본 지식을 되짚어볼 필요성이 느껴졌기 때문에 책 읽기 스터디를 구성했다.
스터디는 인원은 2명으로 각자 정한 책을 1주일 동안 일정 부분 읽고 상대방에게 설명하면, 상대방은 그 부분을 읽어오는 방식으로 진행한다. 두 가지 책을 동시에 효과적으로 읽을 수 있을 거라고 예상한다. 기간은 6주에서 8주이다.
내가 정한 책은 HTTP 완벽 가이드이다. API 서버, 인프라 등을 작업하는 개발자로서 이 책을 선택했다.

1주차 진행 내용
1. HTTP: 웹의 기초
01. HTTP 개관
02. URL과 리소스
03. HTTP 메시지
HTTP (Hypertext Transfer Profocol) 간단 설명
HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용한다.(전송 중 손상 X, 순서 변경 X)
HTTP는 웹에서 전송되는 객체 데이터에 MIME(Multipurpose Internet Mail Extensions) 타입을 붙인다.
트랜잭션은 요청 명령(클라이언트 -> 서버)과 응답 결과(서버 -> 클라이언트)로 구성되어 있다.
URI (uniform resource idenifier, 통합 자원 식별자)
URI는 정보 리소스를 고유하게 실별하고 위치를 지정할 수 있다.
URL과 URN으로 나눠지는데 통상적으로 URI를 말하면 URL을 말하고 대부분의 URI는 URL이다.
https://datatracker.ietf.org/doc/html/rfc3986
RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along wit
datatracker.ietf.org
URN (uniform resource name, 유니폼 리소스 이름)
리소스의 위치에 영향을 받지 않는 유니크한 이름 역할의 리소스 식별자이다. 리소스가 옮겨지면 사용하지 못하는 URL의 단점을 보완할 수 있지만 리소스 위치를 분석하기 위한 인프라 자원이 많이 들어가 통상적으로 사용되지는 못하고 있다.
URL (uniform reource locator, 통합 자원 지시자)
1. 첫 번째 부분은 schema 이며 프로토콜을 서술
2. 두 번째 부분은 서버의 인터넷 주소를 제공
3. 마지막은 웹 서버의 리소스를 가리킨다.
https://ko.wikipedia.org/wiki/URL
URL은 상대 URL과 절대 URL 두 가지로 나뉜다.
[절대 URL]
리소스에 접근하는데 필요한 모든 정보를 가지고 있는 것이 절대 URL이다.
[상대 URL]
상대 URL은 일부 정보만 존재하기 때문에 base라고 하는 다른 URL을 사용해야 한다.
프래그먼트이거나 URL의 일부이기 때문에 애플리케이션은 상대 URL과 절대 URL을 상호 변환할 수 있어야 한다.
- 장점
- 짧게 표현 가능하다.
- 문서 집합의 위치가 변경되더라도, 새로운 base URL에 의해서 해석되기 때문에 정상 동작한다.
URL 문자열 인코딩
이스케이프 문자열은 US-ASCII(문자를 서식화하고 하드웨어상에서 신호를 주고받기 위해, 7비트를 사용하여 영문 자판에 있는 키 대부분과 몇몇 출력되지 않는 제어 문자를 표현)에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩할 수 있게 한다.
인코딩은 안전하지 않은 무자를 %부터 시작해, ASCII코드로 표현되는 두 개의 16진수 숫자로 이루어진 '이스케이프'문자로 바꾼다. 브라우저는 이러한 문자를 전송하기 전에 내부적으로 다른 인코딩으로 변환해야 한다.
https://en.wikipedia.org/wiki/Query_string#URL_encoding
Query string - Wikipedia
From Wikipedia, the free encyclopedia Part of a URL that assigns values to specified parameters A query string is a part of a uniform resource locator (URL) that assigns values to specified parameters. A query string commonly includes fields added to a bas
en.wikipedia.org
https://en.wikipedia.org/wiki/Percent-encoding
Percent-encoding - Wikipedia
From Wikipedia, the free encyclopedia Method of encoding characters in a URI URL encoding, officially known as percent-encoding, is a method to encode arbitrary data in a uniform resource identifier (URI) using only the US-ASCII characters legal within a U
en.wikipedia.org
HTTP 메서드
GET, PUT, DELETE, POST, PATCH, HEAD, OPTION 등 용도에 맞는 메서드가 존재한다.
메서드 사용 요약
- GET: 서버의 문서를 가져온다.
- HEAD: 헤더 정보만 가져온다.
- POST: 데이터와 함께 처리를 요청한다.
- PUT: 본문을 저장 또는 교체한다.
- TRACE: 프록시를 거친 과정을 추적한다.
- OPTIONS: 서버가 어떤 메서드를 허용하는지 확인한다.
- DELETE: 서버의 리소스를 제거한다.
HTTP 상태 코드
모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다. 숫자 상태 코드는 텍스트로 된 reacom phrase도 함께 보낸다.
주로 사용되는 코드들이 존재한다. 클라이언트 에러, 서버 상태 관련된 코드로 리소스 변경, 보안 등의 상태를 나타내는 코드는 알아두는 것이 편하다.
상태 코드 요약
- 100-199: 정보성 상태코드
- 200-299: 성공
- 300-399: 리다이렉션 상태 코드
- 400-499: 클라이언트 에러
- 500-599: 서버 에러 상태 코드
https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/
[웹 프로그래밍] HTTP 상태 코드 표(100 ~ 500) 전체 요약 정리
서버에서의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드(status code)를 보고 파악할 수 있습니다. 상태 코드는 세 자리 숫자로 되어 있는데 첫 번째 숫자는 HTTP 응답의 종류를 구분하는
hongong.hanbit.co.kr
HTTP 응답 메시지
시작줄, 헤더, 본문으로 구성되며 시작줄에는 요청에서 원하는 것이 무엇인지, 응답에서 어떤 상태가 벌어졌는지 알려준다.
헤더
- 일반/요청/응답/엔터티/확장으로 크게 다섯 가지로 구분된다.
요청 헤더의 User-Agent, Clinet_IP(프록시를 거쳤다면 x-forwarded-for)등 유저 정보와, 보안 헤더의 Authorization, Cookie, Set-Cookie 등 보안 관련된 헤더는 직접 헤더에서 추출해서 로깅할 필요가 있음으로 기억하자.
TCP/IP
TCP와 IP가 층을 이루는, 패킷 네트워크 프로토콜의 집합으로 오류 X, 순서 변경 X, 데이터 스트림 조각 X의 신뢰성 있는 인터넷 전송 프로토콜이다. 이 계층에서 HTTP는 애플리케이션 계층에 속한다.
HTTP 클라이언트가 서버에 메시지를 전송하기 전에 IP 주소와 포트번호를 사용하여 클라이언트와 서버 사이에 TCP/IP 커넥션을 맺는다.
ex) https://dungdung-developer.tistory.com/ 요청 (HTTP 프로토콜이라고 가정)
1. 웹브라우저는 서버의 URL에서 호스트명을 추출한다.
2. 웹브라우저는 DNS를 통해 서버의 호스트 명을 IP로 변환한다.
3. 웹브라우저는 서버에게 HTTP 요청을 보낸다.
4. 서버는 웹브라우저에게 HTTP 응답을 돌려준다.
5. 커넥션이 닫히면, 웹브라우저는 문서를 보여준다.
