728x90
웹 개발자에게 있어서 아마 가장 중요한 것은 자신의 개발 언어 능력일 것이다. 다만 '웹' 개발자이기 때문에 백엔드던 프론트던 결국 네트워크를 지나칠 수는 없다. 오늘은 이런 부분들에 대해서 공부해보려고 한다.
1. IP : 인터넷 프로토콜
- 지정한 IP 주소 IP Address 에 데이터 전달
- 패킷(packet) 이라는 통신 단위로 데이터 전달
2. IP 프로토콜의 한계
- 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성 : 중간에 패킷이 사라지거나 패킷이 순서대로 오지 않는 경우도 발생
- 프로그램 구분 : 같은 IP 를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우 구분이 힘듦 ⇒ 인터넷으로 2가지 일을 동시에 - 게임&음악 - 하는 경우 정확히 어떤 서비스를 위한 IP 프로토콜인지 확인하기 힘들다
3. TCP 와 UDP
TCP : 전송 제어 프로토콜 → 전송에 대한 제어를 위한 프로토콜
- 연결지향 - TCP 3 Way Handshake : 논리적인 가상 연결
- 3 Way Handshake 란? 3단계로 이루어지는 클라이언트와 서버의 연결
- 클라이언트가 서버로 SYN 패킹 전달 → 서버는 SYN 패킷을 받은 후 ACK 와 SYN 이 설정된 패킷을 클라이언트에게 다시 전달 → 클라이언트는 서버로부터 ACK 와 SYN 이 담긴 패킷을 받고 서버로 다시 ACK 를 전달 → 데이터 전달TCP : 전송 제어 프로토콜 → 전송에 대한 제어를 위한 프로토콜
UDP : 사용자 데이터그램 프로토콜
- 연결지향 X - 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- IP 와 차이점은 PORT 정보가 추가되었다는 정도? ⇒ TCP 비교했을 때 빠르다
- 애플리케이션 추가 작업 할 수 있기 때문에 최근 활용도가 높아지고 있음
4. PORT : 같은 IP 내에서 프로세스 구분
- port 는 0 ~ 65535 ⇒ 0 ~ 1023 은 잘 알려진 포트로 사용하지 않는 것이 좋음
- 하나의 ip 안에서 여러 프로세스를 구분하기 위해서 사용한다.
- IP 가 아파트 라면 PORT 는 X동 X호
- FTP : 20, 21
- TELNET - 23
- SSH - 22
- HTTP - 80
- HTTPS - 443
만약 100만명의 요청이 들어온다면!?
포트는 0 ~ 65535 로 정해져있다. 그런데 만약 100만명의 클라이언트가 동시에 서버에 접속한다면 서버에서는 어떻게 처리될까?
동일한 포트로 접속되는 요청은 서버에서 관리하게 되며 한 대의 서버당 처리할 수 있는 요청의 한계가 있음으로, 동시 접속자 수 100만 명을 처리하려면 그에 상응하는 서버(N대) 가 필요하다. 이렇게 요청에 따라 서버에 고르게 분산시키는 기술을 로드 밸런싱 이라고한다.
5. OSI 7계층 : 네트워크에서 통신이 일어나는 7가지 과정
- 네트워크 인터페이스 : LAN 드라이버, LAN 장비
- 인터넷 : IP
- 전송 : TCP, UDP
- 애플리케이션 : SOCKET 라이브러리, 웹 브라우저, 온라인 게임, 채팅
6. URI와 URL
- URI 는 통합 자원 식별자 - Uniform Resource Identifier - 를 의미한다. 즉 URI 는 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀸스이다.
- URI 는 URL 과 URN 의 상위 개념!
- scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
- 프로토콜://호스트명:포트번호/패스(path)?파라미터#메인리소스에서 서브리소스로 접근
- URL 은 Resource Locator 의 약자로 즉 자원의 위치를 가르킨다.
- URL 과 URI 구분하기
- http://localhost:8080/index.html ⇒ 실제 파일이 존재함으로 URL & URI
- http://localhost:8080/url ⇒ 실제 파일이 존재하지 않으나 서버에서 처리됨으로 URL
7. 웹 브라우저의 요청 흐름
- 채팅 프로그램 : 프로그램이 Hello world! 라는 메시지 생성 → SOCKET 라이브러리를 통해 전송 & 인터넷 계층으로 전달 → TCP 정보 생성 및 메시지 데이터를 포함시킴(전송) → IP 패킷 생성, TCP 데이터를 포함시킴(인터넷) → LAN 장비를 통해 외부로 전달
- 이때 패킷 안에는 출발지 ip, port, 목적지 ip, port, 전송데이터(HTTP 메시지) 가 담아져 있다!
- 전송 데이터란 GET /chat?send=hello HTTP1.1 Host:www.mychat.com 요런 느낌의 내용
- 서버는 전달된 파라미터를 통해 요청 내용을 확인하고 다시 내용을 패킷에 싸서 클라이언트에게 전달!
- 전달된 클라이언트의 웹 브라우저에서 html 을 랜더링해서 보여줌
- Reference
- 로드 밸런서에 관한 내용
Cross-region load balancer (preview) - Azure Load Balancer
A Beginner's Guide to Scaling to 11 Million+ Users on Amazon's AWS - High Scalability -
'Java - 기본기' 카테고리의 다른 글
26. VO, DTO, Entity, DAO 와 JDBC (0) | 2022.04.22 |
---|---|
25. Java Swing 과 JFrame, Graphics (0) | 2022.04.05 |
24. Thread - 스레드 다루기(feat. Lotte 번호찍기) (0) | 2022.03.14 |
23. Inner Class, 제네릭 자료형 (0) | 2022.03.13 |
22. 추상 클래스, 인터페이스, static, final (0) | 2022.03.05 |
댓글