1. 서버와 클라이언트의 개념
1) 네트워크에서의 서버와 클라이언트
- 서비스를 제공하는 쪽이 서버(server), 서비스를 제공받는 쪽이 클라이언트(client)
- 물리적인 장치 간에 서로 통신이 이루어지기 위해서는 통신을 시작하는 쪽이 상대방의 네트워크 주소인 IP 주소를 알고 있어야 함
○ 로드 밸런싱
- 서버에 가해지는 부하(Load)를 분산하는 것
- 사용자들의 트래픽을 여러 서버가 나눠 받도록 구성하며, 네트워크 장비인 스위치(Switch)를 할당해 로드 밸런싱
○ 캐시
- 비용이 큰 작업의 결과를 어딘가에 저장하여 비용이 작은 작업으로 동일한 효과를 내는 것
2) 애플리케이션에서의 서버와 클라이언트
- 네트워크로 연결된 두 장치에서는 각자의 역할에 따라 실제 유의미한 트래픽을 주고 받는 애플리케이션이 실행
3) 소스코드에서의 서버와 클라이언트
- A라는 코드가 B라는 코드를 사용한다면 B는 서버 코드가 될 것이고, A는 B 코드를 사용하는 클라이언트 코드가 될 것이다.
//클라이언트
public static void main() {
serverMethod();
}
//서버
private static void serverMethod() {
System.out.println("this is server method");
}
2. 서버와 브라우저
1) www.google.com에 접속하면 생기는 일
○ DNS 서버 조회
- 네트워크상에서 클라이언트가 서버를 찾아가려면 IP 주소를 알아야 함
- 도메인 네임을 IP로 변경해주는 DNS(Domain Name System)
- 클라이언트는 DNS를 이용해 구글 웹 서버의 IP 주소를 얻었고, 이 주소로 구글의 웹 서버를 찾아가게 됨
○ 라우터 접속
- 구글 웹 서버의 IP를 가지고 출발한 클라이언트의 요청은 PC에 연결된 랜선이나 와이파이 전파를 타고 공유기를 거쳐 인터넷 구
간을 지남
- 인터넷은 KT와 같은 인터넷 사업자들에 의해 관리되는 회선으로, 회선 중간마다 라우터가 존재
- 라우터는 클라이언트의 요청에 적혀 있는 IP 주소를 기반으로 다음 경로를 안내

○ HTML 문서 전달
- 라우터의 안내를 받아 구글의 웹 서버에 도달한 클라이언트의 요청은 구글의 웹 서버에서 실행 중인 웹 서버 애플리케이션에 전달
- 웹 서버 애플리케이션은 클라이언트의 요청에 해당하는 HTML 문서를 응답으로 줌
- 이 HTML 문서는 왔던 길을 다시 되돌아가 최종적으로 클라이언트(웹 브라우저)에게 전달

○ 랜더링(Rendering)
- 서버로부터 응답받은 HTML 문서를 사용자가 볼 수 있는 형태로 만드는 과정
2) IP 주소
- IP 주소는 마침표(.)를 기준으로 구분한 4개의 숫자 조합으로 구성
- 전 세계 인터넷에 연결된 모든 곳에 접속할 수 있는 유일한 IP는 공인(public) IP 주소로 부여하고, 각각의 공인 IP 내부에 존재 하는 네트워크 망에는 사설(Private) IP 주소를 부여하는 방식을 사용

- 로컬호스트(localhost)의 범위는 IPv4를 기준으로 127.0.0.1 ~ 127.255.255.254이며, 네트워크상에서 '자기 자신'을 의미
- 일반적으로 로컬호스트의 IP 주소로는 127.0.0.1을 사용하는데, 127.0.0.1로 접속하는 것은 곧 자기 자신에게 접속하는 것
- 공유기 바깥에서는 포트 포워딩(Port Forwarding)을 통해 내부에 있는 노트북이나 스마트폰으로 접근 가능
3) 포트
- IP 주소는 클라이언트의 요청을 물리적인 장치인 서버까지는 안내해 줄 수 있지만, 해당 서버 내에서 돌아가고 있는 서버 애플리 케이션까지 전달해 주기에는 정보가 부족
- 각각의 서버 애플리케이션에 정확하게 요청을 전달하기 위해서는 포트(Port)라는 추가 정보가 필요
○ 잘 알려진 포트(Well Known Port)
- 자주 사용하는 프로토콜이나 서비스들이 사용하는 포트
- 'HTTP는 무조건 80번 포트'라고 생각하면 안됨, 이것은 포트를 별도로 지정하지 않았을 경우에 프로토콜이 해당 포트를 사용한 다는 의미이지 직접 지정만 하면 얼마든지 다른 포트 사용 가능
(ex: 80번으로 HTTP 서버를 하나 띄우고, 8080으로 또 다른 HTTP 서버를 띄울 수 있음)
○ 등록된 포트(Registered Port)
- 특정 소프트웨어에서만 사용하는 프로토콜(MySQL 3306, Redis 6379)
○ 동적 포트(Dynamic Port)
- 서버에게 보낸 요청을 되돌려 받기 위해 사용
- 서버에만 여러 개의 서버 애플리케이션이 실행되고 있는 것이 아니라, 클라이언트에도 여러 개의 클라이언트 애플리케이션들이 실행되고 있으므로 서로 구분이 필요
- 동적 포트는 우리가 직접 지정할 필요 없이 운영체제에 의해 관리되며, 비어 있는 포트를 사용하여 클라이언트 애플리케이션이
자신의 요청에 대한 응답을 제대로 되돌려 받을 수 있도록 함
3. 웹 서버와 WAS
○ 웹 서비스가 실행되고 있는 물리적인 형태의 서버
- 네트워크 장비나 데이터베이스 등 실제 존재하는 물리적인 장치
○ 물리적인 서버 내에서 실행 중이며 웹 요청을 받을 수 있는 서버
- 웹서버
- 정적인 콘텐츠르 렞공하는 것에 중점
- ex) Nginx, Apache
○ 프로그래밍 언어에 의해 특정 로직이 실행되는 웹 애플리케이션 서버
- WAS
- 정적인 콘텐츠에 더해 사용자의 요청에 따라 어떠한 로직을 실행시키거나, 그 로직의 결과에 맞춰 서버에 존재하지 않던 콘텐츠 를 새로 만들어 응답
- ex) Tomcat, Undertow

'SpringBoot > 백엔드' 카테고리의 다른 글
| [이것이 백엔드 개발이다] ch 6. 백엔드 개발에 필요한 최소한의 HTML (0) | 2026.05.24 |
|---|---|
| [이것이 백엔드 개발이다] ch 5. API 호출 클라이언트 페이지 만들기 (0) | 2026.05.23 |
| [이것이 백엔드 개발이다] ch 3. 실무에 가장 많이 쓰이는 자바 문법 (0) | 2026.05.05 |