TIL | 백엔드 기본 갈고 닦자 - 2

송치헌·2021년 7월 28일
0

Chapter 2. 현대 웹 시스템 구조 및 아키텍처

웹 시스템들의 발전 역사

  • 초기 웹 시스템
    • 1989년 팀 버너스 리(Tim Berners-Lee)가 월드와이드웹(WWW, World Wide Web)을 발명한 후 2000년대에 웹 시스템들과 웹 관련 기술들이 엄청난 발전을 하였다.
    • 당시의 웹 서버는 단순히 웹 브라우저가 요청하는 해당 페이지를 보내 주는 정도의 기능만 가능했다.
    • 예를 들어, /news.html 페이지를 웹 브라우저가 요청하면 해당 HTML 페이지를 보내 준다. 그러면 웹 브라우저는 웹 서버에서 전달받은 HTML 파일을 렌더링하여 사용자에게 보여 준다.
    • 간단하지만 정적인(static) 페이지만 보여 줄 수 밖에 없는 구조이다.
  • 자바스크립트의 역할
    • 단순했던 웹 서비스들이 조금씩 복잡해지기 시작하면서 사용자 인터랙션(user interaction)이 중요해지기 시작한다.
    • 정적인 데이터나 문서만을 보여주는 것이 아니라 동적인 상호작용이 중요해지기 시작했다.
    • 따라서 웹 브라우저에서 실행이 가능한 프로그래밍 언어인 자바스크립트의 역할이 커지기 시작했다.
    • 웹 서버가 HTML뿐만 아니라 동적인 기능을 구현하는 자바스크립트 코드까지 웹 브라우저에 전송하면 웹 브라우저는 서버에서 전달받은 자바스크립트 코드를 실행하여 동적인 기능이 사용자에게 제공되도록 한다.
  • 프론트엔드와 백엔드
    • 자바스크립트가 주가 되면서 SPA(Single Page Application)방식의 프론트엔드 개발이 인기를 얻게 되었다.
    • 페이지 렌더링(rendering)하는 데 필요한 자바스크립트 코드는 최초의 통신에서 한 번에 받으므로 그 다음부터는 서버와 데이터만 주고받으면 된다.
    • 이렇게 자연스럽게 프론트엔드 서버와 백엔드 서버가 나뉘게 된다.
    1. 프론트엔드
      • 주로 시스템의 UI(User Interface)와 UX(User eXperience) 부분을 구현하는 역할을 담당한다.
      • HTML, CSS 그리고 자바스크립트 기술이 주로 사용 되고, ReactJS, AngularJS, Webpack, npm, 그리고 그 외 여러 자바스크립트 프레임워크 및 라이브러리가 사용된다.
    2. 백엔드
      • 프론트엔드 시스템 혹은 다른 클라이언트 시스템과 데이터를 실시간으로 주고받을 수 있는 기능을 구현하는 역할을 담당한다.
      • 최대한 빠른 속도로 처리할 수 있는 시스템을 구현하는 것이 백엔드 개발자의 중요한 역할이 된다.
      • 대표적으로 Java, Scala, Rust, Python 등이 있다.
      • 처리 용량이나 속도가 크게 중요하지 않은 시스템은 Ruby, PHP 등으로 개발한다.
      • 최근에는 NodeJS라는 자바스크립트 엔진이 인기를 얻으며 자바스트립트로 구현된 백엔드 시스템도 늘어나는 추세이다. 자바스크립트를 사용하여 프론트엔드와 백엔드 둘 다 구현할 수 있다는 장점이 있다.

현대 웹 시스템들의 구조 및 아키텍처

현대 웹 시스템 아키텍처

  • 현대에는 웹 시스템 규모가 커지고 처리해야 하는 동시 요청 수, 데이터의 규모가 기하급수적으로 증가하면서 웹 시스템 아키텍처 또한 방대해지고 복잡해졌다.
  • API 시스템들이 방대해지고 복잡해지는 문제를 해결하기 위해서 MSA(Micro Service Architecture) 같은 새로운 아키텍처 개념이 발전되고, API 서버들이 훨씬 더 세분화되며 규모가 커지게 된다.
  • 또한 분석해야 하는 데이터의 양이 늘어나면서 ETL(Extract, Transfer, Load) 혹은 Data Pipeline 시스템이 발전하게 되며, Hadoop 등 대용량 분석 프레임워크 등의 발달로 "Big Data" 분석 시스템이 많은 회사들의 백엔드 시스템에 도입된다.
  • 백엔드 개발자로 입문하면 주로 API 시스템 구현부터 시작하게 된다.

