- 인터넷과 웹이 어떠한 형태로 출현 했는지 설명할 수 있다.
- 1세대, 2세대, 3세대 웹의 발전과 각각의 특징에 대해 설명할 수 있다.
- Frontend, Backend 가 언제부터 나뉘게 되었는지, 각각의 역할에 대해 이해한다.
- 현대 개발팀을 구성하는 여러 직군에 대해서 이해한다.
1.1 인터넷과 웹의 출현
-2. 인터넷의 출현
Internet
- 처음에는 군사 목적
- 핵 공격에도 견딜 수 있는 강인한 통신 시스템 필요 >>> 인터넷
- 인터넷 → 물리적으로 떨어져 있는 서버와 서버의 연결을 가능하게 해줌.
- 1990년
WEB
이 출현하며 대중적으로 사용 되기 시작
**팀 버너스리**
스위스 유럽입자물리 연구소.
**World Wide Web**
이라는 프로그램을 개발
- info.cern.ch "home of the first website"
- 우리가 일반적으로 생각하는 인터넷, 인터넷의 대중화는 이렇게 웹이 등장하면서 시작됨.
1-4. 인터넷이 불러온 혁신
- 가장 큰 혁신 → 유통
- 닷컴붐(
**Dot-com bubble**
) (2000년대).
- 웹 기반의 서비스 시작. 인터넷에 본인들이 만든 SW 를 올려서 판매 시작.
- 1세대 웹 서비스 → 정적인 사이트(HTML, CSS 가 전부) ex. Yahoo 2000
2. Web System Architecture History
2-1. 1세대 웹 - 전통적인 Web System Architecture. 정적 웹.(no user interaction, no logic)
2-2. 2세대 웹 - User Interaction 의 증가. 동적 웹(자바스크립트)
2-3. 3세대 웹 - SPA(Single Page Application 하나의 html페이지에서 파일로 전체 사이트를 구현) - 구별되기 시작하는 Frontend와 BackendFrontend 서버와 Backend API 서버도 분리(서버가2개!)
2-4. Modern WEB - 규모가 커지기 시작하는 Web System의 발전
-
User Interaction 의 중요성 증가 + 웹 서비스의 복잡성 증가 + 사용자 수, 데이터의 양 증가
-
(ex. Instagram, Twitter. 기능적으로 복잡한 것은 하나도 없지만 사용자와 데이터의 양이 어마어마함.)
-
이전에 겪지 못한 두 가지 문제 - 1. 동시 접속자 수, 2. 데이터의 양 → System architecture
의 발전
-
웹 사이트/서비스들이 엄청나게 발전되고 규모가 커짐에 따라 시스템 구조도 훨씬 더 복잡하고 커지게 된다.
→ Frontend 서버와 Backend 서버의 분리
Backend
는 웹 서비스의 스케일이 엄청나게 커짐에 따라(그리고 분석해야 하는 데이터 양이 엄청나게 늘어남에 따라 ) architecture(시스템 구조)가 굉장히 복잡하게 발전 되며 규모도 엄청나게 커진다.
- Micro Service Architecture 등의 새로운 architecture 개념의 발전으로 API 서버들이 훨씬 더 세분화 되며 규모가 커짐
- 분석해야 하는 데이터의 양이 엄청나게 늘어나면서 소위 "Big Data" 분석 시스템이 많은 회사들의 backend 시스템에 도입
- 데이터를 통해 Insight 를 도출해내는 것이 다음 도전 과제 (ex. 추천 상품, 음악 플레이리스트 추천)
- 게다가 최근에는 ML(Machine Learning)과 AI 기술의 발달로 많은 회사들이 ML과 AI 시스템도 활용하게 됨으로 backend 시스템은 계속해서 방대해지는 추세
Frontend
는 Node.js 와 React 등의 JavaScript 엔진과 프레임워크/라이브러리의 발달로 웹에서 더 복잡한 기능 구현이 가능 → Node.js 의 발전으로 프론트 개발자가 간단한 백엔드 기능을 직접 구현하는 일도 요즘은 흔함.
3. Modern Development Team 구조
Product manager(기획자)
- 개발하고자 하는 서비스를 정의하고 기획하는 역할을 담당하는 직군
Designer
- UI(User Interface) 및 UX (User Experience)
- 사용자가 직접 경험하고 사용하는 서비스를 눈에 보기 좋게, 사용하기 편리하게 디자인
Frontend Developer
- HTML, CSS, JavaScript 로 프론트엔드 시스템을 구현하는 역할
- 사용자와 가장 밀접하게 연결되어 있는 개발자
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 process 를 관리하고 코치하는 직군이 생김.