TIL25 | 웹 서비스의 역사와 발전

이정아·2021년 9월 22일
0

Web

목록 보기
1/1
post-thumbnail

1. 인터넷과 웹은 어떻게 생겼을까?

인터넷

물리적으로 떨어져있는 서버와 서버의 연결을 가능하게 해주는 인터넷은
1960년 군사 목적으로 출현했으며 당시 기업이나 연구소, 군대와 같은
거대한 기관에서만 사용됐다.

web

유럽입자물리 연구소에 재직중이던 팀 버너스리가 웹의 전신이 되는 프로그램을
개발하며 1990년 인터넷이 연구소에 들어오기 시작했다.
우리가 일반적으로 생각하는 인터넷, 인터넷의 대중화는 이렇게 웹이 등장하며
시작됐다.

인터넷이 불러온 가장 큰 혁신은 유통이다.
예전에는 소프트웨어를 구입하려면 물리적인 매개체(ex: cd)가 필요했지만
인터넷이 발전하면서 많은 개발자들이 창업을하기 시작했고, 2000년대
닷컴붐(닷컴 버블)이 일어났다

닷컴 버블(dot-com bubble)은 인터넷 관련 분야가 성장하면서 산업 국가의 주식 시장이 지분 가격의 급속한 상승을 본 1995년부터 2000년에 걸친 거품 경제 현상이다. IT 버블, TMT 버블, 인터넷 버블이라고 불리기도 한다.
이 시기는 흔히 닷컴 기업이라 불리는 인터넷 기반 기업이 설립되던 시기였으며 많은 경우에 실패로 끝났다.


웹의 발전

1세대 웹 - 정적 웹

초창기 웹사이트는 단순한 정보 제공 위주였다.

  • 이 때의 기술은 html, css가 전부

2세대 웹 - 동적 웹

2세대 웹은 이제 원하는 자료를 찾는 것뿐만 아니라 글을 쓰거나 바꾸면서 직접 컨텐츠를 만듭니다.

  • 웹 기반의 언어인 자바스크립트 출현, 역할이 커지기 시작
    그러나 아직 자바스크립트는 일부분에서만 사용되었고, 현재 통용되는 API의 개념이 아직은 널리 사용되지 않음
  • 동일한 서버에서 html,javascript(프론트 영역)와 데이터(백엔드 영역) 같이 전송

3세대 웹 - SPA, 구별되기 시작하는 Frontend / Backend

3세대 웹은 시맨틱 기술을 이용하여, 웹페이지에 담긴 내용을 이해하거나, 사용자에 맟춤형 정보를 제공하는 웹기술을 말합니다.
예를 들어 쇼핑몰에서 자기가 사려고 하는 물건을 장바구니에 담아 놓는 순간, 그와 유사한 물건을 추천상품으로 보여주는 것. 또는 유튜브에서 자기가 보는 영상과 연관된 다른 영상을 추천해주는 것을 말합니다.

  • 동적인 기능이 주가 되면서 자바스크립트코드 위주로 작성(그 안에 html,css포함)
  • Single Page Application = SPA 라는 개념이 등장(하나의 파일로 전체 사이트를 구현)
  • 기존의 방식대로 서버가 페이지 구성에 필요한 모든 요소(HTML, JavaScript, Data)를 매번 전송하는 것이 아니라, 파일은 처음 한 번만 송수신. 그 뒤로는 실시간 데이터만 주고 받음.
  • Frontend 개발과 Backend 개발이 독립적으로 분리 (프론트 - UI UX / 백엔드 - Data)
  • 기술 스택도 각자에 맞는 스택을 시용하기 시작함. (ex. Angular 의 출현!)
    이후 사용자에게 편하고, 더 멋진 웹 Frontend 를 구현할 수 있게 도와주는 Framework 혹은 Library 들이 탄생. (ex. React, Vue)

Frontend 와 Backend가 구조적으로 분리가 되면서, Frontend 서버와 Backend API 서버도 분리가 되며 그에 따라 Frontend 개발과 Backend 개발 업무가 분리가 되는 구조로 발전된다.

현대 웹 시스템의 구조

엄청난 동시 접속자 수와 방대한 Data의 양때문에 웹사이트가 매우 복잡하고 정교해진다.

→ Frontend 서버와 Backend 서버의 분리

  1. Backend 는 웹 서비스의 스케일이 엄청나게 커짐에 따라(그리고 분석해야 하는 데이터 양이 엄청나게 늘어남에 따라 ) architecture(시스템 구조)가 굉장히 복잡하게 발전 되며 규모도 엄청나게 커진다.
    • Micro Service Architecture (MSA) 등의 새로운 architecture 개념의 발전으로 API 서버들이 훨씬 더 세분화 되며 규모가 커짐
    • 분석해야 하는 데이터의 양이 엄청나게 늘어나면서 소위 "Big Data" 분석 시스템이 많은 회사들의 backend 시스템에 도입
    • 데이터를 통해 Insight 를 도출해내는 것이 다음 도전 과제 (ex. 추천 상품, 음악 플레이리스트 추천)
    • 게다가 최근에는 ML(Machine Learning)과 AI 기술의 발달로 많은 회사들이 ML과 AI 시스템도 활용하게 됨으로 backend 시스템은 계속해서 방대해지는 추세
  2. Frontend 는 Node.js 와 React 등의 JavaScript 엔진과 프레임워크/라이브러리의 발달로 웹에서 더 복잡한 기능 구현이 가능 → Node.js 의 발전으로 프론트 개발자가 간단한 백엔드 기능을 직접 구현하는 일도 요즘은 흔함.

