참고
1. OSI 7계층 선택 이유
- 네트워크 통신이 일어나는 과정을 단계별로 살필 수 있기 때문에 문제 원인의 범위를 좁힐 수 있어 효율적
- 장비 간 호환성 제공, 네트워크 장치/컴퓨팅 장치를 만들 때의 참조모델 표준이 될 수 있음
2. Outlook
- Microsoft 사에서 개발한 개인 정보 관리자 응용 프로그램
(메시지 프로토콜을 사용하기 쉽게하는 응용프로그램)
- 7계층, Application layer과 관련
3. 모든 고객의 PC에서 서비스 중단이 일어났을 경우
- 1계층 (physical layer) 혹은 3계층 (Network layer) 계층에 문제
4. 서버에 문제가 생겼는데 Ping Test 시 문제가 없을 경우
- ping test : 네트워크 상에 있는 각각의 호스트간 통신이 살아있는지, 속도가 얼마나 나오는지 확인하기 위한 작업
(ping -t XXX.XXX.XXX.XX -손실 0 : 인터넷 회선 정상적 작동)
- Ping Test는 3계층 (Network layer)에 속하므로 4계층~7계층 사이에 문제가 발생
5. Youtube와 같은 streaming service 제작시
- streaming 에서는 연속성이 중요하기 때문에 신뢰도는 낮지만 빠른 4계층 transport layer의 UDP Protocol 사용하여 구현
6. HTTP: 비연결성
-
클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질
-
다수의 클라이언트와 서버간의 연결 상태를 유지하려면 자원이 많이 필요. HTTP는 다수의 클라이언트가 웹 서버에 요청하는 방식을 띄므로 연결지속에 필요한 자원을 줄여 더 많은 connection 을 수립하는 것에 중점을 둠
7. 비연결성의 장단점 & 해결법
-
장점: 서버에서 다수의 클라이언트와 연결을 유지한다면 그만큼 리소스가 많이 필요, 비연결성이면 이에 따른 리소스를 줄여 더 많은 연결을 할 수 있음
-
단점: 서버가 클라이언트를 기억하고 있지 않아 동일한 클라이언트의 요청에 대해 매번 연결 시도/해제의 작업을 해야하므로 오버헤드가 증가
-
기본적으로 HTTP header 에는 Keep-Alive (한 번 맺은 세션을 요청이 끝나더라도 유지해주는 기능) 속성이 있는데, 이를 통해 연결에 대한 타임아웃을 지정할 수 있음
-
연결성외에 클라이언트의 상태 정보를 저장하기 위해서는 cookie, token, session 사용
8. POST, GET
데이터를 조회하기 위한 용도로 POST가 아닌 GET 방식을 사용하는 이유
-
GET 방식은 서버에게 여러 번 요청을 하더라도 동일한 응답이 돌아와야한다 (멱등성) , GET 방식은 '가져오는 것'이므로 서버의 데이터나 상태를 변경시키지 않아야 함, POST 방식은 '수행하는 것'이므로 서버의 값이나 상태를 바꾸기 위한 용도
-
웹에서 모든 리소스는 Link할 수 있는 url을 가지고 있어야 함, 어떤 웹 페이지를 조회할 때 원하는 페이지로 바로 이동하거나 이동시키기 위해서는 해당 링크의 정보가 필요, 만일 POST 방식을 사용한다면 링크의 정보가 Body에 있기 때문에 url만 전달할 수 없으므로 GET 방식 사용, 글을 저장하는 경우에는 URL을 제공할 필요가 없기 때문에 POST 방식 사용
9. 웹 애플리케이션 제작 시 조회/삭제/수정
- 조회: GET, 삭제: DELETE, 수정: POST
- GET은 조회하기 위한 메서드로 멱등성을 만족하기 위해 데이터의 수정이 없어야하며, POST는 서버의 값 혹은 상태를 변경하기 위한 메서드로 수정하기 위해 사용
- RESTful API에 근거하여 삭제는 DELETE 로 설계
10. TCP vs UDP
TCP (Transfer Control Protocol) : 4계층 Transport layer에 속함
- 3-way handshaking을 통해 논리적인 경로의 연결을 수립, 4-wa handshacking을 통해 논리적인 경로의 연결을 해제하는 Connect oriented
- 혼잡제어, 흐름제어 기능 제공
- Reliable Data Transfer (=RDT) 즉, 신뢰성 있는 전송 지원
(Go-Back-N, Selective Repeat, 타이머)를 통한 timeout 등 다양한 방식이 있음
- HTTP, E-mail, File Transfer 등 사용
UDP (User Datagram Protocol) : TCP와 같이 전송계층에 속해있으나 특징이 조금 다름
- 비연결형, Connectionless Protocol. TCP와 같은 handshaking 절차가 존재하지 않음
- TCP에서 지원하는 흐름제어, 혼잡제어, 순서보장, 전송보장 기능을 제공하지 않음
- 최소한의 오류검출을 위해 checksum 활용
- TCP에 비해 빠른 속도와 적은 부하를 갖기에 실시간 straming, DNS에 사용하기 적합
11. HTTP 또는 암호화 되지 않은 프로토콜의 문제점
- 평문 통신이기 때문에 도청 가능
- 통신 상대를 확인하지 않기 때문에 위장 가능
- 완전성을 증명할 수 없기 때문에 변조 가능
12. HTTPS
- HTTP에 SSL을 덮어 씌운 것과 같이, 원래 HTTP의 통신하는 소켓 부분을 SSL 또는 TLS라는 프로토콜로 대체하는 것
- 원래 TCP와 직접 통신했다면 HTTPS에서는 HTTP와 SSL이 통신하고 SSL과 TCP가 통신하는 방식
- SSL을 이용하는 HTTP는 암호화와 증명서, 안정성 보호를 이용할 수 있게 됨
13. HTTP vs HTTPS
- HTTPS가 보안적인 면에서 뛰어난 만큼 처리해야 할 작업이 많이 속도가 떨어져 중요한 데이터 처리 외에는 HTTP를 사용할 것이라 생각할 수 있지만 그렇지 않음
- HTTPS 만을 지원하도록 HTTP/2는 다중화와 우선순위를 이용하여 더 빠르게 페이지를 로드하는 구글의 네트워크 프로토콜 SPDY를 기반으로 하고 있음 -> HTTP/2를 지원하는 웹이라면 HTTPS가 속도 조차 더욱 빠름
14. DNS Server의 역할
- IP 주소와 도메인 이름의 매핑 관리
- DNS 서버는 IP주소와 도메인 간의 변환 작업을 수행, 사용자가 도메인 이름을 웹 브라우저에 입력한다면 해당 사용자를 어떤 서버에 연결할 것인지를 제어
15. 도메인과 IP 주소
- 인터넷은 서버들을 유일하게 구분할 수 있는 IP 주소를 기본 체계로 이용
- IP 주소는 숫자로 이루어진 조합이라 인간이 기억하기엔 무리가 있음
- 기억하기 편한 언어 체계의 도멘 이름을 통해 웹 서버에 접속
16. 도메인의 구조
- 도메인은 .(dot) 또는 루트(root)라고 불리는 도메인 이하에 Inverted tree 구조로 구성되어 있음
- 1단계부터 차례대로 TLS (Top Level Domain), SLD (Second Level Domain), SubDomain 이라고 함
17. DNS 서버의 Recursive Query 과정
- 로컬 DNS 서버가 여러 DNS 서버를 차례대로 (루트->com->naver.com DNS서버) 질의해서 IP 주소를 찾아가는 과정
18. Round Robin DNS
- 클라이언트의 웹서버 IP를 요청하는 쿼리를 받을 때마다 여러대의 웹서버를 번갈아가면서 가르쳐줌으로 부화를 분산시키는 로드밸런싱 방법
19. Round Robin DNS의 문제점
- 필요한 서버만큼 공인 IP주소 필요, 균등하게 분산되지 않을 수 있음 (특히 스마트폰)
- 서버가 다운되어도 확인 불가, 유저들에게 해당 IP를 제공할 수도 있음
- Weighted Round Robin : Round Robin과 같지만 가중치를 더해서 분산 비율을 변경, 가중치가 큰 서버일 수록 자주 선택되므로 처리능력이 높은 서버를 가중치를 높게 설정
- Least Connection : 접속 수가 가장 적은 서버 선택