네트워크 인프라 스트럭처를 공부할 때 중요한 것은 전체적인 구조를 이해해야 한다.
1) TCP/IP 연결 다음 HTTP가 존재한다.
2) HTTP 트래픽은 소켓 수준에서 만들어지며 스트림 데이터 형식으로 되어져 있다.
3) 다만 IP 네트워크의 MTU는 1500 이기 때문에 TCP는 이를 일정 단위로 자른다.
4) 해당 단위 즉 조각을 세그먼트라 한다면 세그먼트를 패킷으로 인캡슐레이션 한 후 패킷을 만들어 전송한다.
위 과정으로 스트림 데이터는 분해가 되고, 수신측에서 다시 조립을 하게된다.
다시 정리하자면 HTTP 트래픽은 스트림 데이터 가로 형태로 되어있고, 이것을 조각내서 패킷으로 만든 후 IP 스택에 전송을 하는 것이다. 그리고, 웹에 대한 얘기를 할 땐 패킷, 세그먼트 형태는 나오지 않는다.
...
웹 서비스에 나오는 기술을 살펴보자.
웹을 이루는 근간이 되는 두 축의 기술은 HTML, HTTP이다.
1) client와 server 간에 TCP/IP 연결을 전제하게 된다. 그리고 HTTP 통신이 이루어진다.
2) HTTP는 상태 개념이 없다. 그래서 연결이라는 건 TCP에 있는 것이다.
3) client 는 브라우저에 도메인을 치면 DNS > IP 접속 > TCP 연결 실시 > 이 연결을 기반으로 HTTP 통신
4) HTTP 통신이 이루어지는 시점에 reuqest.method.get 형식으로 문서(html)를 요청한다.
5) 서버는 응답값으로 문서(html)를 전해준다. 이 후 웹 브라우저 (문서 뷰어)는 응답 받은 문서(html)를 화면에 띄워주게 된다.
해당 과정이 팀 버너스 리가 만든 초창기 웹의 형태이다.
...
위 과정에서 생각해봐야 할 부분
소프트웨어 개발 시 설계 원칙이 있다. UI, Data, 제어 단을 항상 분리시켜야 한다는 원칙인데, 이는 유지보수를 근거로 설계를 진행한다. 다시말해, Data 변경 시 UI도 함께 수정하는 등의 이중 작업 과정을 피하기 위함이다.
이런 의미에서 웹이 어떻게 발전했는지 살펴보자.
1) HTML
HTTP 통신으로 Data(=문서, HTML)를 보고자 하였다. HTTP Request Get 형식으로 요청을 보내면, HTML 형태의 응답이 왔고, 브라우저는 이를 구문분석 즉, text와 tag를 분리하는 작업을 한 후 렌더링을 하게된다.
2) CSS 탄생
Data = html 이라고 가정했을 시, html 문서를 예쁘게 꾸미고 싶은데 UI 변경으로 html 문서 즉, data가 변경되면 안된다. 이는 설계 원칙에 위배되어 CSS 가 탄생하게 되었다.
3) JS탄생
당시, HTML+CSS 정적인 문서에서 동적인 문서로 만들고자 하는 고민이 있었다. 동적인 움직임에는 규칙이 따랐으며, 규칙을 스크립트 형태로 기술하게 되었다. 그렇게 나온 스크립트가 Mocah Script -> Live Script -> JavaScript 이다. 기존 브라우저는 구문분석, 렌더링 엔진만 필요하였는데, 자바 스크립트가 도입되면서 자바 스크립트 엔진까지 탑재하게 된다.
다시 말해 현재의 브라우저는 구문 분석, 렌더링, 자바스크립트 엔진의 기능을 탑재하였다.
4) 양방향 상호작용, 상태전이
기존의 방식은 GET 방식으로, 문서를 요청하고 응답받는 단방향 성격이 강하였다. 로그인 같은 서버와 클라이언트 간의 양방향 상호작용을 위해 POST 메서드가 사용되었다. 양방향 상호작용을 위해 상태 전이라는 것이 필요하다. HTTP는 statelesss, 상태를 갖지 안흔다.
상태 전이를 위해 클라이언트/서버 두 곳 모두 구현을 하게 된다. 클라이언트는 쿠키이며, 서버는 데이터 베이스이다.
만약 로그인 시, 클라이언트에서 POST 방식으로 id=tester&pwd=1234 라고 입력했다면 서버 입장에서 id, pwd 값들은 원격지 사용자 입력이다. 그리고 서버는 원격지 사용자 입력을 신뢰해서는 안된다. 그리고 반드시 검증 대상이다.
검증 이후, DB 를 통해 id, pwd에 대한 쿼리문들 질의한다.
...
백앤드 서버는 웹 서버 - 처리담당자 (WAS) - 데이터 베이스구조로 되어져 있다.
1) 웹 서버 - 송/수신 담당으로 리소스를 보내고 받는 역할을 한다.
2) 처리 담당자 (WAS) - 원격지 사용자 입력을 검증한다. 즉, 처리, 연산을 담당하는 요소이다. 동적 HTML 문서들이 이곳에서 생성이 된다. 그리고 클라이언트는 이 동적 HTML을 받게된다. 그리고 jdbc, odbc를 통해 db와 질의를 한다.
웹 서버와 데이터 베이스 사이에서 통신 역할을 하기 때문에 웹 서버에 보낼 View, 데이터 베이스의 자료를 결합해 최종적인 뷰를 만들 Model, Controller 라는 네트워크상 Request에 대한 제어 체계로 이를 약자를 따면 MVC 아키텍처라고 한다.
3) 데이터 베이스 - 자료 담당으로 자료를 기억시킨다.
'네트워크' 카테고리의 다른 글
WAS와 Restful API 그리고 JVM (1) | 2024.11.11 |
---|---|
인증서 체인이란 (0) | 2024.11.08 |
HTTP 간단 설명 (0) | 2024.11.05 |
URL과 URI (0) | 2024.11.04 |
한 번에 끝내는 DNS (0) | 2024.11.04 |