서버와 클라이언트의 개념
네트워크에서의 서버와 클라이언트
- 물리적 장치와 또다른 물리적 장치 사이의 관계 의미
- Server : 서비스를 제공하는 쪽
- Client : 서비스를 제공받는 쪽
- 서로 통신하기 위해서 통신을 시작하는 쪽이 상대방의 네트워크 주소(IP주소)를 알고 있어야 함
- 하나의 서버에 수만대의 클라이언트를 수용 할 수 있음 => traffic(트래픽)이 발생
트랙픽 처리 방법
1. Load Balancing
- Load(부하)를 분산하는 것
- 사용자들의 트래픽을 여러 서버에서 나눠 받도록 구성
- Switch(네트워크 장비)를 할당해서 Load Balancing
- Switch가 traffic을 먼저 받아서 여러 대의 서버로 분산해주는 방식
- Switch에서 어떤 서버로 Load Balancing 할지는 소프트웨어적으로 제어 가능
- 부하 분산 효과, Switch 뒤에 연결된 서버를 필요에 따라 추가 삭제 가능
2. Cache
- 비용이 큰 작업의 결과를 어딘가에 저장하여 비용이 작은 작업으로 동일한 효과를 내는 것
- 매번 요청이 들어올 때, 미리 저장된 결과로 응답 => 가장 최신의 데이터는 아니지만 성능을 극대화
- ex : 음원 서비스 Top100을 실시간 처리시 서버 부하로 응답시간이 느려지니 시간단위로 계산 결과 저장해두고 응답
애플리케이션에서의 서버와 클라이언트
- 애플리케이션(OS에 설치해 사용하는 모든 응용 프로그램)
- Server : 멜론, 카톡, 크롬 등 서비스를 제공해주는 애플리케이션 서버
- Client : 멜론, 카톡, 브라우저 등 사용자가 보고 서비스를 받는 애플리케이션 클라이언트
- 하나의 장치에 여러 개의 애플리케이션이 동시에 실행 가능 : 각각 서로 다른 서버와 연결
소스코드에서의 서버와 클라이언트
- 소스코드
- Server : 코드를 제공하는 코드, 호출 당하는 코드
- Client : 코드를 제공받아 사용하는 코드, 호출하는 코드, 서버 코드에 의존하는 코드
// Client
public static void main() {
serverMethod()
}
// Server
private static void serverMethod() {
System.out.println("this is server method")
}
- 클라이언트 코드 변경
- 서버를 더이상 호출하지 않더라도 서버에 영향을 주지 않음
// Client : serverMethod() 호출하지 않도록 변경
public static void main() {
// serverMethod()
}
// Server : 아무것도 변경될 필요 없음
private static void serverMethod() {
System.out.println("this is server method")
}
- 서버 코드 변경
- 클라이언트 코드까지 영향을 줘서 에러 발생 유발 가능
- 서버 코드의 변경이 클라이언트 코드의 변경을 유발하는 경우를 코드 사이의 의존관계라고 부름
// Client : 호출하는 메서드 이름 변경되어 에러 유발
public static void main() {
serverMethod()
}
// Server : 메서드 이름 변경
private static void serverMethodTwo() {
System.out.println("this is server method")
}
서버와 브라우저
google에 접속하면 생기는 일
1. 도메인으로 구글 홈페이지에 접속(www.google.com)
2. DNS(Domain Name System) 서버 조회
- DNS : 도메인 네임을 IP로 변경해 주는 서버(애플리케이션 서비스)
- DNS 서버로 www.google.com의 IP 주소 요청 <====> DNS 서버에서 IP주소 응답
3. 라우터 접속
- 인터넷 : 인터넷 사업자들에 의해 관리되는 회선으로, 회선 중간마다 라우터 존재
- 라우터 : 클라이언트의 요청에 적혀 있는 IP 주소 기반으로 다음 경로 안내
- 국내에서 서비스 중인 웹 서버 접근시 3~15개 정도의 라우터를 거침
4. HTML 문서 전달
- 구글 웹 서버 클라이언트의 요청 받음 - 웹 서버 애플리케이션 전달 - 웹 서버 애플리케이션 HTML 문서 응답 - 클라이언트(웹 브라우저)까지 전달
- 전달 받은 HTML 문서 확인 : 개발자 도구(크롬 윈도우:F12/맥:⌥ ⌘ i)
웹 브라우저의 역할
- 도메인 네임 입력시 DNS를 통해 IP 주소로 변환
- 사용자의 액션에 따라 웹 애플리케이션 서버로 요청
- 웹 서버 애플리케이션의 응답을 화면에 렌더링
- Redering : HTML 문서를 사용자가 볼 수 있는 형태로 만드는 과정
- 웹 서버 애플리케이션으로부터 전달받은 HTML 문서, 이미지, 동영상 파일 등의 다양한 요소를 렌더링 해서 완성된 웹 페이지를 보여줌
요청과 응답
- Request : 웹 브라우저가 웹 서버에게 HTML 문서를 요청
- Response : HTTP 요청을 받은 웹 서버가 요청에 해당하는 HTML 문서를 주는 것, 실패하면 에러에 해당하는 응답을 돌려 줌
- 주고받는 대상이 반드시 HTML 문서만은 아님 : 문자열, 이미지, 동영상 파일, JSON 데이터 등을 주고받기도 함
IP주소
IP 주소의 구성
- 마침표(.) 기준으로 4개의 숫자 조합으로 구성
- 각 구역의 숫자는 0~255 사이의 숫자
- 공인(Public) IP : 전 세계 인터넷에 연결된 모든 곳에 접속할 수 있는 유일한 IP, 공유기 등
- 사설(Private) IP : 각각의 공인 IP 내부에 존재하는 네트워크 망에 부여하는 IP, 공유기에 연결된 스마트폰 데스크톱 노특북 등
IP 주소 확인 방법
- 네이버(www.naver.com)에서 'IP주소' 검색 : 현재 네트워크 망의 공인 IP 주소 알려줌
- Window cmd 열어서 'ipconfig' 입력 : 자신이 사용하고 있는 네트워크 망의 사설 IP 주소 알려줌(보통 192.168.x.x)
- Mac 터미널창 'ipconfig | grep inet' 또는 'ipconfig getifaddr en0' 입력 : 네트워크 망의 사설 IP 주소 알려줌
- localhost(127.0.0.1) : 자기 자신에게 접속
IPv4와 IPv6
- IPv4의 주소 고갈로 차세대 버전의 IPv6 방식 등장해서 점점 활성화 되는 중
- IPv4 : 2의32승 주소 체계, 32개의 bit
- IPv6 : 2의128승 주소 체계, 128개의 bit
PORT
- IP주소를 통해 물리적인 장치인 서버까지 안내 후 서버 내의 애플리케이션까지 전달해주기 위한 추가 정보
- 웹 브라우저에서는 포트 번호를 명시하지 않아도 해당 프로토콜의 기본 포트를 요청에 추가(HTTP 80, HTTPS 443)
- http://www.google.com:80
- HTTP -> HTTPS 자동으로 변경 되는 이유 : http로 들어오는 접속을 https로 리다이렉트 시켜서(port도 80 -> 443 변경 됨)
- 포트를 별도로 지정할 경우 다른 포트번호로 사용 할 수 있다(HTTP를 8080으로 지정하여 80, 8080 서버로 HTTP 2개 동시 사용)
- 2개 이상의 다른 애플리케이션에서 동일한 포트를 사용 할 수 없음(원하는 포트를 사용하려면 해당 포트를 기존에 사용하고 있는 서버 애플리케이션 종료해야 함)
port 값과 종류
- 잘 알려진 포트(Well Known Port)
- 0~1023번
- 자주 사용하는 프로토콜이나 서비스들이 사용
- 20 : FTP(데이터 전송을 위해 사용)
- 21 : FTP(제어를 위해 사용)
- 22 : SSH 연결
- 23 : Telnet
- 80 : HTTP
- 443 : HTTPS
- 등록된 포트(Registered Port)
- 1024~49151번
- 특정 소프트웨어에서 사용하는 프로토콜 위해 사용
- MySQL : 3306
- Redis : 6379
- 동적 포트(Dynamic Port)
- 49152~65535번
- 서버에게 보낸 요청을 되돌려 받기 위해 사용(비어 있는 포트를 사용하여 클라이언트 애플리케이션이 자신의 요청에 대한 응답을 제대로 돌려 받을 수 있게 함)
- 운영체제에 의해 관리(직정 지정할 필요 없음)
웹 서버와 WAS
1. Server : 웹서비스가 실행되고 있는 물리적인 형태의 서버
- 실제 존재하는 물리적인 장치
2. Web Server : 물리적인 서버 내에서 실행 중인 웹 요청을 받을 수 있는 서버
- 정적인 콘텐츠를 제공 : 사용자가 요청한 콘텐츠를 정적인 형태 그대로 반환해주는 역할
- Nginx, Apache 등
3. Web Application Server : 프로그래밍 언어에 의해 특정 로직이 실행되는 웹 애플리케이션 서버
- 사용자의 요청에 따라 어떤 로직을 실행하거나, 로직의 결과에 맞춰 콘텐츠를 새로 만들어 응답
- JAVA - Tomcat, Undertow 등
서버와 서버
서버와 서버를 연결
- 구글 웹 서버 안에 다양한 서비스가 존재 - 검색, 계정 관리, 검색 기록 로깅 등
- 각 서비스별로 WAS 구성 후 서버와 서버간 통신
- 동일한 WAS로 서비스하는 경우, 한 서비스 에러 발생 시 모든 서비스를 중단해야 함
- 각 서비스간 작업을 HTTP 요청하여 서비스 받을 수 있음(검색 서비스에서 검색 기록 로깅 서비스 요청)
다른 형태의 서버와 클라이언트
- Server : 다른 서버에서 서비스 요청 받아 응답하는 서버
- Client : 다른 서버에 서비스 요청 하고 응답 받는 서버
서버와 기타 클라이언트
Postman
- API를 테스트하기 위한 툴
- 사용방법
- Postman 다운로드 페이지 접속
- 운영체제에 맞는 버전 다운로드
- 회원가입 후 사용 또는 lightweight API client 클릭해 바로 실행
- Enter URL or paste text 칸에 URL 입력, HTTP 요청 메서드 선택 후 Send 클릭
curl
- 커맨드 라인에 명령어를 입력하여 사용하는 방식의 HTTP 클라이언트
- HTTP 클라이언트를 주로 사용하며, 다른 프로토콜에도 사용 가능
'개발 기초' 카테고리의 다른 글
[Web] API 호출 클라이언트 페이지 만들기 (0) | 2025.01.21 |
---|---|
[네트워크] HTTP(HyperText Transfer Protocol) (0) | 2022.05.01 |
깃(git)을 저장하는 클라우드 서비스 : 깃허브(github) (0) | 2021.08.04 |
UX, UI, API (0) | 2020.12.09 |
라이브러리와 프레임워크(Library & Framework) (0) | 2020.12.09 |