2장 현대 웹 시스템 구조 및 아키텍처
웹 시스템들의 발전 역사
현대의 웹 시스템들의 구조 및 아키텍처
현대의 개발팀의 구조
웹 시스템들의 발전 역사
컴공 학부생, 웹 개발자들이라면 한 번씩 읽어봤을 내용! 가볍게 요약 하겠습니다.
1세대 웹 시스템
- 1989년에 팀 버너스 리(Tim Berners-Lee)가 월드와이드웹(WWW, World Wide Web)을 발명.
- 수많은 서비스들이 웹을 통해 제공되고 2000년대 닷컴붐(Dotcom Boom)때에 많은 웹서비스 회사들이 생기고 관련 기술들이 발전했다.
- 이 때 웹 시스템들은 훨씬 단순한 형태였다: 웹서버는 단순히 브라우저가 요청하는 해당 페이지(HTML)를 보내는 정도의 기능**
자바스크립트 탄생
- 단순하고 정적인 웹 서비스들이 복잡해지기 시작하면서 사용자 인터렉션(user interaction)의 중요성이 부각됐고, 이 문제점을 해결하기 위해 자바스크립트(JavaScript)가 출현한다.
- 자바스크립트는 웹 브라우저에서 실행이 가능한 프로그래밍 언어이며, 웹상에서 동적인 기능을 제공하기 위해 사용된다.
- 전체 페이지를 로드(load)하지 않아도 사용자의 인풋(input)들을 동적으로 처리하고 새로운 데이터들을 제공할 수 있게 됐다. (JS를 통해서 사용자와 동적인 상호작용 기능을 구현하는 기술이 AJAX라는 이름으로 알려졌다.)
- 하지만 여전히 API 개념은 사용되지 않고 서버에서 클라이언트로 HTML, JS, 데이터를 한 번에 전송하는 방식있다. (XML(데이터를 전송하기 위한 markup 언어, HTML과 비슷하나 데이터를 표현하기 위해 사용)의 구조로 전송 되는 것이 일반적이었다.)
프론트엔드와 백엔드의 구분
- 동적인 서비스가 많이 사용되고, 편리하다는 것을 알게 되니, JS의 역할이 더욱 커지고, 이제는 JS로 HTML, CSS등 사이트(프론트엔드)에 관한 모든 부분을 구현로 모든것을 해결하게 됩니다.
- 이렇게 SPA(Single Page Application)이라는 프론트엔드 개발이 인기를 얻게됩니다.
*SPA : 단일 페이지로 모든 웹사이트/서비스의 기능을 구현.
- 이렇게 사이트의 페이지를 렌더링(Rendering)하는 데 필요한 JS코드는 최초의 통신에서 모두 한 번에 받으므로 그 다음부터는 서버와 데이터만 주고받으면 된다. (데이터 전송, 생성, 수정 등)
- 백엔드 API 개발자의 역할은 프론트엔드 시스템(혹은 다른 요청할 수 있는 시스템)과 데이터를 실시간으로 주고받을 수 있는 기능을 구현하는 역할을 담당한다.
현대의 웹 시스템들의 구조 및 아키텍처
- 현대에 들어서는 사용자가 기하급수적으로 늘어남에 따라 처리해야 되는 요청들도 많아졌다. 웹 시스템의 규모도 같이 커지고 복잡해졌다.
*이는 API 시스템들이 처리해야 될 동시 요청 수도 매우 많아졌다는 뜻이다.
- 이러한 문제점들을 해결하기 위해 여러 해결책들이 나왔다. 대표적인 아키텍처로는 MSA(Micro Service Architecture, API 서버들을 더 세분화하고 규모를 키우는 아키텍처)가 있다.
- 분석해야 하는 데이터 양이 늘어나면서 ETL(Extract, Transfer, Load) 혹은 Data Pipeline 시스템과 Hadoop 등 대용량 분석 프레임워크 등의 발달, ML, DL과 같은 AI 기술의 발달도 잇달았다.
- 이런 시스템들을 회사들이 활용하게 됨으로써, 백엔드 개발들의 역할은 더욱 커지는 추세이다.
*일반적인 API 시스템 개발부터, Data Pipeline 시스템, ML 시스템, Big Data 분석 시스템 등 비실시간(혹은 준실시간) 대규모 데이터 수집 및 분석 시스템 등등...
현대의 개발팀의 구조
- 기획자(PM, Produc Manager) - 개발하고자 하는 서비스를 정의하고 기획하는 역할
- 디자이너(Designer) - (일반적으로 웹 시스템 개발에는) UI(User Interface), UX(User eXperince)를 구현하는 역할
- 프론트엔드 개발자(Frontend Developer) - 프론트엔드 시스템을 구현하는 역할, HTML, CSS, JS 등
- 백엔드 개발자(Backend Developer) - 백엔드 시스템을 개발하는 역할, 비교적 앞 쪽 인 API 개발자, 뒤 쪽인 데이터 관련 시스템 개발자로 구분되기도 한다.
- 데브옵스(DevOps) - Devolopment와 Operation의 합성어로, 직군보다는 개발 분야의 문화나 추세라고 보는게 더 정확하다. 시스템 개발 뿐만 아니라 시스템 운영까지 담당하는 역할, AWS 등의 클라우드 서비스로 시스템 인프라스트럭처 구축과 관리를 개발자들이 직접 구현하는 것이다.
- 풀스택 개발자(Full Stack Developer) - 프론트엔드와 백엔드 시스템을 같이 구현하는 개발자 혹은 역할
- 시스옵스(SysOps, System Operations) - 시스템 인프라스트럭처(System Infrastructure)의 구현과 관리 및 운영을 담당. 데브옵스와 다르게 실제 하드웨어를 다를 수 있는 직군. 서버 직접 설치 및 운영이나 그 외 물리적인 네트워크 구축 등
- 데이터 사이언티스트(Data Scientist) - 데이터 분석에 필요한 알고리즘과 모델링의 구현을 담당하는 역할. 대부분 수학, 통계학, 물리학 등의 석사 이상의 학위를 가지고 있고, 수요가 많다!
인공지능 가즈아!!
- 데이터 엔지니어(Data Engineer) - 데이터 사이언티스트와 함께 일하며, 주로 데이터 사이언티스트가 데이터를 분석할 수 있도록 데이터를 정리하고 정석화시키는 시스템을 구현하는 역할.
- 테스터(Tester) - 시스템을 테스트하여 검증하는 역할. 직접 코딩해서 테스트하는 매뉴얼 테스팅(Manual Testing)과 테스트 자동화 시스템을 구현하는 테스터로 구분되기도 한다.
(책에서는 스크럼 마스터도 소개하는데, 개인적인 생각으로는 개발 방법론에 따라 이 직책의 명칭이 다를 수도 있고, 역할이 매우 다양하기 때문에 제외했다!)
2장 요약
웹 시스템의 전반적인 역사와 구조를 알아봄으로써 웹시스템 개발의 필요성, 중요성 등의 큰 그림을 그릴 수 있는 내용들입니다.