파이어폭스, 크롬 등과 같은 오픈소스 브라우저를 예로 들어 설명함.
URI(Uniform Resource Identifier)
에 의해 정해진다.과거 각각의 브라우저들은 이 명제의 일부만 따르고 독자적인 방법을 추구해서 호환성에 문제가 있었음.
(현재는 대부분의 브라우저는 표준을 따른다.)
HTML5 명세는 주소 표시줄, 상태 표시줄, 도구 모음과 같은 일반적인 요소를 제외하고 브라우저의 필수 UI를 정의하지 않았지만, 시간이 흐르면서 현재와 같은 장정만 남아있는 상태로 유지됨.
크롬은 대부분의 브라우저와 달리 각 탭마다 별도의 렌더링 엔진 인스턴스를 유지한다.
각 탭은 독립된 프로세스에서 실행된다.
통신을 통해 요청된 내용을 가져오는 것으로 시작하는데 단위는 보통 8KB 단위로 진행된다.
다음은 렌더링 엔진의 기본 흐름이다.
"렌더링 엔진은 HTML 문서를 파싱하고 "콘텐츠 트리" 내부에서 태그를 DOM 노드로 변환한다. 그 다음 외부 CSS 파일과 함께 포함된 스타일 요소도 파싱한다. 스타일 정보와 HTML 표시 규칙은 "렌더 트리"라고 부르는 또 다른 트리를 생성한다.
렌더 트리는 색상 또는 면적과 같은 시각적 속성이 있는 사각형을 포함하고 있는데 정해진 순서대로 화면에 표시된다.
렌더 트리 생성이 끝나면 배치가 시작되는데 이것은 각 노드가 화면의 정확한 위치에 표시되는 것을 의미한다. 다음은 UI 백엔드에서 렌더 트리의 각 노드를 가로지르며 형상을 만들어 내는 그리기 과정이다.
일련의 과정들이 점진적으로 진행된다는 것을 아는 것이 중요하다. 렌더링 엔진은 좀 더 나은 사용자 경험을 위해 가능하면 빠르게 내용을 표시하는데 모든 HTML을 파싱할 때까지 기다리지 않고 배치와 그리기 과정을 시작한다. 네트워크로부터 나머지 내용이 전송되기를 기다리는 동시에 받은 내용의 일부를 먼저 화면에 표시하는 것이다."
위의 말은 많이 어렵다......
HTML, CSS 등의 파일을 해석하여서 웹 페이지를 표시하는 하나의 과정이다.
웹킷을 예로 들어 기본흐름을 설명하자면 아래와 같다.
파싱은 예를 들어 HTML, CSS, JAVASCRIPT 등과 같은 언어로 쓰여진 문서 파일을 해석하여 웹 페이지를 구현하는 것과 C, C++ 등과 같은 언어로 쓰여진 문서 파일을 컴파일하는 등의 예시가 있다.
이러한 예시를 들어 한마디로 "프로그래밍 언어로 된 문서 파일을 해석한다."는 의미이다.
문서 객체 모델(The Document Object Model, 이하 DOM) 은 HTML, XML 문서의 프로그래밍 interface 이다. DOM은 문서의 구조화된 표현(structured representation)을 제공하며 프로그래밍 언어가 DOM 구조에 접근할 수 있는 방법을 제공하여 그들이 문서 구조, 스타일, 내용 등을 변경할 수 있게 돕는다. DOM 은 구조화된 nodes와 property 와 method 를 갖고 있는 objects로 문서를 표현한다. 이들은 웹 페이지를 스크립트 또는 프로그래밍 언어들에서 사용될 수 있게 연결시켜주는 역할을 담당한다.
여기까지 브라우저의 동작방법 정리를 마침. 더 깊게 들어가면 프런트엔드의 전문성을 가지는 방향이다.
구분 | 쿠키(Cookie) | 세션(Session) |
---|---|---|
저장위치 | Client | Server |
저장형식 | Text | Object |
만료시점 | 쿠키 저장시 설정 (설정을 안하면 브라우저 종료 시 삭제) | 정확한 시점 모름 |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 1개의 도메인 당 20개, 1개의 쿠키당 4KB | 제한없음 |
이거 말고도 상태코드는 더 많음.
상태코드 | 이름 | 의미 |
---|---|---|
100 | Continue | 현 상태 괜찮음. 통신 해도됨. |
101 | Switching Protocol | 서버에서 프로토콜 변경함을 알림 |
상태코드 | 이름 | 의미 |
---|---|---|
200 | OK | 요청 성공(GET) |
201 | Create | 생성 성공(POST) |
202 | Accepted | 요청 접수O, 리소스 처리X |
204 | No Contents | 요청 성공O, 내용 없음 |
상태코드 | 이름 | 의미 |
---|---|---|
300 | Multiple Choice | 요청 URI에 여러 리소스가 존재 |
301 | Move Permanently | 요청 URI가 새 위치로 옮겨감 |
304 | Not Modified | 요청 URI의 내용이 변경X |
상태코드 | 이름 | 의미 |
---|---|---|
400 | Bad Request | API에서 정의되지 않은 요청 들어옴 |
401 | Unauthorized | 인증 오류 |
403 | Forbidden | 권한 밖의 접근 시도 |
404 | Not Found | 요청 URI에 대한 리소스 존재X |
405 | Method Not Allowed | API에서 정의되지 않은 메소드 호출 |
406 | Not Acceptable | 처리 불가 |
408 | Request Timeout | 요청 대기 시간 초과 |
409 | Conflict | 모순 |
429 | Too Many Request | 요청 횟수 상한 초과 |
상태코드 | 이름 | 의미 |
---|---|---|
500 | Internal Server Error | 서버 내부 오류 |
502 | Bad Gateway | 게이트웨이 오류 |
503 | Service Unavailable | 서비스 이용 불가 |
504 | Gateway Timeout | 게이트웨이 시간 초과 |
REST(REpresentational State Transfer) - 웹 서비스에서 많이 사용되는데 Application 사이에 결합도를 낮추게끔 설계하는 아키텍처 스타일, 서버 / 클라이언트가 별도로 구축
"REST API"
를 "RESTful API"
라고도 함.구성요소 | 내용 | 표현 방법 |
---|---|---|
Resource | 자원 | HTTP URI |
Verb | 자원에 대한 행위 | HTTP Method |
Representations | 자원에 대한 행위의 내용 | HTTP Message Payload |
HTTP Message Payload
데이터를 전송 할 때 헤더와 메타데이터, 메소드, 에러 체크 비트 등과 같은 다양한 요소들을 함께 보내어, 데이터 전송의 효율과 안정성을 높히게 됩니다.
보내고자 하는 데이터 자체를"Payload"
라고 한다.
Method | 의미 | Payload | Idempotent(멱등성) |
---|---|---|---|
GET | Select(조회) | X | O |
POST | Create(생성) | O | X |
PUT | Update(전체를 변경할 때) | O | O |
DELETE | Delete(삭제) | X | O |
PATCH | Update(일부를 변경할 때) | O | O |
"PATCH"
는"PUT"
을 이용하여 데이터의 일부만 변경하는 것이 REST API의 규칙을 위반하는 방식이기 때문에 생겼다고 한다.
PATCH에 관련된 내용 참조
Idempotent(멱등성) :"몇 번이고 같은 내용을 수행하였을 때 같은 결과를 만들어 내는가?"
에 대한 내용
REST에서 가장 중요한 기본적인 규칙은 2개이다.
URI는 자원을 표현하는 데에 집중하고 행위에 대한 정의는 HTTP Method를 통해 하는 것이 REST한 API를 설계하는 중심 규칙이다.
1. URI는 정보의 자원을 표현해야 한다.
# 옳은 방식
GET /item/1
# 잘못된 방식
GET /getItem/1
GET /item/show/1
2. 자원에 대한 행위는 HTTP Method로 표현한다.
# 옳은 방식
DELETE /item/1
# 잘못된 방식
GET /item/delete/1
1. Uniform interface
Uniform interface가 필요한 이유는
"독립적 진화"
1. 서버와 클라이언트가 각자 독립적으로 진화함.
2. 서버의 기능이 변경되어도 클라이언트를 업데이트 할 필요가 없다.
3. REST를 만들게 된 계기 : "How do I improve HTTP without breaking the Web"
2. Client–server
3. Stateless
4. Cacheable
5. Layered system
6. Code on demand (선택사항)