제품 모델

Frontend SELF KO
레벨 48 , 레슨 1
사용 가능

11.1 현대 제품

현대 제품

요즘은 '프로그램'이라고 부르지 않지. 현시대의 상품은 수십 개의 프로그램, 수백 개의 인터넷 서비스, 많은 API로 구성될 수 있어.

많은 현대 제품들이 클라이언트-서버 패러다임을 따르고 있어. 이건 네 장치(핸드폰, 노트북, 컴퓨터 등)에 사용자와의 소통 담당 프로그램이 있고, 중요한 기능은 다 서버에서 돌아가는 거야.

때론 네 클라이언트가 여러 독립된 서버들과 소통하거나, 한 제품의 서버가 다른 제품의 서버와 소통할 수도 있어. 그래서 클라이언트와 서버들이 서로 소통하는 글로벌 네트워크가 되는 거지.

그래서 현대 앱의 모델을 클라이언트-인터넷-서버 패러다임으로 설명하는 게 더 나을 수도 있어. 워낙 복잡한 소통이 많아졌거든. "스마트 통신 채널"이 등장했는데, 이 녀석들은 스스로 요청을 누구에게 언제 보낼지를 결정해.

11.2 클라이언트

클라이언트 프로그램들은 대략 4가지로 나눌 수 있어:

  • 데스크톱 클라이언트 — 컴퓨터에서 작동하는 프로그램
  • 모바일 클라이언트 — iOS나 Android 앱
  • 웹 클라이언트 — 브라우저에서 작동하는 웹사이트/웹앱
  • 서버 클라이언트 — 다른 서버에서 실행되는 앱

각 종류는 다시 세분화할 수 있어. 예를 들어, 웹 클라이언트는 웹사이트나 웹앱이잖아. 이건 브라우저와 사이트로 구성돼. 브라우저들도 다 같지 않고, 다르게 작동할 수 있어.

가장 흔한 브라우저를 사용하더라도, 그 안에 로드되는 웹사이트가 문제지. 사이트는 보통 3가지로 구성돼:

  • HTML
  • CSS
  • JavaScript

그냥 HTML과 JavaScript로 사이트를 만들던 시절은 지났어. 이제는 React, Angular, Vue와 같은 프레임워크를 사용해서 사이트를 제작하지. 이젠 사이트가 아니라 진짜 웹앱인 거야.

간단한 CSS도 이제는 없어: CSS 프리프로세서로 생성하고, 심지어 이메일 전용 CSS 프레임워크도 있어. 이렇게 해서 이메일이 브라우저나 대부분의 메일 클라이언트에서 멋지게 보이는 거야.

JavaScript로도 더이상 안 만들어: 모든 큰 웹앱들은 TypeScript로 작성되고, 그게 JavaScript로 컴파일되지. 이제 이해가 되지?

11.3 인터넷과 인프라

클라이언트와 서버의 소통 — 뭐가 쉬울까? 하지만 이제 다 변했어.

우선, 제품을 현대 데이터 센터 중 하나에 호스팅할 가능성이 커. 전 세계의 많은 회사들이 당신의 제품을 그들의 서버나 당신의 물리적 서버에 호스팅할 수 있는 다양한 서비스를 제공하지. 당신의 요구대로.

인터넷과 인프라

물리적 서버는 더이상 물리적이지 않아. 모든 현대 데이터 센터는 가상 서버를 임대해 줘. 일종의 가상 컴퓨터이고, 한 물리적 서버에 수십 개가 있을 수도 있어. 서버 업그레이드가 용이해. 더 많은 메모리가 필요하면 몇 분만에 가상 서버에 추가할 수 있어.

하지만 이런 접근도 이제 구식이란다. 이제 클라우드로 이동하는 게 트렌드야 — 가상 서버에서 제품을 배포하는 것만이 아니라, 데이터 센터의 다양한 인프라와 서비스를 적극 활용하는 거야.

