-
웹 개발자가 되기 전에 반드시 알아야 하는 내용칼럼 2023. 11. 12. 23:25
과거 데스크톱 애플리케이션부터 현재에 웹 애플리케이션 개발에 이르기까지 그 발전 과정과 왜 발전되었고, 현제의 웹 개발을 하고자 함에 있어 반드시 사전에 알아야 하는 내용에 대해 기술하고자 한다.
1. 메인 프레임 시대 (60~80)
메인 프레임 시대는 사실 현재와 시스템 적으로 매우 비슷한 구조를 갖는다.
메임 프레임 시대에는 하나의 중앙 컴퓨터(메인 프레임)에 DB, Application Server가 하나로 구죽되는 경우로 이와 통신하기 위해서는 전용 단말기가 필요한 구조이다.
이 시기에도 TCP 단말을 이용하여 각 단말기는 Basic, Cobal등을 이용한 터미널 GUI를 사용하여 서버에서 동작 중인 Database에 입력하는 방식이었다.
이 시기에는 인터넷이라는 용어보다 전용망이라는 내부 인트라넷으로 동작하는 시기이다.
흔히 과거의 은행 전산망, 또는 공공기관의 전산망에서 주로 사용되던 방식이다.
2. 인터넷 (90~현재)
인터넷이 발명된 시기는 훨씬 이전이지만 본격적으로 저변이 확산된 시기는 90년대 이후로 볼 수 있을 것이다.
이전까지의 대부분 기업, 은행, 공공기관의 전산망은 인트라넷과 같은 내부망으로만 운영되었으나 인터넷의 도입으로 본격적으로 횡적 연결을 인터넷을 통해 할 수 있는 시기이다.
이때를 기점으로 메인 프레임시대(IBM)를 벗어나 각종 웹 아키텍처와 시스템이 개발되고 Microsoft, Sun-MicroSystems, Google 등이 등작해 현재에 이르는 IT 시대를 만들게 된다.
이 때 여러 사건이 있었지만 아래 하나의 사건으로 웹 생태계와 시스템 구성에 큰 변화가 발생한다.
2000년대에 뉴욕 증권거래소 시스템을 구축하는 외부 소싱 사업에 Microsoft가 개발을 맡아 진행하게 된다.
결과적으로 Microsoft가 만든 시스템, WCF, Asp.Net, Soap 기반의 Xml 통신등의 기술을 적용하여 만든 시스템은 처절하게 망하고 만다. 이후에 만들어진 시스템은 Linux, Java, Json 기반의 통신등을 사용한 오픈 소스 기술을 사용한 시스템으로 다시 개발되었다.
2000년대에 Microsoft의 기술 기반으로 만들어진 대부분의 시스템은 매우 비싸고, MS 독자 기술 기반으로 만들어져 있어 매우 폐쇄적이었기에 한번 만들어진 플랫폼을 다시 만들거나 발전시키는 것이 매우 힘들었고 그 유명한 Windows server farm은 운영하기 어렵고 scale out이 거의 불가능한 이슈가 발생하는 그런 시스템이었다.
이는 MS가 Asp.net WebForm까지 Session에 대한 동기처리, 즉, 서버와 클라이언트를 하나의 Session에 묶는 (현재에서 본다면 Stateless가 아닌 StateSync가 되겠다.) 기술에 집착했기 때문이겠다.
(이 점은 2023년 현재에 매우 흥미롭다. 다시금 웹 기술의 발전이 Stateless가 아닌 StateSync로 발전하는 것 같은 기시감이 든다.)
이는 수평적 확장을 매우 어렵게 하는 기술이다.
이후에 Asp.net MVC라는 것으로 어느 정도 해결되었지만, 2000년대에 MS의 실수는 적어도 한국에서는 회복되지 않았다.
또한, 당시 PC시장의 독점 문제도 있었고, 뜻하지 않게 메인 프레임시대와 상호 운영될 기술이 없었던 문제도 있겠다.
어쨌든, 이렇게 해서 인터넷이라는 네트워크로 우리는 웹 개발을 하게 된다.
그럼 이제 본론에 들어가자.
우리가 웹 개발을 하고 페이지를 열었다고 가정한다면 그 과정은 어떻게 이루어 질까?
사실 우리는 많은 개발서적을 보고 첫 챕터나 페이지 초반에 많이 설명하지만 대부분 지루하고 코드가 먼저기 때문에 이 부분을 등한시할지 모른다.
하지만 대부분의 웹 개발은 그 첫 부분이 매우 중요하다. 물론 짧은 설명에 서론쯤으로 적혀있는 그 부분에 대해서 흥미를 가지기 어려운 게 맞다.
그래서 아래에 설명하고자 한다.
우리가 웹 브라우저를 통해 특정 사이트의 도메인을 직접 입력하고 접속하던가, 구글에 검색해서 접속하던지 그 행위는 아래의 과정에 기인하여 이루어진다.
1. DNS 접속 : 웹 브라우저가 Domain Name Server에 접속한다.
2. Domain 주소 확인 : 15.125.232.2XX라는 주소를 획득한다.
3. 브라우저가 확인된 Domain 주소로 접속한다.
4. 웹 서버에 접속하여 응답과 동시에 페이지에 랜더링 된 HTML을 회신한다.
그림으로는 아래와 같다.
* DNS는 통신 제공 사업자가 제공하는 서비스이다.
* 즉, 대부분의 Domain은 미리 자신의 서버 주소를 통신 제공 사업자에게 특정 도메인과 함께 제공하여 미리 등록하는 것이다.
자, 그렇다면 웹 개발이라는 것은 넓은 의미에서 본다면 네트워크 프로그래밍이다.
우리가 개발할 때 직접 TCP/IP 기반의 코드를 작성하지 않지만, 이미 사용하고자 하는 웹 프레임워크, 가령 Asp.net MVC, Spring MVC, django flask 등의 프레임워크의 기저에는 이미 TCP/IP에 대한 코드를 기반으로 동작하게 된다.
웹 프레임워크들은 웹 표준 프로토콜을 기반으로 하기에 여러 프레임워크는 매우 비슷한 구조를 갖는 것이다.
따라서, 하나의 웹 프레임워크를 개발해 보았다면 개발 언어적 특성을 제외하고 모두 매우 비슷한 구조를 갖게 되므로 우리는 하나의 프레임워크를 마스터해야만 한다.
또한 아래의 사항들에 대하여 반드시 알아야 한다.
1. Json 구조 (+ 다 계층)
2. Http Mothod와 역할 및 cache여부
3. 데이터 베이스
4. 수직적 확장과 수평적 확장
5. 로드밸런서
6. 데이터베이스 다중화 : 현재 시점에서는 다소 중요성이 떨어질 수 있다. 클라우드 때문에...
7. 캐시
8. CDN
9. 메시지 큐
10. 로그, 메트릭
11. 규모의 확장
이번에는 웹 개발에 가장 기초가 되는 부분을 살펴보았다.
다음에는 위에 기입한 내용들을 하나하나 깊게 살펴보자.
그럼 이만.
'칼럼' 카테고리의 다른 글
데이터베이스 기술은 '있으면 좋은' 것이 아닙니다. (0) 2023.11.14 개발에 관하여 하고 싶은 이야기 : 파트 2 - 데이터베이스 다중화 (1) 2023.11.14 개발에 관한 하고 싶은 이야기 : 파트1 - 웹 개발과 분산 (1) 2023.11.14 안전한 코드를 작성하는 10가지 방법. (By NASA) (0) 2023.11.04 .Net Multiplatform (1) 2023.11.03