WEB - 웹 서비스의 역사와 발전

Sangho Moon·2020년 9월 3일
0

WEB

목록 보기
1/3
post-thumbnail

Web System Architecture History

  1. 전통적인 Web System Architecture

  2. User interaction이 점점 더 중요해짐 - JavaScript / AJAX

  3. SPA(Single Page Application) - 구별되기 시작하는 Frontend와 Backend

  4. 규모가 커지기 시작하는 Web System - Micro Service Architecture, Data Pipeline Systems, ML(Machine Learning), and etc

  5. Modern Development Team 구조


1. 전통적인 Web System Architecture

  • Web Server가 HTML page 전체를 클라이언트(웹 브러우저 등등)에게 전송.

  • 초창기 웹사이트/서비스에 적합했던 시스템. 초창기 웹사이트 들은 간단했고 단순 정보 제공 위주였다. 특별히 기능이 많지 않았으며, 무엇보다 user interaction이 많이 요구되지 않았다.


2. User interaction이 점점 더 중요해짐 - JavaScript / AJAX

  • 웹서비스들이 점점 발전함에 따라 단순한 static page가 아닌 더 dynamic한 요소들이 요구됨.

  • 그럼으로 JavaScript의 역할이 커지기 시작함.

  • Web server에서 전체 HTML 페이지 뿐만이 아니라 JavaScript JavaScript를 통해서 서버와 필요한 데이터만 주고 받음으로 dynamic한 user interaction을 구현하게 됨.

  • AJAX라는 이름으로 이 기술이 알려지기 시작함.

  • 그러나 아직 JavaScript는 일부분에서만 사용되었고, 또한 아직 현재 통용되는 API의 개념이 널리 사용되지 않았다.

  • 동일한 server에서 html/javascript 과 데이터 둘다 전송.

  • 데이터 전송에는 XML이 쓰이기 시작함.


3. SPA(Single Page Application) - 구별되기 시작하는 Frontend와 Backend

  • SPA(Single Page Application)의 개념이 개발됨.

    • 이름 그대로, 단일의 html 페이지에서 전체 웹 사이트/서비스를 구현.
    • 기존의 방식대로 서버가 페이지 구성에 필요한 모든 요소(html, javascript, 데이터)를 매번 전송하는 것아 아니라, 맨처음 전송된 단일 html페이지에 포함되어 있는 JavaScript에서 필요한 데이터를 API server로 부터 호출하여 필요한 화면을 dynamic하게 새로 구성해주는 방식.
    • 즉 HTML/JavaScript 부분과 데이터 부분이 구조적으로 분리가 된다.
    • 그럼으로 Frontend 개발과 Backend 개발이 더 독립적으로 분리가 된다.
  • Fronetend 와 Backend가 구조적으로 분리가 되면서, Frontend 서버와 Backend API 서버도 분리가 되며 그에 따라 Frontend 개발과 Backend 개발 업무가 분리가 되는 구조로 발전된다.


4. 규모가 커지기 시작하는 Web System - Micro Service Architecture, Data Pipeline Systems, ML(Machine Learning), and etc

  • 웹 사이트/서비스들이 엄청나게 발전되고 규모가 커짐에 따라 시스템 구조도 훨씬 더 복잡하고 커지게 된다.

  • Frontend는 NodeJS 와 ReactJS등의 JavaScript 엔진과 라이브러리의 발달으로 웹상에서 더 복잡한 기능들을 구현 가능하게 된다.

  • NodeJS의 발전으로 frontend 개발자가 간단한 backend 기능을 직접 구현하는 일도 요즘은 흔하게됬다.

  • Backend는 많은 웹서비스들의 스케일들이 엄청나게 커짐에 따라(그리고 분석해야 하는 데이터 양이 엄청나게 늘어남에 따라 ) architecture가 굉장히 복잡하게 발전되며 규모도 엄청나게 커진다.

    • Micro Service Architecture 등의 새로운 architecture 개념의 발전으로 API 서버들이 훨씬 더 세분화 되며 규모가 커지게 된다.
    • 분석해야 하는 데이터의 양이 엄청나게 늘어나면서 ETL / Data Pipeline이 발전하게 되며, Hadoop등 big data 분석 프래임워크등의 발달로 소위 "Big Data" 분석 시스템이 많은 회사들의 backend 시스템에 도입되게 된다.
    • 게다가 최근에는 ML(Machine Learning)과 AI의 기술 발달로 많은 회사들이 ML과 AI 시스템도 활용하게 됨으로 backend 시스템은 계속해서 방대해져가는 추세이다.