현대 개발팀의 구조

  • 기획자(product manager)
    • 기획자(PM, Product Manager)는 개발하고자 하는 서비스를 정의하고 기획하는 역할을 담당한다.
    • 개발하려는 시스템이 주는 가치 정의
    • 세세한 기능들의 기획 및 정의를 구현
    • 지속적으로 고객들의 피드백을 반영하면서 기능들의 정의와 기획을 발전시키는 역할
  • 디자이너(designer)
    • 일반적으로 웹 시스템 개발에는 UI(User Interface) 및 UX(User eXperience)를 구현하는 역할 담당
    • 사용자(User)가 직접 경험할 수 있는 부분들을 사용자가 좋아하고 편리해 할 수 있게 디자인하는 역할
  • 프론트엔드 개발자(frontend developer)
    • 프론트엔드 시스템을 구현하는 역할을 맡는 개발자
    • 우리나라에는 HTML과 CSS 부분만을 담당하는 퍼블리셔(publisher)라는 직군이 따로 있다.
  • 백엔드 개발자(backend developer)
    • 백엔드 시스템을 개발하는 역할
    • 좀 더 앞쪽 부분을 담당하는 API 개발자, 더 뒤쪽 부분, 즉 데이터 수집, 분석, 관리 등의 데이터 관련 시스템을 개발하는 개발자로 나눌 수 있다.
    • API 개발과 데이터 관련 시스템 개발은 서로 많이 다르고, 데이터 관리, 분석 시스템 구현이 API 구현보다 더 난이도가 높아서 경력이 높은 개발자가 보통 뒷부분에 해당하는 시스템을 구현한다.
  • 데브옵스(DevOps)
    • "Development"와 "Operation"의 합성어로, 직군이라기 보다는 개발 분야에서 나타나는 문화나 추세가 더 정확하다.
    • 이름 그대로 개발뿐만 아니라 시스템 운영까지 담당하는 것을 이야기한다.
    • AWS 등의 클라우드 서비스가 발달함에 따라 서버 구축 및 운영 등의 시스템 인프라 스트럭처(infrastructure) 구축과 관리를 하는 데 있어 실제 서버 하드웨어를 직접 다루지 않아도 되게 되었다.
    • 따라서 자연스럽게 시스템 운영(system operation) 담당자가 따로 필요없이 개발자들이 직접 시스템 인프라스트럭처를 구현하는 추세가 퍼지게 되었다.
    • 빌드, 테스트, 배포 등 개발에서 배포까지 과정을 자동화하여 전체적인 사이클(cycle)을 효율적으로 진행될 수 있는 개발 환경을 구축
  • 풀스택 개발자(full stack developer)
    • 프론트엔드, 백엔드 개발 둘 다 가능한 개발자
    • 스타트업같은 소규모 기업에서 리소스(resource)가 제한적일 수밖에 없어서 풀스택 개발자를 주로 원한다.
  • 시스옵스(SysOps, System Operations)
    • 데브옵스와 다르게 실제 하드웨어를 다룰 수 있는 직군
    • 시스템 인프라스트럭처(system infrastructure)의 구현과 관리 및 운영을 담당
    • 서버를 직접 설치하고 운영
    • 그 외 물리적인 네트워크 구축 및 운영 등 시스템 인프라스트럭처 운영에 필요한 모든 부분 담당
    • 주로 직접 데이터 센터(data center)를 사용하여 시스템을 운영하는 회사에 필요한 직군
    • AWS 등의 클라우드 서비스가 널리 사용되며 시스옵스에 대한 수요가 많이 줄어들었다.
  • 데이터 사이언티스트(data scientist)
    • 데이터 분석에 필요한 알고리즘과 모델링의 구현을 담당
    • 많은 양의 데이터를 분석해서 새로운 정보와 가치를 만들어 낼 수 있는 직군
  • 데이터 엔지니어(data engineer)
    • 데이터 사이언티스트와 함께 일하는 직군
    • 데이터 사이언티스트가 데이터를 분석할 수 있도록 데이터를 정리하고 정석화시키는 시스템 구현
  • 테스터(tester)
    • 시스템을 테스트하여 검증하는 역할 담당
    • 크게 2가지 역할로 구분되는데, 하나는 QA 테스터(Quality Assurance Tester)로 직접 손으로 테스트하는 메뉴얼 테스팅(manual testing)을 담당한다. 다른 하나는 테스트 자동화 시스템을 구현하는 테스터이다.
  • 스크럼 마스터(scrum master)
    • 스크럼 개발론이 널리 사용되면서 새로 생겨난 직군
    • 생산성을 높이기 위해 도입했지만, 정작 제대로 스크럼을 사용하지 못하여 개발성이 그다지 높아지지 않은 문제가 발생했다. 따라서 제대로 사용할 수 있도록 코치(coach)해 주고 이끌어 주는 역할
profile
https://oraange.tistory.com/ 여기에도 많이 놀러와 주세요

0개의 댓글