웹 개발자라면 기본적으로 알아야 하는 웹 아키텍처.
이 글은 Jonathan Fulton의 'Web Architecture 101' 포스트를 읽고 아주 간략하게 정리한 것이다.
1. DNS server
Domain Name System
도메인 이름으로 key-value lookup 을 통해 도메인 주소에 대한 IP 주소를 가져온다.
2. Load Balancer
여러 웹 서버 중에서 요청을 처리할 서버를 선택하여 과부하를 방지한다. 즉, 서버가 담당해야 할 로드를 분배하는 것.
❓ horizontal vs. vertical scaling?
- horizontal scaling
: to scale by adding more machines into the pool of resources
: allows the provider to plan for outages - vertical scaling
: to scale by adding more computing power(CPU, RAM, etc.) to an existing machine
3. Web application servers
사용자의 요청을 처리하는 비즈니스 로직을 실행하고 사용자의 브라우저에 HTML 결과물을 출력해준다.
4. Database servers
데이터 구조의 정의 및 데이터 삽입, 조회, 갱신, 그리고 삭제를 가능하게 해준다.
❓ SQL vs. NoSQL
더보기
SQL
Structured Query Language
RDBMS에서 쿼리를 작성하기 위한 언어
- RDBMS
- Structured and organized data
- Structured query language (SQL)
- Data and its relationships are stored in separate tables.
- Data Manipulation Language(DML), Data Definition Language(DDL)
- Tight Consistency
NoSQL
대용량 데이터를 처리하기 위해 발전된 형태
- Stands for Not Only SQL
- No declarative query language
- No predefined schema
- Key-Value pair storage, Column Store, Document Store, Graph databases
- Eventual consistency rather than ACID property
- Unstructured and unpredictable data
- CAP Theorem
- Prioritizes high performance, high availability and scalability
- BASE Transaction
5. Caching service
에 가까운 시간에 정보를 찾아 저장할 수 있도록 key-value data store을 제공한다. 연산을 줄이기 위해 사용한다.
6. Job queue & Job servers
비동기적인 작업들을 위한 대기줄, 그리고 처리하는 서버
7. Full-text search service
사용자가 입력한 텍스트 입력값으로 쿼리를 수행해 관련성이 높은 결과들을 출력하는 서비스
- 입력값의 키워드를 포함하는 파일을 찾기 위해 inverted index를 활용한다.
- MySQL은 full-text search를 지원한다.
8. Services
모듈화되어 독립적인 기능을 수행하는 단위
예) account service, content service, payment service
9. Data "firehose" & Data warehouse
Data "firehose"
데이터를 받고 처리하기 위한 streaming interface를 제공한다.
Raw data (그리고 transformed/augmented data)는 클라우드 저장소에 저장된다.
Data Warehouse
transformed/augmented data는 추가적으로 데이터 웨어하우스에 저장되기도 한다.
앱 또는 서비스의 운영 데이터베이스의 데이터를 데이터 웨어하우스에 저장함으로써 전체적인 데이터셋을 구축할 수 있다.
10. Cloud Storage
"A simple and scalable way to store, access, and share data over the Internet" (출처: AWS)
11. CDN
Content Delivery Network
static HTML, CSS, Javascript, 그리고 이미지 파일을 사용하기 위해 단일한 원본 서버가 아닌, 세계 각지에 분포하고 있는 "edge" 서버로부터 받아 사용하게 된다.