현재 우리는 웹서비스의 시대에 살고있다고 과언이 아닙니다. 브라우저를 통해 다양한 컨텐츠와 금융활동, 커뮤니티등의 서비스를 이용하고 있으며 우리가 사용하는 앱 또한 대부분 네이티브 앱이 아닌 웹앱으로 구성되어 있습니다.
그러면서 예전의 클라이언트 - 서버
의 단순한 구성에서는 오는 한계점을 속도와 관리의 어려움을 극복하고자 로그서버
, 웹 캐시
, 파일 서버
등 다양한 구성요소들이 추가되게 되었습니다.
이번 포스팅에서는 현대 웹 서비스를 구성하는 다양한 구성요소들에 대해서 소개해 보겠습니다. 자신의 서비스를 개발하기 위해서 필요한 서비스들을 선택해서 구성해 보도록 해봅시다.
위의 그림은 웹 서비스의 구성요소들을 그린 다이어그램입니다. 이번 포스팅에서는 1~5까지의 구성요소를 알아보겠습니다.
CDN은 웹 서비스의 지연 시간과 서버의 부하를 감소시키기 위해 만들어진 컨텐츠 캐시 서버입니다. Cloud Flare와 같은 CDN 서비스는 전 세계 곳곳에 컨텐츠 캐시 서버를 가지고 있는데요, 만약 사용자가 특정 서비스의 컨텐츠를 가져오려는 요청을 하면 가장 가까운 위치에 있는 CDN 서버에서 컨텐츠를 가져옵니다. 만약 컨텐츠가 없으면 파일 서버나, 웹 서버로 요청을 보내서 처리해주게 됩니다.
이제 다양한 서비스들이 글로벌화 되면서 글로벌 서비스의 Latency를 감소시켜줄 수 있는 CDN의 수요가 증가하고 있습니다. Cloud Flare가 상장 후 10배 이상 오른이유도 이 때문이이죠.
CDN으론 앞서 언급한 CloudFlare
나 AWS의 Cloud Front
등이 있습니다.
Load Balancer는 서비스로 들어온 요청을 적절한 Web Application Service(WAS)로 라우팅 해주는 서비스 입니다. WAS의 상태를 주기적으로 체크하며, 단일 서버에 요청이 집중되지 않게 하여 서비스가 원할하게 동작하도록 합니다. 만약 URI 따라 요청을 라우팅할 WAS가 달라지는 경우에도 설정을 통해 분배할 수 있습니다.
대표적인 Load Balancer로는 AWS ALB가 있으며 Nginx와 같은 웹서버를 통해서도 Load Balancing을 할 수 있습니다.
WAS는 백엔드 개발자가 개발하는 웹 서비스 어플리케이션을 의미합니다. Spring, Go, Node.js, Django등으로 개발한 웹서버의 구현체를 의미하죠.
주로 Database나 File Storage와 같은 데이터 저장소에서 데이터를 가져와 조합하여 응답을 생성합니다.
초창기에는 단일 서버로 구성된 서비스들도 있었지만 최근에는 많은 요청을 처리하기 위해 많은 수의 서버를 띄운 후 Load Balancer를 이용해 요청을 받습니다. 다중 서버를 이용하기 때문에 요청 마다 서버가 요청을 처리하는 서버가 변경될 가능성이 높아 최근 개발에서는 메모리에 상태(ex: Session)를 저장하지 않습니다.
구현 형태에 따라서 모든 WAS가 동일한 서비스를 제공 하는 Monolotic
구조, WAS마다 서로 다른 서비스를 제공하고 API를 통해 연동되는 Micro Service
구조, 물리적인 서버 없이 코드를 올리고 요청이 오면 가상의 서버에서 실행시켜주는 Serverless
구조가 있습니다.
Database는 서비스의 데이터를 저장하는 저장소입니다. Database에 저장되는 데이터는 주로 사용자 정보, 물건 정보와 같은 정보성 데이터를 저장합니다. 이미지나 HTML파일과 같은 파일성 데이터는 File Storage에 저장을 하고 URI만 저장되는 형태를 사용합니다.
Database로는 Mysql
, MariaDB
, PostgreSQL
과 같은 관계형 데이터 베이스
나, MongoDB
와 같은 NoSqL
데이터베이스를 사용합니다.
예전에는 EC2와 같은 깡통서버를 빌려서 Database를 직접관리 하였으나 장애 처리와 확장이 쉽지 않아 AWS나 Azure와 같은 Cloud 플랫폼에서 제공하는 데이터베이스를 사용하는 추세입니다.
File Storage는 이미지 파일, HTML파일, 동영상 파일등 정적인 컨텐츠를 저장하는 저장소입니다.
API 오픈하여 WAS를 통하지 않고 직접 네트워크와 통신하기도 합니다. 이를 이용하여 정적 웹페이지를 개발할 경우 별도의 WAS 없이 File Storage에 정적 웹페이지를 올리는 식으로 호스팅을 합니다.
AWS S3와 Azure의 Blob Storage등이 여기에 해당됩니다.
카우치코딩에서는 1:1 코딩 문제해결 멘토링 서비스입니다. 가르치는데 관심있는 멘토분들이나 문제해결이 필요한 멘티분들 방문해주세요~
또한 별도로 6주 포트폴리오 수업을 진행중에있습니다. 혼자 포트폴리오 준비를 하는데 어려움이 있으면 관심가져주세요~