안드로이드 앱 개발을 하면 Firebase, Aws 등 서버를 제공해주는 서비스들이 있다. 이러한 서비스들 덕분에 당장 내 주머니에 서버 컴퓨터를 구매할 돈이 없더라도, 서버를 사용하는 나만의 서비스를 출시해볼 수 있다. 일정 기준까지 무료다. 실제로 우리가 사용하는 앱 중 대다수가 이러한 서비스를 사용한다.
흠, 근데 서버가 뭐고, 왜 우리는 서버를 사용해야 하고, 또 클라이언트가 뭔데. 그리고 왜 이들을 묶어서 서버-클라이언트 아키텍처라고 불리우는 것이 존재하는지 알아보자.
네트워크, 서버, 클라이언트
먼저 네트워크에 대해 간략하게 알아볼 필요가 있다. 밑의 그림은 우리가 사용하는 네트워크 시스템이 어떻게 이루어져있는지 간략하게 볼 수 있는 그림이다. 그림을 통해 네트워크를 쉽게 이해해보자!
네트워크 기초
- Network
데이터의 이동
- 만약 당신이 300km 떨어진 친구 A에게 카카오톡 메세지를 보냈다. 요즘은 통신 속도가 워낙 빨라서 즉시 그 친구가 메세지를 받아볼 수 있지만, 이는 메세지 데이터가 순간이동한 것이 절대 아니다. 300km를 순식간에 이동한 것이다.
- 이 0.1초도 안 걸리는 데이터 이동에는 정말 다양한 과정, 수많은 프로토콜 사용이 함축되어 있지만, 우선은 데이터의 이동이 네트워크다! 정도로 짚고 넘어가자.
- Router
데이터들이 이동하며 거쳐 가는 네트워크 장치
- 라우터는 TMI다. 그냥 그림 보고 궁금해 하실 것 같아서 넣었다. 위의 그림에서 호떡 모양에 X 찍혀있는 것들이 보인다. 이들은 Router라 불리우는 네트워크 장치다. 그리고 이 Router들 사이사이마다 이어진 선이 보인다. 이 선들과 라우터들을 통해 데이터들이 이동한다고 이해하면 된다.
- End System
네트워크 종단(끝)에 위치해서 네트워크를 활용하는 장치
- 위의 그림에서 화살표 끝이 가르키는 자동차, 노트북, 휴대폰, 서버 컴퓨터 등등이 보인다. 이들은 네트워크 시스템의 종단(제일 가장자리)에 위치해서 네트워크를 활용한다.
- 네트워크 시스템의 종단에 위치해 있는 장치라서 end System이라 불린다. 네트워크 측면에서는 network edge라고도 불린다. 네트워크의 제일 가장자리에 있는 것들이라는 뜻이다. 이 End System은 응용 프로그램을 실행하기 때문에 host라고도 불린다.
왜 이리 많냐- 이제 우리가 공부할 단어들이 나온다. 이 End System은 클라이언트와 서버로 나뉜다.
클라이언트, 서버
- Server
클라이언트에게 데이터를 제공하는 역할의 End System- Client
서버에 데이터를 요청하고, 받는 받는 역할의 End System설명이 짜다. 그리고 설명도 조금 이상하다. 보통 우리가 생각한 서버라고 함은
이렇게.. 거대한 데이터를 저장하고 있는 컴퓨터 아니던가? 클라이언트에게 데이터를 제공하는 엄청나게 큰 서버 컴퓨터라고 설명해주면 좋지 않은가!! 아니다. 서버는
당신의귀여운스마트폰도 서버가 될 수 있다. 대표적인 예로 P2P(Peer to Peer) architecture가 있다.
P2P 네트워크에서는 거대한 데이터 서버가 없다. 당신의 스마트폰이 다른 스마트폰에 데이터를 제공하는 서버 역할을 하기도 하고, 다른 스마트폰에게 데이터를 요청하고 제공 받는 클라이언트 역할을 하기도 한다.
따라서 서버/클라이언트의 기준은 엄청나게 큰 컴퓨터인가/아닌가 가 아니라, "데이터를 제공하는 역할인가/요청하고 제공받는 역할인가" 의 기준으로 나뉘어진다는 것을 기억하자!
우리는 이제 네트워크 시스템이 무엇인지. 네트워크 시스템 내에서 클라이언트, 서버의 역할이 무엇인지에 대해서 안다. 그럼 이제 Client-Server architecture가 무엇인지 감이 오지 않는가?
(데이터를 요청하고 제공받는)클라이언트 - (데이터를 제공하는)서버 구조
우리의 스마트폰(Client)로 인스타그램 앱을 들어가면 자동으로 게시물 데이터를 요청한다. 인스타그램 서버(Server)는 요청에 대한 응답으로 게시물 데이터들을 보낸다. 제공 받은 게시물 데이터를 우리 스마트폰(Client)의 인스타그램 앱 피드에 띄운다. 우리는 이런 네트워크 구조가 적용된 인스타그램 앱을 사용하는 것이다.
이것이 클라이언트-서버 구조이다. 다음으로 우리는 무엇을 배워야될까?
위에서 인스타그램 앱 사용을 예시로 해당 구조의 동작 방식을 알게되었다. 가만 보니 계속 언급되고 있는 키워드가 있다. 바로 요청, 응답이다. 클라이언트는 데이터 전송을 요청하고, 서버는 요청에 대한 응답과 동시에 데이터를 전송한다고 한다.
이제 데이터 전송 요청과 응답에 대해 공부하면, 클라이언트-서버 구조를 구현하여 사용할 수 있지 않을까? 그래서 다음 글은 이와 관련된 REST가 될 예정이다. 다음 글로 이동하자.