리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것을 아키텍처, 또는 클라이언트-서버 아키텍처 라고 합니다.
리소스를 사용하는 앱이 '클라이언트', 리소스를 제공하는 곳을 '서버'라고 부릅니다.
클라이언트와 서버는 요청과 응답을 주고받는 관게입니다. 일반적으로 서버는 리소스를 전달해주는 역할만 담당합니다. 저장하는 공간을 별도로 마련해 두는데 이 공간을 '데이터베이스'라고 부릅니다. 이렇게 데이터베이스가 추가된 형태를 3티어 아키텍처라고 부릅니다.
클라이언트는 서버로 요청을 보내고, 서버는 요청에 따른 적절한 응답을 클라이언트로 회신합니다. 필요에 따라 서버는 데이터베이스에 요청을 보내고 응답을 활용합니다.
클라이언트처럼 사용자가 눈으로 보고 상호작용할 수 있는 앱을 개발하면 프론트엔드 개발자라고 하고, 눈에 보이지 않지만 데이터베이스 등 시스템 설계나 서버를 다루면 백엔드 개발자라고 부릅니다.
클라이언트는 보통 플랫폼에 따라 구분됩니다. 브라우저를 통해 주로 이용하는 웹 애플리캐이션과, 스마트폰/태블릿 플랫폼, 데스크탑 플랫폼에서 이용하는 앱 이 있습니다.
서버는 무엇을 하느냐에 따라 종류가 달라집니다. 파일 서버는 파일을 제공하는 앱, 웹 서버는 웹 사이트에서 필요로 하는 정보들을 제공하는 앱, 메일 서버는 메일을 주고 받을 수 있게 도와주는 앱입니다. 데이터베이스도 일종의 서버라고 볼 수 있습니다.
클라이언트와 서버간 통신은 요청과 응답으로 구성되고, 요청이 있어야만 서버가 응답(리소스를 전달)합니다.
이때 요청을 위한 약속이 프로토콜입니다. 그리고 그 프로토콜이 'HTTP'입니다. 프로토콜은 다양한 방법으로 존재합니다.
'규약'이라는 측면에서 각자의 프로토콜 마다 지켜야하는 약속이 존재합니다.
🎀 OSI 7 Layers : 통신이 일어나는 과정을 단계별로 파악할 수 있습니다.
컴퓨터에게 요청할 때는, 정확한 주문방법(0과 1로 변환될 수 있는 요청)에 따라 요청합니다.
이때 서버에 적절하게 주문하도록 클라이언트에게 리소스 활용 인터페이스를 제공하는 것이 API입니다. 일종의 메뉴판 역할을 합니다. 클라이언트가 엉뚱한 요청을 하지 않도록 합니다.
Interface 는 '의사소통이 가능'하도록 만들어진 '접점'을 의미합니다. API는 앱이 요청할 수 있고, 프로그래밍 가능한 인터페이스라는 점이 메뉴판과 다릅니다.
보통 인터넷에 있는 데이터를 요청할 때에는 HTTP 프로토콜을 사용하며, 주소(URL)을 통해 접근할 수 있습니다. (URL은 파라미터(옵션)을 사용하기 위해 '?'와 '&' 기호를 사용합니다.)
HTTP 요청에는 메서드가 존재합니다. CRUD 각각의 행동과 일치하는 메서드 종류가 존재하고, HTTP API 디자인에는 Best Practice가 존재합니다.
-> GET (R.조회), POST(C.추가), PUT or PATCH(U.갱신), DELETE(D.삭제) 메서드를 행동에 맞게 적절하게 사용합니다. (갱신과 삭제는 POST로도 많이 하지만 원칙적으로는 PUT, PATCH, DELETE를 사용합니다.)
🎀 rest API (=best practice)
🎀 브라우저로 PC폴더와 파일을 탐색하는 URL
(127.0.0.1 은 로컬 PC를 나타냅니다.)
- 우분투
(username 부분에는 사용자 이름을 입력합니다.)
file://127.0.0.1/home/username/Desktop/- macOS
(username 부분에는 사용자 이름을 입력합니다.)
file://127.0.0.1/Users/username/Desktop/
URL(Uniform Resource Locator)은 네트워크 상에서 웹페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타냅니다. 가장 먼저 작성하는 scheme은 통신방식(프로토콜)을 결정합니다. hosts는 웹 서버의 이름이나 도메인, IP를 사용해 주소를 나타내고, url-path는 웹서버에서 지정한 루트 디렉토리부터 시작해 웹페이지, 이미지, 동영상 등 위치한 경로와 파일명을 나타냅니다.
URI(Uniform Resouce Identifier)은 URL에 더해 query, fragment를 포함합니다. query는 웹 서버에 보내는 추가적인 질문입니다. fragment는 일종의 북마크 기능을 수행하며 특정 HTML요소의 id를 전달하면 해당 요소가 있는 곳으로 스크롤을 이동할 수 있습니다.
🎀 동일출처정작 (SOP)
네트워크에 연결된 특정 PC의 주소를 나타내는 체계를 IP address(Internet Protocol address, IP주소)라고 합니다. 인터넷에 연결된 모든 PC는 IP주소를 가집니다.
🎀 IP주소 확인
터미널에서nslookup 주소
를 입력하면 만날 수 있습니다.
네덩이의 숫자로 구분된 IP주소 체계를 IPv4(Internet Protocol version 4) 라고 합니다. 각 덩어리마다 0~255까지 나타낼 수 있어서 약 43억개의 IP주소를 표현할 수 있습니다.
🎀 용도가 정해진 IP주소
- localhost, 127.0.0.1 : 현재 사용중인 로컬 PC를 지칭합니다.
- 0.0.0.0, 255.255.255.255 : broadcast address로 로콜 네트워크에 접속된 모든 장치와 소통하는 주소입니다. 서버에서 접근 가능한 IP주소를 broadcast address로 지정하면 모든 기기에서 서버에 접근할 수 있습니다.
인터넷 보급률이 높아지며 IPv4 할당의 한계가 생겨 나온 것이 IPv6 입니다. 2^128개의 주소를 표현할 수 있습니다.
터미널에서 리액트를 실행하면 127.0.0.1 뒤에 :3000
같은 숫자가 표현됩니다. 로컬PC의 IP주소로 접근하여 3000번의 통로를 통해 리액트를 확인하는 것입니다. 이미 사용중인 포트는 중복하여 사용할 수 없습니다.
포트 번호는 0~65535까지 사용할 수 있습니다. 그 중 0~1024번까지는 주요통신을 위한 규약에 따라 이미 정해져 있습니다.
🎀 잘 알려진 포트번호
- 22 : SSH
- 80 : HTTP
- 443 : HTTPS
?
와 쿼리문자열이 붙는 절대경로입니다.options
와 함께 *
하나로 서버 전체를 표현합니다.HTTP/1.1 404 Not Found
가 대표적인 예입니다.