네트워크에서 서버와 클라이언트는 서비스를 주고받는 관계이다

네트워크 관점에서 서버와 클라이언트는 매우 단순하게 정리할 수 있다.
서비스를 제공하는 쪽이 서버이고,
그 서비스를 제공받는 쪽이 클라이언트다.
예를 들어 웹사이트를 운영하는 서버가 있고,
사용자의 브라우저나 앱이 그 서버에 접속해 정보를 요청한다면 브라우저나 앱은 클라이언트가 된다.
이 관계에서 중요한 점은 서버는 항상 준비된 상태로 있어야 한다는 것이다.
클라이언트는 사용자가 앱을 실행할 때만 존재할 수도 있고, 요청을 한 번 보낸 뒤 사라질 수도 있다.
하지만 서버는 언제 어떤 클라이언트가 접속할지 알 수 없기 때문에,
필요한 순간에 서비스를 제공할 수 있도록 계속 동작하고 있어야 한다.
결국 서버는 클라이언트의 요청을 기다리는 입장이고,
클라이언트는 서버가 제공하는 기능에 의존하는 입장이라고 볼 수 있다.
클라이언트 수가 많아질수록 서버에는 부하가 커진다
소수의 요청만 처리할 때는 문제가 없지만
동시에 많은 사용자가 접속하면 서버는
CPU, 메모리, 네트워크, 데이터베이스 접근 등 여러 자원을 더 많이 사용하게 된다.
그래서 실제 서비스에서는 이 부하를 줄이기 위한 다양한 기법이 필요한데,
대표적인 방법에는 로드밸런싱과 캐시가 있다.
로드밸런싱은 말 그대로 하나의 서버에 몰리는 요청을 여러 서버에 나누어 처리하는 방식이다.
예를 들어 같은 서비스를 처리할 수 있는 서버를 여러 대 두고,
그 앞단에서 들어오는 요청을 적절히 분산해주면 특정 서버 한 대에만 부담이 몰리지 않게 된다.
이때 중간에서 요청을 받아 적절한 서버로 나누어주는 장치나 소프트웨어가 필요하며,
이런 구조 덕분에 더 많은 사용자의 요청을 안정적으로 처리할 수 있게 된다.
캐시는 비용이 큰 작업의 결과를 미리 저장해두고,
같은 요청이 들어왔을 때 더 적은 비용으로 빠르게 응답할 수 있게 해주는 방식이다.
예를 들어 자주 도회되는 데이터가 있을 때 매번 데이터베이스에 접근하는 대신,
한 번 조회한 결과를 메모리나 별도의 저장소에 보관해두면 훨씬 빠르게 처리할 수 있다.
다만 캐시는 항상 최신 상태를 100% 보장하기 보다는,
어느 정도의 신선도를 희생하면서 성능을 얻는 경우가 많다.
애플리케이션 수준에서도 서버와 클라이언트라는 개념은 그대로 존재한다
서버와 클라이언트를 이야기하면 보통 물리적으로 떨어진 두 컴퓨터를 먼저 떠올리기 쉽다.
하지만 실제로는 하나의 PC 안에서도 서버와 클라이언트라는 개념이 성립할 수 있다.
중요한 것은 물리적인 거리나 장비의 수가 아니라,
누가 기능을 제공하고 누가 그것을 요청하느냐이다.
예를 들어 하나의 컴퓨터에서 웹 브라우저를 실행해 로컬 서버에 접속하는 상황을 생각해볼 수 있다.
물리적으로는 같은 PC 안에 있지만, 브라우저는 서버에 요청을 보내는 클라이언트 역할을 하고,
백엔드 애플리케이션은 요청을 받아 처리하는 서버 역할을 한다.
이 관점은 현대 애플리케이션 구조를 이해하는 데도 중요하다.
모바일 앱이 백엔드 서버와 통신하는 경우뿐 아니라, 데스크톱 프로그램이 내부 서비스와 연결되는 경우,
또는 하나의 시스템 안에서 여러 프로그램이 API를 주고 받는 경우에도 서버와 클라이언트 개념이 적용된다.
소스 코드 안에서도 서버와 클라이언트처럼 의존하는 관계가 존재한다
서버와 클라이언트라는 개념은 네트워크나 애플리케이션 수준에서만 끝나지 않는다.
더 작게 들어가 보면 소스 코드 내부에서도 비슷한 관계를 찾을 수 있다.
어떤 쪽이 기능을 제공하고, 어떤 쪽이 그 기능에 의존해 사용하는가이다.
예를 들어 하나의 클래스가 다른 클래스의 메서드를 호출해 기능을 사용한다면,
호출하는 쪽은 클라이언트처럼 볼 수 있고 기능을 제공하는 쪽은 서버처럼 볼 수 있다.
물론 여기서 말하는 서버/클라이언트는 실제 네트워크 통신을 의미하는 것은 아니다.
하지만 “필요한 기능을 제공하는 쪽”과 “그 기능을 요청해 사용하는 쪽”이라는 구조는 매우 비슷하다.
결국 코드 안에서도 한쪽은 다른 한쪽의 기능에 의존하게 된다.
즉, 서버와 클라이언트라는 개념은 단순히 네트워크 통신에만 국한되지 않고,
더 넓게 보면 의존 관계를 이해하는 틀로도 활용할 수 있다.
이런 시각은 백엔드 공부를 할 때 관계와 구조를 더 입체적으로 이해하는 데 도움이 된다.
'공부 기록 > 이것이 백엔드 개발이다 With Java' 카테고리의 다른 글
| EP5. 서버와 서버, 서버와 클라이언트 (0) | 2026.03.20 |
|---|---|
| EP4. 서버와 브라우저 (0) | 2026.03.18 |
| EP2. 백엔드 개발이란? (0) | 2026.03.11 |
| EP1. 백엔드 공부를 시작하며 가장 먼저 이해해야 할 것 (0) | 2026.03.11 |
| EP0. 백엔드 공부를 다시 시작하며 (0) | 2026.03.10 |