본문 바로가기
임시 글/Backend(JavaScirpt)

[BE(JavaScript)] 백엔드 기본 지식

by cogito21_cpp 2024. 12. 28.
반응형

학습목표

- 키워드: 웹 프레임워크, 데이터베이스, ORM, ACID, N+1문제, HTTP, DNS, CI,/CD, 인증, 인가, OAuth, DDD, TDD, 메시지 브로커, 래빗엠퓨, 카프카, HTTPS, CORS, OWASP, 캐시, 로컬 캐시, 분산 캐시, Redis, 맴캐시드

- 네트워크: 프로토콜, HTTP, TCP/UDP, 라우팅, NAT, OSI 7 계층, DNS

 

1. 기본 개념

(백엔드/프론트엔드)

- 백엔드: 시스템의 뒷단. 프론트엔드 영역의 요청을 컴퓨터가 수행

- 프론트엔드: 시스템의 앞단. 눈에 보이는 화면. 웹 브라우저

 

(서버/클라이어트)

- 클라이언트: 서버로 요청하는 프로그램. 대표적으로 웹 브라우저가 있음

- 서버: 클라이언트의 요청을 받아 처리하는 주체

 

(데이터베이스)

- 데이터베이스: 여러 사람이 데이터를 한 곳에 모아두고 사용할 목적으로 관리하는 데이터 저장소. MySQL, Oracle, postgreSQL은 DBMS

- RDB: 관계형 데이터베이스. 행과 열로 이루어진 테이블. 기본키를 사용하여 각 행을 식별. Oracle, MySQL, SQL Server, postgreSQL

- SQL: 데이터 검색을 하는 언어. ANSI표준 SQL, RDB별 SQL 존재

- ACID 트랜잭션: 데이터 베이스에서 데이터의 일관성을 유지하게 해줌

- NoSQL: RDB가 아닌 데이터베이스. couchBase, MongoDB, DynamoDB

- NoSQL 종류: Key-Value Cache, Key-Value Store, Document Store, Wide-Column Store

- K-V Cache: Memcached(k-v 데이터만 제공/멀티스레드), Redis(다양한 데이터 구조 지원/싱글스레드). 클러스터 지원으로 분산환경에서 사용. 서버를 껐다 켤 경우 데이터 휘발 가능성 존재

- K-V Store: DynamoDB, CouchBase. 쓰기와 업데이트가 빈번하게 일어나는 게임 서버에 사용

- Document Store: MongoDB. 데이터로 JSON과 유사한 BSON 문서 모델 저장. 테이블 개념인 Collection

- Wide-Column Store:  행과 열을 테이블로 사용. 행마다 열의 이름과 타입이 다를 수 있음. Bigtable, Apache Cassandra. 단일 장애점(SPOF)이 없으며 확장성과 성능이 뛰어남

 

(Cloud)

- 클라우드: 아마존의 AWS, MS의 Azure, 구글의 GCP

+) IDC(Internet Data Center): 서버를 설치하고 인터넷 서비스 제공. 물리적 서버

- 클라우드 서비스 유형: IaaS(서버환경의 인프라 제공. 컴퓨팅 자원), PaaS(인프라 구축 불필요. 코드 작성 및 애플리케이션 구축), SaaS(애플리케이션을 브라우저로 제공)

더보기
기능 AWS Azure GCP
컴퓨팅 EC2, Elastic Beanstalk Virtual Machines, AKS Computer Engine, Kubernetes
스토리지 S3, EBS, Clacier Blob Storage, ADLS Cloud Storage, Cloud SQL
데이터베이스 RDS, DynamoDB, Redshift Cosmos DB, Azure SQL Cloud SQL, Bigtable
네트워킹 VPC, Route 53, Direct Connect Virtual Network, ExpressRoute Virtual Private Cloud, Cloud DNS
관리 & 거버넌스 IAM, CloudWatch, CloudFormation Azure Policy, Azure Monitor IAM, Stackdriver, Deployment Manager
인공지능, 머신러닝 SageMaker, Rekognition, Transcribe Azure Machine Learning, Cognitive Services Cloud AI Platform, Cloud ML Engine
사물 인터넷 IoT Core, Greengrass IoT Hub, IoT Central IoT Core, Cloud IoT Core
빅데이터 Redshift, Kinesis, EMR HDInsight, Data Lake BigQuery, Dataflow, Dataproc
개발자 툴 CodeStar, CodeCommit, CodeBuild Azure DevOps, Visual Studio Cloud SDK, Cloud Code, Cloud Build

 

(IP/Port)

- ip: 인터넷에서 컴퓨터 또는 기기들이 서로를 식별하고 통신하기 위한 주소. IPv4(32비트), IPv6(128비트)

- port: 서버에서 운용되고 있는 서비스를 구분하기 위한 번호

 

(WS/WAS)

- WS(웹 서버): 파일이나 이미지 같은 정적 파일 서비스하는 서버. Apache HTTP Server, Nginx, IIS

- WAS: 데이터를 처리하는 서버. Apache Tomcat, WebSphere, JEUS, IIS

+) 캐시: 자주 요청하는 데이터 저장. 메모리에 데이터를 저장해서 읽는 속도를 높이는 방식

+) WAS는 대부분 프레임워크를 사용

 

(Library/Framework)

- library: application 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드 모음. 라이브러리는 독립적. 필요한 기능 구현

- framework: 소프트웨어 개발 환경. 정해진 틀에서 개발. 전체적인 구조 잡기 위해 사용

 

