말문을 트이게 하는 IT지식
이번 글은 총 8개 중 5번째 글입니다. 원활한 이해를 위해 차례로 읽어보시는 것을 추천드려요. 글 하단에 모든 시리즈를 확인하실 수 있습니다.
”서버요? 알죠 당연히. 클라이언트랑 통신하는 거잖아요.”
“클라이언트요? 알죠 당연히. 서버랑 통신하는 거잖아요.”
서버? 클라이언트? DB? 많이 들어봤으니까 당연히 알 것 같지만, 막상 서버가 뭐에요? 라고 물어보면 말문이 막히죠? 이번에는 이것들을 적당한 비유와 함께 풀어보겠습니다.
서버와 클라이언트, DB의 관계를 이해하기 위해 가상의 음식점을 하나 떠올려 봅시다. 음식점에는 테이블과 홀이 있고, 장부를 적는 카운터와 주방, 그리고 재료를 보관하는 작은 창고 또는 냉장고가 있을 겁니다. 애초에 서버와 클라이언트라는 표현은 서비스service를 제공serve하는 웨이터server와 고객client이라는 뜻의 영단어로부터 나왔습니다. 홀에서 음식을 나르고 주문을 받는 역할의 아르바이트를 ‘홀 서빙(Hall serving) 알바’라고 부르는 것, 다들 아시죠?
먼저 클라이언트에 두 가지 의미가 있다는 걸 이해해야 합니다.
1. 고객, 즉 사용자 자신 = 클라이언트
2. 사용자가 다루는 소프트웨어, 또는 컴퓨터 = 클라이언트 프로그램
위의 그림에서 1은 식탁에 앉아 주문을 하고 있는 사람까지이지만, 2번의 의미까지 생각한다면 아마 테이블이나 식기류, 웨이터까지 포함해 클라이언트라고 부를 수 있을 겁니다.
여기서 웨이터는 카운터에 고객의 주문 내용을 전달하거나, 주방에서 나온 요리를 고객에게 제공하거나 하는 일을 합니다. 이것은 클라이언트 프로그램과 서버 프로그램이 각각 API를 호출하고 그것에 응답하며 통신하는 과정과 비슷합니다.
그러면 위의 그림에서 붉은 색 영역으로 표시된 나머지 부분을 우리는 서버라고 부를 수 있을 겁니다. 서버는 DB에서 데이터를 가져와서 클라이언트에 보내주거나, 클라이언트로부터 받은 정보를 DB에 저장하거나 하는 일을 하는데요. 이것을 음식점에서 고객의 주문 내용을 장부에 적고, 창고로부터 재료를 가져와 요리해서 고객에게 제공하는 것에 비유한다면, 여기서 장부나 창고 같은 것은 DB와 역할이 비슷하다고 볼 수 있겠죠?
✨ 2번의 의미를 갖는 클라이언트 프로그램을 두고, 사용자에게 보여지고 사용자가 만지고 조작하는 ‘앞단’이라는 의미를 담아 프론트엔드 라고 부르기도 합니다. 그리고 사용자에게는 보이지 않게 뭔가 중요한 작업을 하는 부분의 프로그램을 ‘뒷단’이라는 의미의 백엔드라고 부르기도 하죠. 대부분의 서버 프로그램은 백엔드로 분류됩니다. 하지만 클라이언트 프로그램이라고 해도, 사용자에게는 보이지 않게 중요한 작업을 하는 백엔드 부분을 가질 수 있기 때문에 클라이언트 프로그램과 프론트엔드가 완전한 동의어는 아닙니다. 서버와 백엔드도 마찬가지로 동의어가 아니구요.
✨ DB도 일종의 서버입니다. 서버 프로그램 중 데이터만을 전문적으로 다루는 부분을 보안성, 효율성 등의 이유로 별도의 서버로 분리해서 운영하는 것이 일반적입니다.
이렇게 서버와 클라이언트, DB에 대해 알아보았는데요. 아직은 서버, 클라이언트가 무언지 쉽게 대답하긴 어려우실 겁니다. 다음 글에서 서버와 클라이언트 사이에 어떤 상호작용이 있는지 알아보도록 하겠습니다.
글쓴이. 공대적 문과생 (moonlygreat)
5년차 서비스/프로덕트 디자이너. 돈 안되는 재미있는 일들을 계획하는 중인 백수
3. 밤샘 개발을 줄여주는 도구들 : 라이브러리, 프레임워크, SDK
4. 한 번 보면 더 볼 일 없는 네트워크 관련 용어들
5. 갑자기 물어보면 말문이 막히는 서버와 클라이언트 → 현재글
7. 화면 크기에 반응하는 웹 UI : 반응형 웹, dp, dpi, em, rem