2.1 현대적인 제품들
현대적인 제품들은 이제 아무도 그냥 프로그램이라고 부르지 않아. 현대적인 제품은 수십 개의 프로그램, 수백 개의 인터넷 서비스, 그리고 클라우드 데이터 센터에서 제공하는 많은 API를 포함할 수 있어.
많은 현대적인 제품들은 (모두가 아닐 수도 있지만) 클라이언트-서버 패러다임에 따라 작동해. 이건 너의 디바이스(휴대폰, 노트북, 컴퓨터)에 사용자가랑 소통하는 프로그램이 설치되어 있고, 중요한 기능은 서버에서 처리되는 거야.
때때로 너의 클라이언트는 여러 독립적인 서버와 소통할 수 있어, 또는 하나의 제품 서버가 다른 제품 서버와 소통할 수도 있어. 이렇게 클라이언트와 서버 사이의 글로벌 네트워크가 형성되면서 서로 상호작용하게 돼.
그래서 현대적인 앱 모델은 아마 클라이언트-인터넷-서버 패러다임으로 설명되는 게 더 나을지도 몰라. 여기에 너무나 다양한 복잡한 통신이 많이 있어. 그래서 이른바 "스마트 커뮤니케이션 채널"이 등장했어. 이 채널들은 스스로 너의 요청을 누구에게 언제 전송할지 결정해.
2.2 클라이언트들
클라이언트 프로그램은 대략적으로 4가지로 나눌 수 있어:
- 데스크탑 클라이언트 — 컴퓨터에서 실행되는 프로그램.
- 모바일 클라이언트 — iOS 또는 Android용 앱.
- 웹 클라이언트 — 브라우저에서 작동하는 사이트/웹 앱.
- 서버 클라이언트 — 다른 서버에서 실행되는 애플리케이션.
각각은 다시 세부적으로 나눌 수 있어. 예를 들어, 웹 클라이언트는 사이트 또는 웹 애플리케이션으로 구성되는데, 이는 브라우저와 사이트로 구성돼. 브라우저들도 다 같지 않아서 각각 다르게 작동할 수 있어.
가장 널리 사용되는 브라우저를 예로 들어도, 그 안에 로드되는 사이트가 있어. 사이트는 보통 세 가지로 구성돼:
- HTML
- CSS
- JavaScript
"이보다 더 쉬운 것은 없다,"라고 말할지도 몰라. 하지만 오늘날에는 아무도 HTML과 JavaScript만으로 사이트를 작성하지 않아. 이제는 React, Angular, Vue 같은 실제 프레임워크를 사용해 웹사이트를 개발해. 이제는 웹사이트가 아니라 자체 빌드, 테스트, 패러다임이 있는 완전한 웹 애플리케이션이야.
순수한 CSS도 이제 아무도 사용하지 않아. CSS를 생성하는 데 도움을 주는 CSS 전처리기와 전체 CSS 프레임워크가 있어. 심지어 이메일에 대해 특별한 CSS 프레임워크들이 있어, 이메일이 브라우저나 대부분의 메일 클라이언트에서 멋지게 보여질 수 있도록 해 줘.
순수한 JavaScript도 이제 거의 사용하지 않아 — 모든 큰 웹 애플리케이션은 TypeScript로 작성돼 있고, 이것이 JavaScript로 컴파일돼. 이해가 돼?
2.3 인터넷과 인프라
클라이언트와 서버 간의 통신 — 이보다 더 쉬운 것은 없다? 하지만 이들 관계에서도 이미 모든 것이 변했어.
아마도 너의 제품은 최신 데이터 센터 중 하나에 배치될 거야. 전 세계의 수많은 회사들은 너의 제품을 위한 다양한 호스팅 서비스를 제공해, 그들의 서버에서든 너의 자체 물리적 서버에서든. 어떤 요구든 비용만 지불하면 돼.
물리적 서버는 더 이상 물리적이지 않아. 모든 최신 데이터 센터는 가상의 서버를 임대할 수 있는 서비스를 제공해. 가상 서버는 일종의 가상 컴퓨터로, 하나의 물리적 서버에 수십 대가 있을 수 있어. 이것은 서버 업그레이드 면에서 편리해. 더 많은 메모리가 필요하면 몇 분 만에 가상 서버에 추가할 수 있어.
하지만 이 접근 방식도 이미 구식이야. 요즘 유행은 클라우드로 이사하는 거야 — 너의 제품이 데이터 센터에서 가상 서버에만 배포되는 것이 아니라, 이 데이터 센터의 다양한 인프라와 서비스를 적극적으로 활용하는 거야.
백업을 저장할 서버가 필요하면 클라우드에 이미 준비된 편리한 인프라가 있어. 99.9999999% 신뢰성을 가진 데이터베이스가 필요해? 그것도 있어. Kafka, RabbitMQ, NoSQL? 이미 다 있고 쉽게 설정할 수 있어. 그냥 돈만 내면 돼.
그리고 이 데이터 센터와 클라우드는 너의 제품의 일부가 되기 시작해. 예를 들어 Amazon은 전 세계에 많은 데이터 센터가 있어서, CDN 서비스를 제공해. 너의 공개 콘텐츠는 Amazon의 모든 데이터 센터에 캐시되고, 전 세계 너의 사용자들이 더 빠르게 받을 수 있어.
또는 너의 응용 프로그램 API에 대한 요청을 Amazon Gateway API 서비스를 통해 전달할 수 있어. 이를 통해 너의 서비스와의 작업을 매우 유연하게 설정할 수 있어. 서로 다른 서비스에 대한 부하를 분산하고, DDoS 공격을 반사하고, 파일 업로드를 자동화하고, 스마트 캐싱을 설정하는 등 많은 작업을 할 수 있어.
이로 인해 앱 클라이언트와 너의 서비스 간에는 많은 "스마트 통신"이 발생하게 되는데, 이들은 설정이 가능하고 필요해. 비록 네가 이것을 직접 해야 할 일은 없더라도, 그것들이 존재하고 너의 프로그램 작동에 상당한 영향을 미칠 수 있다는 것을 알아야 해.
그리고 우리는 아직 라우터, 5G 타워, 위성, 해저 인터넷 케이블 같은 주제에 대해 다루지 않았어. 너는 서버에서 너의 클라이언트에게 비디오 스트림을 보내고 있는데, 클라이언트의 연결 상태가 좋지 않아서 항상 끊어지는 문제가 발생해. 누가 이 문제를 해결할 것 같아?
2.4 서버
"서버"라는 말에는 완전히 다른 개념들이 숨어있을 수 있어. 가장 흔히 쓰이는 것들에 대해 알아놓으면 좋아.
물리적 서버물리적 서버는 데이터 처리와 다양한 소프트웨어 애플리케이션 실행을 위한 리소스(프로세서, 메모리, 스토리지)를 갖춘 독립된 컴퓨터 장비야. 이 서버들은 데이터 센터에 설치되어 웹사이트, 애플리케이션, 데이터베이스 및 기타 서비스 호스팅을 위한 용량을 제공해.
가상 서버가상 서버는 물리적 서버 환경에서 작동하는 소프트웨어로 에뮬레이트된 서버야. 가상화 기술을 통해 하나의 물리적 서버는 여러 개의 독립된 가상 서버로 분할될 수 있어, 각각은 자체 운영 체제를 가지고 독립적으로 재부팅 및 설정될 수 있어.
서버 프로그램 (예: Nginx)Nginx 같은 서버 프로그램은 웹 리소스 요청을 처리하기 위한 서버 소프트웨어야. Nginx는 웹 서버로 널리 알려져 있는데, 메일 프록시 서버 및 마이크로서비스 아키텍처에서의 리버스 프록시 서버뿐만 아니라 로드 밸런서 역할도 할 수 있어.
데이터베이스 서버데이터베이스 서버는 데이터베이스 관리와 요청 처리를 위한 전문 서버야. 중앙 집중식 데이터 저장 및 처리를 제공하며 네트워크를 통해 데이터에 접근을 허용해. 데이터베이스 서버는 트랜잭션 처리, 데이터 검색 및 수정, 정보 저장의 신뢰성과 보안을 보장해. 데이터베이스 서버의 예로는 MySQL, PostgreSQL, Oracle Database 및 Microsoft SQL Server가 있어.
그리고 데이터 센터의 가상 서버 중 하나에서 너의 Python과 Django로 작성된 프로젝트가 실행될 거야. 그것은 데이터베이스와 작동하고, NginX로부터 요청을 받고, Splank에 행동 로그를 보낼 거야.
하지만 너의 코드 덕분에 너의 제품을 사용하는 수백만 명의 사용자가 행복해질 거야. 그들은 제품을 사용하고, 그에 대해 돈을 지불하고, 그렇게 되면 제품 소유자도 행복해질 거야. 회사의 주가는 오르고, 너는 주식으로 보너스를 받고 너도 행복해질 거야. 자연의 행복 순환처럼 말이야 :)
GO TO FULL VERSION