백업을 저장할 서버가 필요하다면: 클라우드에 이를 위한 인프라가 있어. 99.9999999% 신뢰성을 가진 데이터베이스가 필요하다면? 그런 것도 있어. Kafka, RabbitMQ, NoSQL? 다 있고 설정하기 쉬워. 돈만 내면 돼.

이런 데이터 센터와 클라우드는 당신의 제품의 일부가 되기 시작해. 예를 들어, Amazon에는 전 세계에 수많은 데이터 센터가 있어서 CDN 서비스를 제공해: 당신의 공개 콘텐츠가 모든 Amazon 데이터 센터에 캐시가 되고, 전 세계의 사용자들이 더 빠르게 받을 수 있게 해.

또는 Amazon Gateway API 서비스를 통해 당신의 애플리케이션의 API 호출을 통과시킬 수 있어, 서비스와의 작업을 매우 유연하게 설정할 수 있어. 다양한 서비스로 부하를 분산시키거나 DDoS 공격을 반사시키거나, 파일 업로드를 자동화하거나, 스마트 캐싱을 설정하는 것 등 다양하게 가능하지.

따라서 클라이언트 애플리케이션과 서비스 간에 설정해야 하고 설정할 수 있는 많은 "스마트 커뮤니케이션"이 생겨나. 직접 만들 일은 없더라도 이들이 존재하고 프로그램 작동에 상당한 영향을 미칠 수 있음을 알아야 해.

그리고 아직 라우터, 5G 타워, 위성, 해저 인터넷 케이블 얘기를 안 했어. 네 서버에서 클라이언트로 비디오 스트림을 보내는데, 클라이언트의 연결 상태가 안 좋으면 자꾸 끊어져. 누가 이 문제를 해결할 걸까?

11.4 서버

서버라는 말로 여러 서로 다른 개념을 나타낼 수 있어, 그래서 가장 인기 있는 것들에 대해 아는 게 유용할 거야.

물리적 서버

물리적 서버는 데이터를 처리하고 다양한 소프트웨어 애플리케이션의 작동을 보장하는 독립적 컴퓨터 자원을 갖춘 하드웨어야. 이 서버들은 데이터 센터에 설치되어 웹사이트, 애플리케이션, 데이터베이스 및 기타 서비스를 호스팅할 수 있는 역량을 제공해.

가상 서버

가상 서버는 물리적 서버의 환경에서 작동하는 소프트웨어 에뮬레이트 서버야. 가상화 기술을 통해 하나의 물리적 서버가 여러 개의 독립된 가상 서버로 분할될 수 있고, 각각의 서버는 자체 운영 체제를 갖추고 있고 독립적으로 재부팅 및 설정이 가능해.

프로그램 서버 (예: Nginx)

Nginx와 같은 프로그램 서버는 웹 리소스 요청을 처리하기 위한 서버 소프트웨어야. Nginx는 웹 서버로 널리 알려져 있으며, 마이크로서비스 아키텍처에서 이메일 프록시 서버와 리버스 프록시 서버 기능 및 부하 분산기 역할을 할 수 있어.

데이터베이스 서버

데이터베이스 서버는 데이터베이스를 관리하고 요청을 처리하기 위해 사용되는 전문 서버야. 데이터를 중앙 집중 저장하고 이를 처리하면서 네트워크를 통해 접근할 수 있게 해줘. 데이터베이스 서버는 트랜잭션 처리, 데이터 검색 및 변경을 지원하면서 정보 저장의 신뢰성과 보안을 보장해. 데이터베이스 서버 예로는 MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server 등이 있어.

데이터 센터의 어느 가상 서버에서 너의 React와 Node.js 프로젝트가 돌고, 데이터베이스와 작업하면서 NginX에서 요청을 받아 Splank로 로그를 보낼 거야.

다만 너의 코드 덕분에 수백만의 사용자가 너의 제품에 만족할 거야. 그들은 돈을 지불하고, 제품 소유자는 행복할 것이고, 회사의 주식은 오를 것이야. 너는 주식 보너스를 받을 것이고, 너도 행복할 거야. 자연의 행복 순환 같아 :)

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION