[JAVA] 김영한의 실전 자바 고급 2편 - Se07. 네트워크 - 기본 이론
목차
- 포스팅 개요
- 본론
2-1. 클라이언트와 서버
1. 포스팅 개요
해당 포스팅은 김영한의 실전 자바 고급 2편 Section 7의 네트워크 - 기본 이론
에 대한 학습 내용이다.
학습 레포 URL : https://github.com/SsangSoo/inflearn-holyeye-java-adv2 (해당 레포는 완강시 public으로 전환 예정이다.)
참고로 해당 강의는 처음 내용 외엔 영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 일부로 구성되어있다.
2. 본론
2-1. 클라이언트와 서버
네트워크에서는 클라이언트와 서버라는 단어가 자주 등장한다.
그런데 클라이언트와 서버는 네트워크나 컴퓨터에서만 사용되는 용어가 아니라 넓은 범위에서 일반적으로 사용되는 용어이다.
네트워크를 시작하기 전에 먼저 클라이언트와 서버라는 용어를 정리해본다.

클라이언트-서버 개념의 기본 이해
- 클라이언트
- 클라이언트는 서비스를 요청하는 쪽이다.
- 마치 식당에서 음식을 주문하는 손님처럼, 클라이언트는 어떤 정보를 얻거나 작업을 처리해달라고 요청하는 역할을 한다.
- 서버
- 서버는 클라이언트의 요청을 받아들이고, 그 요청에 맞게 서비스를 제공하는 쪽이다.
- 식당에서 음식을 준비해서 손님에게 가져다주는 주방이나 웨이터가 서버의 역할을 한다.
예시
- 클라이언트
- 변호사에게 법률 자문을 구하는 의뢰인,
- 은행에서 계좌를 개설하는 고객,
- 미용실에서 머리를 자르는 손님
- 서버
- 법률 서비스를 제공하는 변호사,
- 은행에서 계좌를 관리하는 은행,
- 미용 서비스를 제공하는 미용사
클라이언트는 서비스를 요청하는 쪽이며, 서버는 그 요청을 받아 서비스를 제공하는 쪽이다.
이 관계는 일상 생활에서 매우 흔하게 나타나며, 다양한 상황에서 적용될 수 있다.
이 두 가지가 함께 작동하면, 클라이언트가 요청을 보내고 서버가 그 요청을 처리해서 응답을 돌려주는 구조가 만들어진다.
이를 클라이언트-서버 모델이라고 부른다.
객체와 클라이언트-서버 관계

- Main 객체가 Service 객체의 메서드를 호출하면 Main 객체는 Service 객체에게 특정 작업을 요청한 것이다.
- 요청을 받은 Service 객체는 요청을 수행하고 결과를 반환한다.
- 여기서는 Main 객체가 클라이언트이고, Service 객체가 서버가 된다.
- 참고로 여기서 응답이라는 의미는 단순히 결과 값을 반환하는 것을 넘어서 요청한 서비스를 수행한 것 자체를 의미한다.
- 쉽게 이야기해서 반환 값이 없어도, 클라이언트가 호출한 메서드를 서버가 수행한 것을 의미한다.
- (반환 타입이 void여도 서버라고 할 수 있다.)
네트워크와 클라이언트-서버

- 네트워크는 여러 대의 컴퓨터가 서로 연결되어 데이터를 주고받을 수 있는 환경을 의미한다.
- 인터넷이 대표적인 네트워크이다.
- 여기서도 클라이언트-서버 모델이 중요한 역할을 한다.
- 예를 들어, 집에서 컴퓨터나 스마트폰을 이용해 웹사이트에 접속할 때, 이런 장치가 클라이언트 역할을 하고, 웹사이트를 운영하는 컴퓨터가 서버 역할을 한다.
- 클라이언트가 서버에 "이 웹페이지를 보여줘"라고 요청하면, 서버는 요청을 받아들여 웹페이지를 클라이언트로 보내주는 것이다.
클라이언트와 서버가 동시에 될 수도 있다.

- Main 객체가 Service 객체에 요청을 보내면 Service 객체는 Repository 객체에게 필요한 추가 요청을 한다고 가정해보자.
- Main 객체와 Service 객체의 관계에서 Main 객체는 클라이언트가 되고, Service 객체는 서버가 된다.
- Service 객체와 Repository 객체 사이의 관계에서 Service 객체는 클라이언트가 되고, Repository 객체는 서버가 된다.
- Service 객체는 상황에 따라 서버이면서 동시에 클라이언트가 된다.
정리
클라이언트-서버 모델은 "서비스를 요청하는 쪽(클라이언트)"과 "그 요청을 처리해서 서비스를 제공하는 쪽(서버)" 간의 관계이다.
이 모델은 일상 생활에서도, 객체지향 프로그래밍에서도, 네트워크에서도, 우리가 매일 사용하는 웹사이트와 애플리케이션에서도 광범위하게 사용된다.
이번 챕터 이후에는 영한님이 네트워크에 대한 기본 강의를 몇 개 준비해주셨다.
모든 개발자를 위한 HTTP 웹 기본 지식 강의의 일부인데,
참고로 여기에 필자가 1~2년 전에 출퇴근길에 들으면서 정리했다.
참고로 강의 사이트는 여기(모든 개발자를 위한 HTTP 웹 기본 지식) 다.