728x90
반응형
단일 서버의 요청 흐름
1. 사용자는 moon-code.tistory.com을 이용하여 웹사이트에 접속한다.
2. DNS 조회 결과로 IP 주소가 반환된다. 해당 예제에서는 15.122.12.212라고 가정한다. 웹 서버의 주소이다.
실제로는 DNS도 계층적으로 3개의 서버에서 .com Server 그 안에서 해당 도메인에 해당하는 주소를 찾고 찾아서 반환하며, DNS Resolver의 Cache를 통해 이후, 같은 요청을 보냈을 때, 굳이 DNS 서버를 들리지 않고 반환하기도 하는데, 해당 부분과 관련해서는 웹 서버 흐름에 대해서 글을 작성하게되면 참조해놓겠다.
2. 해당 IP 주소로 HTTP 요청이 전달된다.
3. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다.
데이터베이스
사용자가 늘어나면 하나의 서버로 충분하지 않기 때문에 여러 서버를 두어야 한다. 따라서 웹/모바일 트래픽 처리 용도(웹 계층)와 데이터베이스용(데이터 계층)으로 나누어 분리하면 독립적으로 확장할 수 있게 한다.
데이터베이스의 종류
- 관계형 데이터베이스(RDBMS)
- 자료를 테이블과 열, 칼럼으로 표현한다. SQL을 사용하여 여러 테이블에 있는 데이터를 그 관계에 따라 Join하여 합칠 수 있다.
- MySQL, 오라클 데이터베이스, PostgreSQL 등
- 비-관계형 데이터베이스(NOSQL)
- 키-값 저장소(key-value store), 그래프 저장소(graph store), 칼럼 저장소(column store), 문서 저장소(document store)
- 조인 연산 지원하지 않음
비-관계형 데이터베이스 선택 기준
- 아주 낮은 응답 지연시간(latency)
- 다루는 데이터가 비정형 데이터인 경우
- 데이터를 직렬화하거나 역직렬화 할 수 있기만 하면 됨
- 아주 많은 양의 데이터를 저장할 필요가 있음.
수직적 규모 확장(scale up) vs 수평적 규모 확장(scale out)
수직적 규모 확장: 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM)을 추가하는 행위
수평적 규모 확장: 더 많은 서버를 추가하여, 성능을 개선하는 행위
수직적 규모 확장의 한계 -> 로드 밸런서
- 한 대의 서버에 CPU나 메모리를 무한 증설할 방법은 없음.
- 장애에 대한 자동복구(failover) 방안이나 다중화(re-dundancy) 방안을 제시하지 않음. -> 서버에 장애가 발생하면 웹사이트/앱은 완전히 중단된다.
로드 밸런서
웹 서버들에게 트래픽 부하를 고르게 분산하는 역할이자, 직접 웹 서버가 요청을 받지 않고 위임하는 형태로 보안성 측면에서도 우수하다.
모든 클라이언트의 요청은 로드 밸런서를 통한다.
로드 밸런서의 역할
1. 웹 서버는 클라이언트의 접속을 직접 처리하지 않음(프록시 서버 역할)
2. 서버 간 통신에는 사설 IP 주소를 이용하여, 같은 네트워크에 속한 서버 사이의 통신에만 쓰일 수 있도록 한다.(인터넷을 통해서는 접속 불가)
728x90
반응형
'CS > 대규모 시스템 설계' 카테고리의 다른 글
1-1. 아키텍처 설계(DB 다중화, 캐시, CDN) (0) | 2025.08.08 |
---|