Browser

브라우저는 가장 많이 사용되는 응용 소프트웨어로, 주요 기능은 사용자가 선택한 자원을 서버에 요청하고 표시하는 것이다. 자원은 보통 html문서이지만, pdf나 이미지 또는 다른 형태일 수 있다. 누군가 작성한 html, css코드를 화면으로 띄워준다는 의미에서 볼 때, 작성한 코드를 컴퓨터가 알아들을 수 있도록 바꿔주는 일을 한다고 할 수 도있다. 컴퓨터는 1010101...의 비트만을 해설하지만, 브라우저 덕분에 자바스크립트, html, css만으로도 볼 수 있는 것이다.

여기까지만 봤을 때도 브라우저의 기능은 단순 화면 표시만이 아닌 것을 알 수 있다. 통신, 해석 등 여러 기능을 하는 브라우저의 기본 구조는 다음과 같다.

사용자 인터페이스 : 주소 표시줄, 이전/다음 버튼, 북마크 메뉴 등. 요청한 페이지를 보여주는 창을 제외한 나머지 모든 부분이다.
브라우저 엔진 : 사용자 인터페이스와 렌더링 엔진 사이의 동작을 제어.
렌더링 엔진 : 요청한 콘텐츠를 표시. 예를 들어 HTML을 요청하면 HTML과 CSS를 파싱하여 화면에 표시함.
통신 : HTTP 요청과 같은 네트워크 호출에 사용됨. 이것은 플랫폼 독립적인 인터페이스이고 각 플랫폼 하부에서 실행됨.
UI 백엔드 : 콤보 박스와 창 같은 기본적인 장치를 그림. 플랫폼에서 명시하지 않은 일반적인 인터페이스로서, OS 사용자 인터페이스 체계를 사용.
자바스크립트 해석기 : 자바스크립트 코드를 해석하고 실행.
자료 저장소 : 이 부분은 자료를 저장하는 계층이다. 쿠키를 저장하는 것과 같이 모든 종류의 자원을 하드 디스크에 저장할 필요가 있다. HTML5 명세에는 브라우저가 지원하는 '웹 데이터 베이스'가 정의되어 있다.

Server

서버를 보고 데이터 베이스를 떠올릴 수 있다. 편의상 둘을 통틀어서 서버라고 말하는 것 같기는 하지만, 내부적으로는 웹 서버 - php interpreter - 데이터베이스로 이루어져 있다. 여기서 웹 서버만을 말한다. 웹 브라우저와 웹 서버의 관계는 클라이언트-서버의 관계이다. 웹 브라우저는 웹 서버에게 자원을 요청(Request)하고 웹 서버는 그에 대한 응답(Response)을 내놓는다. 클라이언트-서버의 관계는 웹서버와 데이터베이스 사이에도 적용된다. 웹 브라우저(Client)가 웹 서버(Apache Web Server)에게 데이터를 요청하면, 웹 서버는 그 데이터를 다시 데이터 베이스(MySQL Server)에게 요청을 한다. 이때는 웹 서버가 클라이언트, 데이터 베이스가 서버의 역할을 하는 것이다.
img_webarchi.jpg
php는 서버에서 돌아가는 프로그램으로, 웹서버와 데이터베이스 사이에서 요청과 응답을 해석하는 Interpreter 역할을 한다. 이고잉님의 오프라인 과정 중 한 수강생 분의 표현을 빌려서 데이터베이스-PHP-웹서버의 관계롤 말하자면, '돌고래(MySQL)의 언어를 바로 이해할 수 없어 코끼리(PHP)의 도움을 거쳐 인디언(Apache)의 언어로 보여준 것이 우리가 보는 웹사이트'이다.

HTTP

HTTP는 Hyper Text Transfer Protocol의 약자로 서버와 클라이언트(여기서는 브라우저)가 통신할 때 사용하는 규약이다. 회사에서 이메일을 주고받을 때 템플릿이 있는 경우가 있는데, 그런 것과 비슷하다고 보면 될 것 같다.

클라이언트가 서버에 요청을 보내거나 그에 대한 응답을 서버가 보낼 때 요청과 응답에 대한 정보를 담고 있는 메시지가 오고가는데, 그 메시지를 HTTP 메시지라고 한다. HTTP 메시지는 항상 어디서 오는 요청인지, 어떤 클라이언트를 이용했는지 등의 정보를 담고있는 헤더(Header)와 서버에 데이터를 보내기 위한 공간으로 활용되는 바디(Body)로 이루어져 있다.

HTTP의 큰 특징 두가지로는 무상태성(Stateless)와 무연결성(Connectionless)를 말할 수 있다. 무상태성은 http의 각 요청은 독립적이며, 특정 클라이언트의 요청 내용을 기억하지 않는 것을 뜻한다. 이 부분을 보완한 것이 쿠키나 캐싱이다. 무연결성은 한번의 요청에는 한번의 응답을 하며, 응답을 한는 순간 연결이 끊기는 것을 뜻한다.

HTTP는 TCP/IP 기반의 통신 방식이다. 통신 방식에는 서킷 방식과 패킷 방식이 있다. 서킷 방식은 통신이 이루어지지 않는 순간에도 각 지점들이 계속 연결되어 있으며, 그로 인한 자원 낭비가 있다. 패킷 방식은 평상시에는 연결이 끊어져있지만, 요청과 응답을 하며 통신을 하는 방식이다. IP(Internet Protocol)은 패킷 통신이다. IP는 최대한 빠르게 데이터를 전달하지만, 데이터의 누락이나 순서는 고려하지 않는다. 이 부분을 보완한 것이 TCP(Transmission Control Protocol)이다. TCP는 데이터의 교환이 안정적으로, 순서대로, 에러없이 이루어질 수 있도록 보증해준다.

API

API(Application Programing Interface)는 사용자가 데이터베이스의 자원을 잘 가져다 쓸 수 있게 만들어 놓은 인터페이스이다. 사용자가(클라이언트) 데이터베이스가 어떻게 생겼고 어떤 방식으로 리소스가 저장되어있는지 알지 못하더라고 그를 잘 이용할 수도록 하는 것이 목적이다. 날씨 정보 api를 사용할 때 데이터베이스에 대해 전혀 알지 못하더라도 단지 잘 정리된 api document만을 보고, 원하는 정보를 사용할 수 있다.

AJAX