1. 백엔드 개발자가 알아야 하는 것
2. 백엔드 개발자의 업무
3. 백엔드 아키텍처
4. 백엔드 프로그래밍 언어
5. 데이터베이스
6. 클라우드 서비스
7. 자바스크립트 생태계
7-1. 패키지 매니저
7-2. 빌드 도구
7-3. 개발 도구
7-4. 웹 프레임워크
7-5. 백엔드 개발 환경
7-6. 인프라
- 캐시 : 로컬캐시 / 분산캐시 - 레디스/멤캐시드
- 테스트 : 유닛테스트 / 통합테스트
- 개발방법론 : DDD / TDD
- 검색 엔진 : 엘라스틱서치
- 메시지 브로커 : 래빗엠퓨 / 카프카
- 웹 프레임워크
- 보안 관련 지식 : https / CORS / OWASP
- 클라우드 서비스 : AWS / Azure / GCP
- 배포 관련 : CI / CD / Container / Kubernetes
- 프론트엔드 기본 지식 : CSS / HTML / jQuery
- OS 관련 지식 : terminal 사용법
- 인증 관련 : 인증 / 인가 / OAuth
- 데이터베이스 : RDB / NoSQL / DB 기본 지식 - ORM, ACID, N+1 문제
- 인터넷 : HTTP - RESTful API / DNS
- 프로그래밍 언어
- 버전 컨트롤 - Git, Github
1) 과제 할당
2) 과제 분석
3) 개발
4) 테스트
5) QA
6) 배포
7) 유지보수
3-1. 계층형 아키텍처
3-2. 이벤트 기반 아키텍처
3-3. 마이크로서비스 아키텍처
- 백엔드 프로그래밍 언어 : python, C, C++, Java, C#, Visual Basic, Javascript 등
- python : 데이터 분석 분야에서 인기 많음. 대표적 프레임워크는 Flask, Django, FastAPI
- C++ : 성능이 중요한 게임 서버 개발에 많이 사용
- JAVA : Spring이라는 강력한 프레임워크를 기반으로 많이 사용
- C# : 미국에서 많이 사용. 닷넷 프레임워크가 강력하며 MS 계열의 SW와 호환성 좋은 편
- Javascript : 프론트엔드 뿐 아니라 백엔드에서도 많이 사용됨. 대표적인 웹 프레임워크로 Express가 있고 최근에는 NestJS 인가가 오르는 추세. 개발자 규모가 커지면 정적 Typing을 지원하는 Typescript를 도입하면 협업 시 코드해석, 디버깅에 용이함.
- *Typescript : 엄격한 문법을 지원하는 Javascript의 superset 오픈소스 프로그래밍 언어로 MS에서 개발 및 유지보수하고 있음. 개발자가 원하는 타입을 정의하고 프로그래밍하면 Javascript로 컴파일해 실행할 수 있음.
- 데이터베이스 : 검색과 축적이 쉽도록 정리된 데이터 모음. 현업에서는 데이터베이스 SW를 지칭. 데이터를 가능한 한 안전하게 보관, 검색, 수정, 삭제가 가능하도록 하는 SW
5-1. RDB(Relational Database), 관계형 데이터베이스 : SQLite, MySQL, MariaDB, SQL Server, Oracle, Postgresql 등
- RDB의 특징 : ACID Transaction (Atomicity, Consistency, Isolation, Durability)
- 원자성 Atomicity : 트랜잭션을 구성하는 명령이 하나의 묶음으로 처리되어 함께 성공하거나 실패하는 것을 보장하는 기법
- 일관성 Consistency : 트랜잭션에서 실행된 변경사항이 데이터베이스의 무결성 조건을 만족하는 것
- 격리성 Isolation : 두 개의 트랜잭션이 서로에게 영향을 미칠 수 없는 성질
- 내구성 Durability : 트랜잭션이 성공적으로 끝나면 그 결과가 데이터베이스에 계속 유지되는 성질
- ACID 트랜잭션은 데이터베이스에서 데이터의 일관성을 유지하도록 해주고, 문제가 생길 때 이전 상태로 되돌릴 수 있게 해줌.
- SQL(Structured Query Language) : 쿼리(데이터 검색)를 하는 프로그래밍 언어. ANSI 표준 SQL과 각 RDB별 방언이 있음.
5-2. NoSQL(Not Only SQL) : MongoDB
- RDB는 저장, 질의, 수정, 삭제가 용이하지만 성능을 올리기 어려움. 데이터베이스 성능을 올리려면 스케일업(머신의 성능 상향) 또는 스케일아웃(머신을 여러 대로 분리)이 필요. 스케일업은 좋은 장비를 도입하면 되지만, 스케일아웃은 데이터베이스가 여러 대로 분산되면서 트랜잭션 사용시 성능이 떨어지게 됨. 이러한 문제를 해결하기 위해 NoSQL이 등장.
- 데이터 모델링을 어떻게 하느냐에 따라서 NoSQL을 구분할 수 있음.
- 소규모 서비스 : RDB만으로 충분. 규모가 커지면 Key Value Cache, Key Value Store, Document Store, Wide Column Store 정도를 사용.
- Key Value Cache : Memcached와 Redis가 많이 사용됨.
- Key Value Store : DynamoDB, Couchbase가 많이 사용됨. 쓰기와 업데이트가 빈번한 게임 서버에서 많이 사용
- Document Store : MongoDB가 유명. 피파온라인, 라인 등에서 많이 사용. 데이터로 JSON과 매우 비슷한 형태의 BSON이라는 문서 모델을 저장. 테이블 개념인 컬렉션이 있고, 검색 시 인덱스를 사용하거나, ACID 트랜잭션을 지원하는 등 RDB에서만 사용하던 기능을 다수 채용
- Wide Column Store : RDB와 유사하게 행 row과 열 column 테이블을 사용하나 행마다 열의 이름과 타입이 달라질 수 있다는 점이 차이점. 대표적으로 구글의 Bigtable이 있고, 오픈소스로는 Apache Casandra가 있음. Casandra는 단일장애점(Single Point of Failure, SPOF)가 없으며 확장성과 성능이 뛰어난 특징
- 과거에는 유저의 요청에 응답하는 인터넷으로 연결된 물리적 서버가 반드시 필요했음.
- 많은 기업들이 IDC, Internet Data Center를 설치해 서비스
- 클라우드 Cloud 서비스 : 물리적 서버를 구매, 설치하지 않고 서버의 기능을 하는 서비스를 인터넷으로 제공받을 수 있음.
- 주요 클라우드 서비스 : AWS(Amazon), Azure(MS), GCP(Google) => 3사가 전체 70% 정도 차지
- 클라우드 서비스 유형 3가지
1) IaaS, Infrastructure as a Service : 서버 인프라 환경 서비스 제공. 서버, 스토리지, 네트워킹 등
2) PaaS, Platform as a Service : 애플리케이션 개발 및 실행 환경 제공.
- Heroku, AWS Elastic Beanstalk, Azure App Service, GCP의 App Engine
3) SaaS, Software as a Service : 브라우저 기반 소프트웨어를 사용할 수 있게 제공
- Google Docs, MS Office 365, Adobe Creative Cloud 등
- Javascript : 1995년 Netscape에서 HTML을 동적으로 표현할 목적으로 만든 Mocha라는 script programing language로 탄생.
- 과거 웹 브라우저에서만 실행되는 언어로 취급되다가 NodeJS와 같은 런타임 환경이 출현하면서부터 백엔드에서도 사용 가능해짐.
- 현재 프론트엔드, 백엔드, 인프라, 서버리스, 앱 개발 등 모든 분야에서 사용되는 범용 프로그래밍 언어로 자리잡음. 생태계가 잘 갖춰져 있음.
7-1. 패키지 매니저 : 애플리케이션에 의존적인 패키지를 관리(설치, 업데이트, 삭제)하는 프로그램
- npm : NodeJS를 설치하면 자동으로 설치됨. 용량, 패키지 내려받기 속도, 보안 문제 있음.
- yarn : npm의 위 단점을 개선
- pnpm : symbolic link를 사용해 npm의 문제를 해결
7-2. 빌드 도구
- 과거 Javascript 라이브러리를 사용할 때(import 할 때) <script>태그 사용
- 최근에는 빌드 도구를 사용해 JS 코드를 하나 또는 여러 파일로 뭉쳐주는 번들링 작업을 함
- 웹팩 Webpack : 다양한 모듈 시스템을 지원하는 가장 유명한 빌드 도구. 다만 속도가 느림
- 빌드 도구는 표준화가 아직 되지 않아 많은 SW가 경쟁 중
7-3. 개발 도구
- Visual Studio Code, VSCode : MS에서 개발한 에디터. 자체도 Electron으로 개발해 Typescript 코드가 대거 포함되어 있음.
- Sublime Text, Webstorm(Jetbrain), Atom 등
7-4. 웹 프레임워크
- "프레임워크 Framework" : SW 설계와 구현을 재사용 가능하게끔 정리된 형태로 제공하는 것
- 프론트엔드 웹 프레임워크 : React.js, Vue.js, Svelte 등
- 백엔드 웹 프레임워크 : Express.js, Nest.js 등
- 앱 개발 프레임워크 : React Native, Electron 등
7-5. 백엔드 개발 환경
- NodeJS : 가장 유명한 백엔드 런타임 환경
- 디노 Deno : NodeJS를 만든 Ryan Dahl이 NodeJS에서 개선하지 못했던 부분들을 더욱 개선해 개발. 아직은 NodeJS 보다 많이 사용되진 않고 있음
7-6. 인프라
- "인프라" : HW, SW, network 등 application 구축에 필요한 자원을 의미
- 풀루미 pulumi : 자바스크립트 코드로 클라우드 환경 기반에서 인프라 관리. 개인용 무료/기업용 유료
https://www.pulumi.com/what-is/javascript-and-infrastructure-as-code/