(백엔드 개발자 업무)

- 업무 과정: 과제 할당→과제 분석→개발→테스트(리뷰)→QA 및 버그 수정→배포→유지 보수

1) 과제 할당: 주어진 과제를 할당 받아 분석 시작

2) 과제 분석: 문제를 구체적으로 정의하고 제공할 성능과 사용 기술을 선정 등 세부사항 정의

3) 개발: 기능을 개발하고 버그를 수정. 코드 리뷰를 통해 코드 수정

4) 테스트: 실행 여부, 로직상 문제, 성능한계, 가독성 등을 고려하여 테스트

5) QA(quality assurance):  개발과 테스트가 마무리되었다면 품질 점검 수행. 개발자가 발견하지 못한 성능적 결함이나 로직 오류를 한 번더 검증해 코드의 안정성을 높이는 작업

6) 배포 (CI/CD): 서버에 배포. 여러 기능을 통합 및 새로운 기능 추가시 배포. 문제 발생시 이전 상태로 복구 작업. 롤링 배포, 블루 그린배포, 카나리 배포.

+) 롤링 배포(특정 개수의 서버들을 돌아가며 배포), 블루 그린 배포(같은 서버 인스턴스를 띄우고 로드밸런서 설정을 변경), 카나리 배포(전체 서버의 특정 비율만큼 배포하고 이후 점차 배포를 늘림)

+) 롤링 배포시 Ansible 사용하여 구현

+) 배포시 Docker, Kubernetes 사용

7) 유지보수: 실제 환경에서 문제 없는지 모니터링. 테스트와 문서 작성. 

+) 온콜 제도: 업무시간 이외에 문제 발생시 전화를 받는 담당자를 지정하는 제도

 

 

(백엔드 아키텍처)

- 아키텍트: 계획을 작성하는 사람

- 아키텍처: 종합적으로 분석 계획, 정리하는 것. 총체적이고 종합적으로 상세하게 개발을 준비하는 것

 

(소프트웨어 아키텍처)

- 아키텍처 패턴: 계층형 아키텍처/이벤트 기반 아키텍처/마이크로서비스 아키텍처

- 계층형 아키텍처(layer architecture): 소프트웨어를 몇 가지 계층으로 나누어 만드는 방식. 단순하고 이해하기 쉬움. 각 계층이 논리적으로 분리되어 있어 소규모 아키텍처에서 주로 채택. 각 계층에서 주어진 역할(프리젠테이션, 비즈니스 로직, 데이터 저장)을 수행. 의존성이 단방향. 계층이 분리 및 격리되어 복잡도가 감소하고 계층 내 코드의 응집도가 높아짐. 테스트가 편리. 계층이 거대해질 경우 개발 속도 저하 및 유지보수 어려움, 배포 어려움이 존재. TCP/IP 계층이 대표적인 예시

- 이벤트 기반 아키텍처(event-driven architecture): 이벤트 상태 변화에 대응하는 소프트웨어 설계 패턴. 이벤트는 시스템의 외부 또는 외부에서 시스템에 영향을 주는 상황을 의미. 이벤트를 발생시키는 Producer, 이벤트를 전달하는 Broker, 이벤트를 받는 Consumer로 구성됨. 이벤트 기반 아키텍처는 모든 요청을 비동기로 처리. 확장성이 좋고 아키텍처 내 컴포넌트 간 의존성을 줄일 수 있음. 이벤트를 비동기로 처리하므로 이벤트 순서 보장이 어려움. 에러발생시 처리 방법 고려 필요

- 마이크로서비스 아키텍처(microservices architecture): 시스템을 여러 개의 작은 서비스로 나누어 관리하는 설계 방식. 서비스는 독립적으로 개발, 배포, 운영. 서로 구조적으로 분리되어 있음. 각 서비스는 독립적으로 업데이트 및 스케일링이 가능. 시스템의 구조가 간결해짐. 주로 대규모 시스템 구축에 사용. 도메인 주도 설계의 영향을 받아 하나의 서비스가 하나의 도메인을 담당하는 것이 좋음. 확장성이 좋고 업그레이드가 용이. 트랜잭션 처리시 분산 트랜잭션을 고려해야하므로 처리의 어려움이 존재. 유지보수시 비용이 많이 들어감

+) Domain: 사용자가 요구하는 문제 분야 내에서의 상황이나 내용

- 추가 아키텍처: 파이프라인 아키텍처, 마이크로커널 아키텍처, 서비스 지향 아키텍처, 공간 기반 아키텍처

+) 소프트웨어 아키텍처 101 참고

 

(JavaScript)

- 웹 브라우저를 위한 언어로 탄생. 현재는 프론트엔드, 백엔드, 인프라, 서버리스, 앱 개발 등에 사용

- ECMAScript(ECMA-262)에 정의. ECMAScript는 스크립트 언어의 기본 규격을 정의한 국제 표준

- 패키지 매니저: npm, yarn, pnpm

- 빌드 자동화 도구: webpack, ESBuild, Vite

- 코드 편집기: Sublim Text, VSCode, WebStorm

- 프레임워크: React, Vue.js, Svelte, Express, NestJS, ReactNative, Electron

- 백엔드 개발 환경: Node.js, Deno

- 인프라: pulumi

반응형

'임시 글 > Backend(JavaScirpt)' 카테고리의 다른 글

[BE(JavaScript)] 환경설정  (0) 2024.12.28