클라이언트와 서버
클라이언트-서버 아키텍처(Client Server Architecture)는 리소스를 사용하는 클라이언트와 리소스가 존재하는 서버를 분리시킨 모델입니다. 두 개를 분리했다는 뜻은 알겠는데, 그래서 '클라이언트'와 '서버'가 정확히 뭔데? 할 수 있습니다.
온라인 게임을 생각해 봅시다. 롤이나 오버워치를 할 때, 인터넷이 연결된 상태에서 여러 사람이 접속합니다. 실시간으로 다른 상대와 싸우고, 스킨을 구매하거나, 채팅을 할 수 있죠. 인터넷이 연결되어 있지 않으면 이런 활동을 할 수 없고요. 흔히 게임이 잘 진행되지 않으면 서버에 문제가 있다는 말도 합니다.
이렇듯 실시간으로 정보를 받아오는 곳이 '서버(Server)'입니다. 영어 단어 그대로 제공하는 주체입니다. 이런 제공을 받는 사용자의 컴퓨터가 바로 '클라이언트(Client)'가 되고요.
현대의 많은 컴퓨터 응용 프로그램들은 이런 ‘클라이언트-서버 아키텍처’에 기반을 두고 있습니다. 앞서 설명한 게임 서버나, 신상품이나 할인 정보가 계속 업데이트되는 쇼핑몰 앱을 생각해 보세요. 쇼핑몰에서 물품을 사면 실시간으로 배송 정보가 업데이트됩니다. 이렇듯 클라이언트와 서버도 종류가 다양합니다. 클라이언트는 보통 ‘플랫폼’에 따라 구분되며, 서버는 ‘무엇을 하느냐’에 따라 종류가 나뉘어집니다.
클라이언트(Client)
서버로부터 서비스나 데이터를 요청하는 컴퓨터. 보통 플랫폼에 따라 종류가 구분됩니다.
- 웹사이트 또는 웹 앱 : 브라우저를 통해 주로 이용하는 Web플랫폼
- 스마트폰/태블릿용 앱 : iOS나 안드로이드같은 스마트폰 운영체제
- 데스크탑 앱 : 윈도우 등의 데스크탑 플랫폼에서 이용하는 앱
서버(Server)
데이터를 포함하거나 네트워크의 다른 컴퓨터에서 액세스하는 기능을 제공하는 컴퓨터. 무엇을 하느냐에 따라 종류가 나뉩니다.
- 웹 서버
- 파일 서버
- 메일 서버
- 애플리케이션 서버
- 데이터베이스 서버
2티어 아키텍처/3티처 아키텍처
클라이언트-서버 아키텍처는 2티어 아키텍처(2 Tier Architecture)라고 부르기도 합니다.
일반적으로 ‘서버’는 ‘리소스를 전달’하는 역할만 담당합니다. 전달해줄 리소스는 ‘데이터베이스’라는 별도의 공간에 따로 저장되어 있습니다. 이처럼 기존 2티어 아키텍처에 데이터베이스가 추가된 형태를 3티어 아키텍처(3 Tier Architecture)라고 부릅니다.
프론트엔드-백엔드 개발자는 아키텍처에서 어떤 분야를 다루는지에 따라 구분됩니다. 클라이언트처럼 사용자가 직접 눈으로 보고, UI를 클릭/터치하는 등의 상호작용을 할 수 있는 앱을 주로 개발하면 ‘프론트엔드 개발자’라고 합니다. 서버는 사용자 눈에 직접 보이지 않게 뒤에서 작동하므로 이를 다루는 개발자를 ‘백엔드 개발자’라고 합니다.
프로토콜
클라이언트는 필요한 리소스를 ‘요청’하고, 서버는 해당 리소스를 찾아 ‘응답’합니다. 즉, 클라이언트와 서버 간의 통신은 ‘요청’과 ‘응답’으로 구성됩니다. 클라이언트가 ‘요청’을 보내야지만 서버에서 ‘응답’을 주지요. 아무 요청도 없는데 서버 마음대로 리소스를 응답하지 않습니다. 이런 통신은 어떻게 주고받는 걸까요? 이걸 알기 전 ‘프로토콜’이라는 개념을 짚고 넘어가 봅시다.
프로토콜(MDN)
프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.
프로토콜(위키백과)
통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.
커피숍을 생각해 봅시다. 주문자(클라이언트)가 카운터(서버)에서 커피를 주문할 때, 외계어로 주문한다면 원하는 커피를 받을 수 없겠죠. 컴퓨터도 마찬가지입니다. ‘정해진 규칙’에 따라 리소스를 요청해야만 원하는 리소스를 받을 수 있습니다. 이를 위해 만들어둔 체계가 ‘프로토콜’입니다.
프로토콜의 예시
프로토콜의 예시는 아주 다양합니다. 그리고 이 각자의 프로토콜마다 지켜야 하는 ‘규약’이 존재합니다. 아래 프로토콜을 당장 다 외울 필요는 없지만 상식선에서 알아두면 좋습니다. 참고로 이를 분류한 OSI 7 Layers는 컴퓨터공학과 네트워크에서 자주 등장하는 개념입니다. 해당 프로토콜이 어떤 계층(layer)에 속해 있는지 표시하고 있습니다.
OSI 7 Layers : 7. 응용 계층
- HTTP : Hyper Text Transfer Protocol. 웹에서 HTML, JSON 등의 정보를 주고받는 프로토콜
- HTTPS : Hyper Text Transfer Protocol Secure. HTTP에서 보안이 강화된 프로토콜
- FTP : File Transfer Protocol. 파일 전송 프로토콜
- SMTP : Simple Mail Transfer Protocol. 메일을 전송하기 위한 프로토콜
- SSH : Secure Shell. CLI 환경의 원격 컴퓨터에 접속하기 위한 프로토콜
- RDP : Windows 계열의 원격 컴퓨터에 접속하기 위한 프로토콜
- WekSocket : 실시간 통신, Push 등을 지원하는 프로토콜
OSI 7 Layers : 4. 전송 계층
- TCP : HTTP, FTP 통신 등의 근간이 되는 인터넷 프로토콜
- UDP : (양방향의 TCP와 다르게) 단방향으로 작동하는 프로토콜. 훨씬 단순하고 빠르지만 신뢰성은 낮다.
그 외 위키백과의 프로토콜 예시
- SFTP : Secure File Transfer Protocol
- Telnet : TErminaL NETwork
- POP3 : Post Office Protocol version 3
- SSL : Secure Socket Layer
- SOAP : Simple Object Access Protocol
- ARP : Adress Resolution Protocol
이 중 웹 애플리케이션 아키텍처에서는 클라이언트와 서버가 ‘HTTP’라는 프로토콜을 이용해 요청과 응답을 주고받습니다. ‘HTTP’를 이용해 주고받는 메시지는 ‘HTTP 메시지’라고 부릅니다.
참고 사이트
프런트엔드 개발자가 알아야하는 HTTP 프로토콜 Part 1