처음 웹 개발을 접하게 되면
가장 먼저 client와 server에 대해 배우게 될 것이다.
위 구성도는 웹 개발에 대한 큰 흐름을 아주아주 요약된 버전으로 보여준 것인데,
웹 개발을 어느 정도 공부하고 나니 이 흐름에 대해 계속해서 생각하는 것이
개발에 있어서 얼마나 중요한지 새삼 깨닫게 된다.
위 이미지를 토대로
웹 통신과정을 클라이언트와 서버 개념을 활용하여 설명해보면,
client가 기본동작을 통해 요청(request)하면
server에서 이를 처리하고 데이터를 DataBase에 저장하고
client의 요청에 대해 응답(response)한다.
이때 client는 웹 브라우저를 사용한다. 정도로 설명해볼 수 있겠다.
여기서 데이터베이스(DataBase)는 데이터를 저장하고 관리하는 역할을 담당한다.
다시 서버와 클라이언트 개념으로 돌아와서 개념을 살펴보자.
서버(Server)는 서비스를 제공하는 쪽을 말하고,
이 서비스를 제공받는 쪽을 클라이언트(Client) 라 한다.
서버와 클라이언트 개념은
네트워크에서, 애플리케이션에서, 소스코드에서
조금씩 다른 개념으로 사용된다.
서버와 클라이언트의 개념 요약
구분 | 서버(Server) | 클라이언트(Client) |
네트워크에서의 개념 : 물리적인 장치 간의 관계 |
실제로 존재하는 물리적인 고성능 컴퓨터로 서비스를 제공하는 쪽을 의미함 | 데스크톱, 노트북, 스마트폰 등 사용자들의 단말기에 해당하며, 서비스를 제공받는 쪽을 의미함 |
애플리케이션에서의 개념 : 의존 관계 |
서버 애플리케이션 예) 카카오톡 클라이언트 애플리케이션 |
클라이언트 애플리케이션 예) 카카오톡 서버 애플리케이션 |
소스코드에서의 개념 : 의존 관계 |
서버 코드 : 클라이언트 코드에 의해 사용되는 코드 |
클라이언트 코드 : 서버 코드를 사용하는 코드 |
네트워크에서의 서버와 클라이언트
서버와 클라이언트에 대해서 처음에는
단순히 서버는 물리적인 고성능 컴퓨터를 말하고
클라이언트는 고객이나 사용자의 단말기를
의미한다고만 생각했었는데, 이는 네트워크 상에서의
서버와 클라이언트 의미에 해당하는 것이었다.
네트워크상에서 물리적인 장치 간에 서로 통신이 이뤄지기 위해서는
통신을 시작하는 쪽이 상대방의 네트워크 주소인 IP 주소를 알고 있어야 한다.
클라이언트가 서버의 IP주소를 알고 있어야
서버와 클라이언트로서의 관계를 맺을 수 있다.
+ IP주소에 대해서는 아래 글을 통해 자세히 알 수 있다.
[Web] 프로토콜(Protocol) : HTTP, TCP, UDP, IP + Port(포트번호) 그리고 OSI 7 Layer (tistory.com)
애플리케이션에서의 서버와 클라이언트
** 애플리케이션 ?
애플리케이션이란, 스마트폰에 설치하는 앱에만 해당하는 개념이 아니다.
윈도우나 MacOS 같은 운영체제에 설치해 사용하는 모든 응용 프로그램을 말한다.
PC에 설치된 웹 브라우저나 카카오톡 같은 메신저도 모두 애플리케이션에 해당한다.
우리는 PC에서 보통 여러 개의 애플리케이션을 동시에 사용하곤 한다.
웹 브라우저인 크롬을 통해 구글 문서를 작성하고, 카카오톡을 켜서 대화를 하며
벅스로 노래를 들을 수도 있다.
이와 같이 하나의 장치에 여러 개의 애플리케이션을 동시에 실행할 때
각 애플리케이션(구글, 카카오톡, 벅스)은 서로 다른 서버에 연결된다.
이때는 클라이언트에 해당하는 애플리케이션과 서버에 해당하는 애플리케이션이
별도로 나눠져 있으며 이 둘은 서로 연결되어 있다.
애플리케이션 상에서도 서버와 클라이언트의 관계가
존재된다는 점만 알고 있으면 충분하다.
이때 서버와 클라이언트의 관계성을 보면
클라이언트가 서버에 의존하고 있다는 점이 특징이다.
소스코드에서의 서버와 클라이언트
//클라이언트
public static void main() {
serverMethod();
}
//서버
private static void serverMethod() {
System.out.println("서버 메소드");
}
serverMethod()를 호출한 main() 메서드는 클라이언트 코드이며
호출을 당한 serverMethod()는 서버 코드에 해당한다.
이처럼 코드 간에 서버와 클라이언트가 존재할 경우,
클라이언트 코드가 서버 코드에 '의존한다'고 표현한다.
서버 코드가 변경되면 이 코드를 호출하는
클라이언트 코드도 변경되어야 할 것이다.
이러한 경우를 코드 사이의 '의존 관계'라고 한다.
간단한 예로 서버코드의 메소드 명인 serverMethod()가
serverMethod2()로 변경되었다고 가정해보자.
그렇다면 해당 메소드를 호출한 main()메서드에서도
serverMethod() 가 아니라 serverMethod2()를 호출해야
정확히 원하는 메소드를 호출하게 되는 것이다.
'Web > Basic' 카테고리의 다른 글
[Web] HTTP 메서드 (1) GET / POST 방식 + 멱등성, HTTP 요청바디 (1) | 2024.02.27 |
---|---|
[Web] 웹 브라우저와 서버의 상호작용 방법 (0) | 2024.02.27 |
[Web] 블로킹(blocking)과 논블로킹(non-blocking) + 콜백(callback) 함수 (0) | 2024.02.23 |
[Web] 동기 방식(Synchronous)과 비동기 방식 (Asynchronous) (0) | 2024.02.23 |
[Web] 웹 서버와 WAS : 아파치(Apache)와 톰캣(Tomcat) (0) | 2024.01.30 |