- 클라이언트-서버 아키텍처를 이해할 수 있다.
- HTTP를 이용한 클라이언트-서버 통신을 이해할 수 있다.
- API의 개념을 이해할 수 있다.
상품 정보 같은 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것
리소스를 사용하는 앱이 "클라이언트"
리소스를 제공(serve)하는 곳은 "서버"
클라이언트와 서버는 요청과 응답을 주고받는 관계로,
클라이언트-서버 아키텍처에서는 요청이 선행되고 그 후에 응답이 온다
일반적으로 서버는 리소스를 전달해 주는 역할만 담당한다.
리소스를 저장하는 공간을 별도로 마련해 두는데, 이 공간을 "데이터베이스"라고 한다.
즉, 데이터베이스는 창고와 같은 역할
➡ 이처럼 기존 2티어 아키텍처에 데이터베이스가 추가된 형태를 3티어 아키텍처라고 한다
클라이언트처럼 사용자가 직접 눈으로 보고, UI를 클릭 또는 터치하는 등의 상호작용을 할 수 있는 앱을 주로 개발하게 되는 것이 프론트엔드 개발자이다.
서버앱은 사용자 눈에 직접 보이지 않게 뒤에서 작동되므로 백엔드라고 칭한다.
클라이언트
iOS나 안드로이드와 같은 스마트폰/태블릿 플랫폼, 그리고 윈도우와 같은 데스크탑 플랫폼에서 이용하는 앱
서버
서버는 "무엇을 하느냐" 에 따라 종류가 달라진다.
반드시 클라이언트에서의 요청이 있어야 서버는 리소스를 전달한다.
결코 마음대로 전달하지 않는다.
클라이언트와 서버 간의 통신을 알아보려면, 먼저 프로토콜이라는 개념을 이해해야한다.
통신 규약, 즉 약속
웹 애플리케이션 아키텍처에서는 클라이언트와 서버가 서로 HTTP라는 프로토콜을 이용해서 서로 대화를 나누게 되는데, 이렇게 HTTP를 이용해 주고받는 메시지를 "HTTP 메시지"라고 함
프로토콜은 다양한 종류가 존재하는데, 각각의 프로토콜마다 지켜야하는 규약이있다.
7. 응용 계층
프로토콜 이름 | 설명 |
---|---|
HTTP | 웹에서 HTML, JSON 등의 정보를 주고받는 프로토콜 |
HTTPS | HTTP에서 보안이 강화된 프로토콜 |
FTP | 파일 전송 프로토콜 |
SMTP | 메일을 전송하기 위한 프로토콜 |
SSH | CLI환경의 원격 컴퓨터에 접속하기 위한 프로토콜 |
RDP | Windows 계열의 원격 컴퓨터에 접속하기 위한 프로토콜 |
WebSocket | 실시간 통신, Push 등을 지원하는 프로토콜 |
6. 표현 계층
5. 세션 계층
4. 전송계층
프로토콜 이름 | 설명 |
---|---|
TCP | HTTP, FTP 통신 등의 근간이 되는 인터넷 프로토콜 |
UDP | (양방향의 TCP와는 다르게) 단방향으로 작동하는 훨씬 더 단순하고 빠르지만, 신뢰성이 낮은 인터넷 프로토콜 |
3. 네트워크 계층
2. 데이터 링크
1. 물리
7. 응용 계층
에 속한다 클라이언트 측은 서버를 직접 짠 것이 아니기 때문에 어떻게 구성되어 있는지 알 수 없다.
그렇다면 어떻게 사용가능한 자원을 파악할 수 있을까?
그러기 위해 서버는 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스(interface)를 제공해 줘야 하는데, 이것을 API라고 한다.
즉, 서버에서 이용가능한 리소스를 식당의 메뉴판처럼 API를 구축해서 주는 것!
클라이언트는 엉뚱한 리소스를 요청하지 않고 API에 있는 리소스만 정확히 요청할 수 있다.
보통 인터넷에 있는 데이터를 요청할 때에는 HTTP라는 프로토콜을 사용하며,
주소(URL, URI)를 통해 접근할 수 있게 된다
🏅 파라미터를 사용하기 위해 물음표(?)와 & 기호를 사용하는 것
🏅 실제로 쓰일법한 API
🏅 HTTP 요청에는 메서드라는 것이 존재
앞서 스타벅스에서는 리소스를 그저 달라고(GET) 요청했지만, 사용자 관리 API에서는 사용자를 추가해 달라고(CREATE) 요청하거나, 지워달라고(DELETE) 요청할 수도 있다.
CRUD 각각의 행동과 일치하는 HTTP 메서드의 종류가 존재
꼭 기억해야 할 다섯 가지 메서드는 다음 다섯개.
각각 조회, 추가, 갱신, 삭제와 관련이 있다.
🚨HTTP 메서드는 리소스를 이용해, 하려는 행동에 맞게 적절하게 써야 한다는 점에 주의!🚨
만일 GET 요청을 했는데 갑자기 서버에서 리소스가 지워진다면 좋은 API 디자인이라고 볼 수 없다.