5. Modern Development Team 구조

  • Product Managers(기획자)
    • 우리나라에서는 PM이 개발자의 상사 같은 지위를 가지고 있는 곳이 많은데, 미국 에서는 그렇지 않다.
    • PM과 개발자는 담당하는 일이 다른 팀원이지 서로 상하관계가 아니다.
  • Designer
  • Frontend Developers
    • 우리나라에는 frontend developer 이외에도 퍼블리셔 라고하는 html/css를 담당하는 한국만의 고유 직군이 있음.
  • Backend Developers
    • Backend 개발자들도 크게 2가지로 나뉨:
      • Backend에서도 좀더 앞쪽을 담당하는 (즉 API 개발을 담당하는) 개발자.
      • Backend에서도 완전 뒤쪽, 즉 데이터 수집, 분석, 관리 등의 데이터 관련 시스템을 개발하는 개발자.
    • DevOps 라고 해서 Backend 개발자가 system infrastructure 관리까지 담당하기도 함.
      • AWS 같은 Cloud 서비스와 Puppet, Chef, Ansible같은 IAC(Infrastructure As Code) tool들의 발전으로 개발자들도 충분히 system infrastructure를 관리 할수 있음.
  • SysOps (System Operations)
    • System Infrastructure를 담당하는 직군. Data Center등에 서버 설치 및 관리가 주 임무 중 하나.
    • 앞에서 말했듯이, 직접 data center에 서버를 구성하지 않고 AWS 같은 Cloud 서비스가 점점 더 많이 쓰이는 추세 임으로 따로 SysOps 인력을 두지 않고 DevOps 개발자들이 system infrastructure를 담당하는 추세이다. 특히 규모가 작은 회사들 일수록 SysOps 인력을 따로 두지 않는다.
  • Data Scientist:
    • Machine Learning, AI 등의 데이터 분석 알고리즘 과 데이터 분석 modeling을 구현하는 직군.
  • Data Engineer:
    • Data Scientist들이 대부분 코딩을 아주 잘하지는 못하기 때문에 data scientist들을 도와서 data modeling등의 구현을 도와주는 개발자들.
  • Tester
    • QA (Quanlity Assurance):
      • 직접 manual testing을 실행하는 직군.
    • Software Engineer in Test / Test Automation:
      • Manual testing이 아닌 자동 테스트 시스템을 전문으로 구현하는 개발자라고 생각하면 된다.
  • 이외에도:
    • Full Stack Developer라고 해서 frontend와 backend를 모두 개발하는 개발자들도 있음.
      • 둘다 한다고 하니 왠지 멋있어 보이지만, 실제로는 추천하지는 않음.
      • 요즘 기술은 너무 발전해있기 때문에, 한 분야를 깊게 파는것이 중요하다. 여러 분야를 넓게 하는것은 그것 나름의 장점이 있지만, 결국에 전문가가 되기에는 어려운 면이 있다.
    • 규모가 큰 회사들은 Project Manager라고 해서 프로젝트의 일정 및 출시 관리를 담당하는 role을 가지고 있는 곳도 있다.
    • Scrum이 개발팀 에서 널리 사용됨에 따라 Scrum Master라고 하는 scrum process를 관리하고 코치하는 role도 있다.
    • Software Architecture:
      • 규모가 굉장히 큰 시스템을 개발하는 회사는 Software Architecture라고 해서 시스템의 전체 구조 디자인을 담당하는 role이 따로 있는 곳도 있다. 주로 오래된 경력의 전문가 개발자들이 software architecture role을 담당했다.
      • Software Architecture 직군은 요즘에는 많이 사라지고 있는 추세이다. Scrum이 널리 사용되고 있기때문에, 예전처럼 누군가가 시스템 구조 디자인만 따로 담당하고 개발자들은 전달된 디자인을 개발만 하는 구조는 더이상 어울리지 않는다.
      • 요즘은 개발자들이 scrum 절차에 따라 직접 시스템 디자인을 구현하고 발전시켜 나간다.

Ref.
WeCode 학습자료

profile
Front-end developer

0개의 댓글