1. Conda
1-1. Venv vs Conda
Conda는 Venv에 비해 가상 환경들을 관리하는 측면에서 다양한 편의 기능을 제공한다. 콘다만 이용하기 위해 아나콘다 전체를 설치할 필요 없이 미니콘다만 설치해 사용할 수 있다.
2. 웹 시스템의 발전
2-1. 초기 웹
- 웹 서버의 역할은 단순히 브라우저가 요청하는 페이지를 보내는 것
- 정적 페이지만 보여주는 구조
2-2. 자바스크립트의 발전
- 사용자 인터렉션이 중요해지며 자바스크립트의 역할 증가
- 웹 서버가 HTML와 자바스크립트 브라우저에 전송, 브라우저는 자바스크립트를 실행해 동적 기능 제공
- 전체 페이지 로드 없이 사용자 input 동적으로 처리와 데이터 제공 가능
- 여전히 API 개념이 널리 사용x, 동일한 서버에서 HTML/자바스크립트/데이터 전송
Ajax : 자바스크립트를 통해 비동기적으로 서버와 브라우저가 데이터를 주고 받는 방식
2-3. 프론트엔드/백엔드 서버의 구분
- 웹이 더욱 동적으로 발전하며 자바스크립트의 역할 증대
- HTML도 자바스크립트 코드로 직접 생성
- 자바스크립트가 주가 되어 HTML 생성부터 프론트엔드 모든 부분 구현
- 이전 부분적으로 동적이었던 웹이 전체적으로 동적으로 변화
- SPA 방식 프론트엔드 개발이 인기를 얻어 브라우저와 서버의 통신은 데이터 전송/생성/수정이 위주
(페이지를 렌더링하는 데 필요한 자바스크립트는 최초 통신에서 한 번에 받아 서버와 데이터만 송수신)
- 프론트엔드 서버(렌더링에 필요한 파일 전송)와 백엔드 서버(데이터 생성 및 전송)가 구분
2-4. 프론트엔드/백엔드 개발자의 구분
- 프론트엔드 개발자 역할 : HTML/CSS/Js를 이용해 UI, UX 구현
- 백엔드 개발자 역할 : 프론트엔드 시스템과 데이터 실시간으로 송수신
3. 현대 웹 시스템의 구조 및 아키텍쳐
- 시스템 규모/동시요청/데이터 규모 기하학적으로 증가
- API 시스템이 처리하는 동시 요청이 증가로 MSA 같은 새로운 아키텍쳐 개념 발전, API 서버 규모 증가와 세분화
- 분석할 데이터 증가로 ETL/Data Pipeline 시스템 발전, Hadoop등 대용량 분석 프레임워크 발달
- 최근엔 머신러닝과 AI 시스템도 활용
- 현대 백엔드 개발자 영역 : 백엔드 API 시스템, Data Pipeline 시스템, 머신러닝 시스템, 빅데이터 분석 시스템
MSA : Micro Service Architecture
ETL : Extract, Transfer, Load
4. 현대 개발팀의 구조
4-1. 개발팀 구성
- 기획자
- 디자이너
- 프론트엔드 개발자
- 백엔드 개발자
- 데브옵스
- 풀스택 개발자
- 시스옵스
- 데이터 사이언티스트
- 테스터
- 스크럼 마스터
4-2. 기획자
= PM
- 개발하고자 하는 서비스 정의/기획
- 시스템의 가치 정의, 세세한 기능 기획 및 정의, 고객 피드백 반영하며 기능 정의와 기획 발전
4-3. 디자이너
4-4. 프론트엔드 개발자
- HTML, CSS 부분만 담당 : 퍼블리셔
- HTML, CSS, Js 모두 담당 : 프론트엔드 개발자
4-5. 백엔드 개발자
- 백엔드 시스템에서 앞쪽 담당 : API 시스템 개발자
- 백엔드 시스템에서 뒤쪽 담당 : 데이터 관련 시스템 개발자
4-6. 데브옵스
= 개발과 운영의 합성어
- 시스템 개발뿐만 아니라 시스템 운영 담당
- 클라우드 서비스 발달로 하드웨어 구축과 관리가 줄어 개발자가 직접 시스템 인프라를 구현하며 생성
- 시스템 운영 외에도 빌드, 테스트, 배포 등을 자동화하여 효율적인 개발 환경을 구축하는 역할도 담당
- 최근 IAC 개념 발달로 전체적 시스템 인프라 구현 및 관리 자동화
IAC : Infrastructure As Code. 인프라 생성/운영 작업을 코드로 구현하여 코드 실행시켜 인프라 구축
4-7. 풀스택 개발자
4-8. 시스옵스
- 시스템 인프라 구현/관리/ 운영 담당
- 데브옵스와 달리 실제 하드웨어를 다루는 직군
- 서버 설치, 물리적 네트워크 구축/운영 등 시스템 인프라 운영에 필요한 모든 부분 담당
- 클라우드 서비스 발전으로 수요 감소 중
4-9. 데이터 사이언티스트
- 데이터 분석에 필요한 알고리즘과 모델링 구현 담당
- 수학, 통계학, 물리학 등의 분야 지식 필요
4-10. 데이터 엔지니어
- 데이터 사이언티스트가 데이터를 분석할 수 있도록 데이터를 정리하고 정석화 시키는 시스템을 구현하는 역할
4-11 테스터
- QA 테스터 : 메뉴얼 테스팅 담당
- 테스트 자동화 시스템 구현 테스터
4-12. 스크럼 마스터
- 개발팀들이 스크럼을 제대로 사용할 수 있도록 코치하고 이끄는 역할 담당