3. 현대 개발팀의 일반적인 구조

  • Product manager(기획자)
    • 개발하고자 하는 서비스를 정의하고 기획하는 역할을 담당하는 직군
    • 우리나라에서는 PM 이 개발자의 상사 같은 지위를 가지고 있는 곳이 많은데, 미국 에서는 그렇지 않다.
    • PM 과 개발자는 담당하는 일이 다른 팀원 이지 서로 상하관계가 아니다.
  • Designer
    • 웹 시스템 개발에는 UI(User Interface) 및 UX (User Experience) 를 구현하는 역할을 담당
    • 사용자가 직접 경험하고 사용하는 서비스를 눈에 보기 좋게, 사용하기 편리하게 디자인하는 역할
  • Frontend Developer
    • HTML, CSS, JavaScript 로 프론트엔드 시스템을 구현하는 역할
    • 사용자와 가장 밀접하게 연결되어 있는 개발자
    • (우리나라에는 퍼블리셔(publisher) 라고하는 HTML, CSS 만 담당하는 한국만의 고유 직군이 있음.)
  • Backend Developer
    • 백엔드 시스템을 개발하는 역할.
    • Backend 개발자들도 크게 2가지로 나뉨
      • Backend 에서 좀더 앞 쪽을 담당하는 (즉 API 개발을 담당하는) 개발자.
      • Backend에서도 완전 뒤쪽, 즉 데이터 수집, 분석, 관리 등의 데이터 관련 시스템을 개발하는 개발자.
      • (경력이 높아질 수록 좀 더 난이도가 있는 뒷 부분에 해당하는 시스템을 많이 구현.) → DevOps
  • DevOps (Development Operations)
    • 시스템 개발(Development) 뿐만 아니라 시스템 운영(Operation)까지 담당하는 것
    • 직군 이라기 보다는 개발 분야에서 나타나는 문화나 추세
    • AWS 등의 클라우드 서비스가 발달함에 따라 서버 구축 및 운영 등의 System Infrastructure 관리까지 백엔드 개발자가 직접 구현하는 추세
    • cf) IAC(Infrastructure As Code)
    • DevOps 에 대한 수요가 굉장히 높은 편. 개발 능력과 함께 DevOps 능력도 키울 것.
  • SysOps (System Operations)
    • System Infrastructure 의 구현과 관리 및 운영을 담당하는 직군
    • DevOps 와 다르게 실제 하드웨어를 다룰 수 있는 직군
    • Data Center 를 사용하여 시스템을 운영하는 회사에 필요한 직군
    • 직접 데이터 센터에 서버를 구성하지 않고 AWS 같은 클라우드 서비스가 점점 더 많이 쓰이는 추세.
      따로 SysOps 인력을 두지 않고 DevOps 개발자들이 System Infrastructure 를 담당하는 추세.
  • Data Scientist
    • Machine Learning, AI 등의 데이터 분석에 필요한 알고리즘과 모델링의 구현을 담당하는 직군.
    • 많은 양의 데이터를 분석해서 새로운 정보와 가치를 만들어 낼 수 있는 직군
  • Data Engineer
    • Data Scientist 가 데이터를 분석할 수 있도록 데이터를 정리하고 정석화 시키는 시스템을 구현하는 역할을 담당
  • Tester
    • 시스템을 테스트하여 검증하는 역할을 담당하는 직군
    • QA (Quality Assurance) - 직접 manual testing을 실행하는 직군.
    • Software Engineer in Test / Test Automation Engineer - Manual testing이 아닌 자동 테스트 시스템을 전문으로 구현하는 개발자.
  • Others
    • Full Stack Developer
      • Frontend 와 Backend 를 모두 개발하는 개발자
      • Node.js 를 통해 자바스크립트로 프론트, 백 둘 다 개발이 가능해지면서 풀스택 개발자 증가.
      • 둘다 한다고 하니 멋있어 보이지만 개발 입문자는 추천하지는 않음.
      • 요즘 기술은 너무 발전해있기 때문에, 한 분야를 깊게 파는것이 중요. 여러 분야를 넓게 하는 것은 나름의 장점이 있지만, 결국에 전문가가 되기는 어려운 면이 있다.
      • 선택과 집중. 한 분야의 전문가가 된 후에 필요한 정도로 나머지 분야에 대해 학습하는 것을 추천
    • Project Manager
      • 프로젝트의 일정 및 출시 관리를 담당하는 역할
    • Scrum Master
      • Scrum 개발론이 개발팀 에서 널리 사용 됨에 따라 scrum process 를 관리하고 코치하는 직군이 생김.
    • Software Architecture
      • 규모가 굉장히 큰 시스템을 개발하는 회사는 Software Architecture 라고 해서 시스템의 전체 구조 디자인을 담당하는 직군이 따로 있는 곳도 존재.
      • 주로 오래된 경력의 전문가 개발자들이 software architecture role을 담당.
      • Software Architecture 직군은 요즘에는 많이 사라지고 있는 추세. Scrum 개발론이 널리 적용되고 있기때문에, 예전처럼 누군가가 시스템 구조 디자인만 따로 담당하고 개발자들은 전달된 디자인을 개발만 하는 구조는 더이상 어울리지 않는다.
      • 요즘은 개발자들이 scrum 절차에 따라 직접 시스템 디자인을 구현하고 발전시켜 나간다.

0개의 댓글