logo
한달 포트폴리오 멘토링
블로그

현재 우리는 웹서비스의 시대에 살고있다고 과언이 아닙니다. 브라우저를 통해 다양한 컨텐츠와 금융활동, 커뮤니티등의 서비스를 이용하고 있으며 우리가 사용하는 앱 또한 대부분 네이티브 앱이 아닌 웹앱으로 구성되어 있습니다.

그러면서 예전의 클라이언트 - 서버 의 단순한 구성에서는 오는 한계점을 속도와 관리의 어려움을 극복하고자 로그서버, 웹 캐시, 파일 서버 등 다양한 구성요소들이 추가되게 되었습니다.

이번 포스팅에서는 현대 웹 서비스를 구성하는 다양한 구성요소들에 대해서 소개해 보겠습니다. 자신의 서비스를 개발하기 위해서 필요한 서비스들을 선택해서 구성해 보도록 해봅시다.

웹서비스 구성 요소

위의 그림은 웹 서비스의 구성요소들을 그린 다이어그램입니다. **이번 포스팅에서는 1~5까지의 구성요소를 알아보겠습니다. **

1. CDN (Contents Delivery Network)

CDN은 웹 서비스의 지연 시간과 서버의 부하를 감소시키기 위해 만들어진 컨텐츠 캐시 서버입니다. Cloud Flare와 같은 CDN 서비스는 전 세계 곳곳에 컨텐츠 캐시 서버를 가지고 있는데요, 만약 사용자가 특정 서비스의 컨텐츠를 가져오려는 요청을 하면 가장 가까운 위치에 있는 CDN 서버에서 컨텐츠를 가져옵니다. 만약 컨텐츠가 없으면 파일 서버나, 웹 서버로 요청을 보내서 처리해주게 됩니다. 이제 다양한 서비스들이 글로벌화 되면서 글로벌 서비스의 Latency를 감소시켜줄 수 있는 CDN의 수요가 증가하고 있습니다. Cloud Flare가 상장 후 10배 이상 오른이유도 이 때문이이죠. CDN으론 앞서 언급한 CloudFlare나 AWS의 Cloud Front 등이 있습니다.

2. Load Balancer

Load Balancer는 서비스로 들어온 요청을 적절한 Web Application Service(WAS)로 라우팅 해주는 서비스 입니다. WAS의 상태를 주기적으로 체크하며, 단일 서버에 요청이 집중되지 않게 하여 서비스가 원할하게 동작하도록 합니다. 만약 URI 따라 요청을 라우팅할 WAS가 달라지는 경우에도 설정을 통해 분배할 수 있습니다.

대표적인 Load Balancer로는 AWS ALB가 있으며 Nginx와 같은 웹서버를 통해서도 Load Balancing을 할 수 있습니다.

3. Web Application Service

WAS는 백엔드 개발자가 개발하는 웹 서비스 어플리케이션을 의미합니다. Spring, Go, Node.js, Django등으로 개발한 웹서버의 구현체를 의미하죠. 주로 Database나 File Storage와 같은 데이터 저장소에서 데이터를 가져와 조합하여 응답을 생성합니다.

초창기에는 단일 서버로 구성된 서비스들도 있었지만 최근에는 많은 요청을 처리하기 위해 많은 수의 서버를 띄운 후 Load Balancer를 이용해 요청을 받습니다. 다중 서버를 이용하기 때문에 요청 마다 서버가 요청을 처리하는 서버가 변경될 가능성이 높아 최근 개발에서는 메모리에 상태(ex: Session)를 저장하지 않습니다.

구현 형태에 따라서 모든 WAS가 동일한 서비스를 제공 하는 Monolotic 구조, WAS마다 서로 다른 서비스를 제공하고 API를 통해 연동되는 Micro Service 구조, 물리적인 서버 없이 코드를 올리고 요청이 오면 가상의 서버에서 실행시켜주는 Serverless 구조가 있습니다.

4. Database

Database는 서비스의 데이터를 저장하는 저장소입니다. Database에 저장되는 데이터는 주로 사용자 정보, 물건 정보와 같은 정보성 데이터를 저장합니다. 이미지나 HTML파일과 같은 파일성 데이터는 File Storage에 저장을 하고 URI만 저장되는 형태를 사용합니다.

Database로는 Mysql, MariaDB, PostgreSQL과 같은 관계형 데이터 베이스나, MongoDB와 같은 NoSqL 데이터베이스를 사용합니다.

예전에는 EC2와 같은 깡통서버를 빌려서 Database를 직접관리 하였으나 장애 처리와 확장이 쉽지 않아 AWS나 Azure와 같은 Cloud 플랫폼에서 제공하는 데이터베이스를 사용하는 추세입니다.

5. File Storage

File Storage는 이미지 파일, HTML파일, 동영상 파일등 정적인 컨텐츠를 저장하는 저장소입니다. API 오픈하여 WAS를 통하지 않고 직접 네트워크와 통신하기도 합니다. 이를 이용하여 정적 웹페이지를 개발할 경우 별도의 WAS 없이 File Storage에 정적 웹페이지를 올리는 식으로 호스팅을 합니다.

AWS S3와 Azure의 Blob Storage등이 여기에 해당됩니다.

PortfolioAD
관련있는 글

couchcoding

2022-12-07

HTTP에 대해서 알아보자(정의와 구조)

HTTP는 HyperText Transfer Protocol의 약자로 주로 HTML과 같은 HyperText문서를 주고 받기 위해 만들어졌고, 최근에는 HTML뿐 아니라 모든 웹 관련 API통신에 이용하고 있는 통신 프로토콜입니다. HTTP 프로토콜은 비연결성(Con...

개발 이론

HTTP
네트워크
웹 개발
세션
쿠키

couchcoding

2022-12-07

[HTTP] Session, Cookie, JWT에 대해서 알아보자

HTTP는 Stateless Protocol입니다. 상태가 없기 때문에 매 요청을 새롭게 생성됩니다. 이러한 HTTP의 특성을 보완하기 위해 Cookie, Session, JWT와 같이 상태를 저장하는 기술을 개발하게 되었습니다. ...

개발 이론

JWT
HTTP
네트워크
웹 개발
세션
쿠키

couchcoding

2022-12-07

웹 서비스를 구성하는 구성요소들을 알아보자 - 2

이전 포스팅에서는 웹서비스의 구성 변화에 대해서 알아보고 웹서비스를 구성하는 요소중 CDN, Load Balancer, Web Application Service, Database, File Storage에 대해서 알아보았습니다. 이번 포스팅에서는 저번에 다루지 않은...

개발 이론

웹 서비스
클라우드 아키텍처
web cache
redis
message queue
kafka
log service
ELK
grafana

couchcoding

카우치코딩 공식 계정입니다.