읽기 설정
안녕하세요, 개발자 및 설계자 여러분.00:00
오늘, 제가 소개해 드리고 싶은 것은 제가 생각하기에 가장 멋지고 강력한 기술 제품 중 하나입니다.00:02
최근에 접하게 된 것들 중에서요. 그리고 아니요, 이건 Rust이 아닙니다. 클라우드플레어 듀러블 오브젝트입니다.00:09
혹시 여러 고객님이나 사용자님들을 관리하시면서 동시에 상태까지 조율해야 할 필요가 있으셨나요?00:16
백엔드 인프라를 관리하고, 다양한 고객 및 사용자들이 원활하게 소통하도록 보장하는 것이 중요합니다.00:23
네, 백엔드에서 일관성 있는 상태를 공유하면서 트랜잭션적으로 처리하는 방식이군요, 이해했습니다.00:30
정말 복잡한 작업 같죠, 그렇죠? 바로 그렇기 때문에 클라우드플레어 내구 재관(durable objects)가 활용됩니다.00:37
클라우드플레어의 내구 가능한 객체는 여러 클라이언트 간의 조율을 위한 강력한 API를 제공합니다.00:44
각 사용자에게 개인적인 거래 정보 저장 공간과 강력한 일관성을 제공하는 것이 유용하게 들립니다.00:50
네, 맞습니다.00:58
기본적으로, 인메모리 상태, 트랜잭셔널 스토리지 API, 그리고 관리형 웹소켓을 제공받으실 수 있습니다.00:58
연결 관계는 각각의 영구 객체 인스턴스도 본질적으로 단일 스레드 기반으로 작동합니다.01:05
매우 간단한 프로그래밍 모델을 제공합니다.01:11
모든 기능이 내장되어 있으며, 전 세계적인 규모로 관리해 드립니다.01:15
오늘 영상에서는 Rust를 사용하여 여러분의 애플리케이션에서 이 강력한 기술을 어떻게 활용할 수 있는지 알아보시게 됩니다.01:20
관심 있으시다면, 함께 자세히 살펴보고, 링크가 있는 샘플 앱 내부로 들어가 보겠습니다.01:27
아래에 제시된 GitHub 저장소는 여러분이 받으실 애플리케이션이며, 제가 간단히 보여드리고 싶었습니다.01:33
이 중에서 어떤 부분이 Durable objects를 사용하는 건가요? 지난 영상에서 d1을 사용하는 것을 보셨듯이요.01:37
데이터베이스에는 실제로 로그인하실 때 좀 더 전통적인 데이터베이스에서 사용하는 저장 기능의 요소가 있습니다.01:43
보시는 채팅 어플리케이션에는 사용 가능한 모든 채팅 목록이 표시됩니다. 이 정보는... 에서 가져온 것입니다.01:49
채팅방에 참여하시면 주 데이터베이스에서 정보를 가져옵니다. 하지만 이 창에서 채팅방에 참여하는 경우도 마찬가지입니다.01:55
그리고 여기 채팅에 참여하시면, 이제 모든 통신은 내구성이 있는 객체를 사용하고 있습니다.02:01
이제 내구성이 있는 객체 내부의 WebSocket 연결을 통해 통신이 이루어집니다.02:08
두 창문 모두에서 안녕하세요, 그리고 그 모든 것이 지금 주고받아지고 있습니다.02:13
담당 가능한 객체 인스턴스를 통해 이루어집니다.02:19
각 채팅은 자체적으로 번역 가능한 객체의 인스턴스를 가집니다.02:22
처음에 제가 말씀드렸던 싱글 스레드와 상태 관리, 그리고 트랜잭션 경계를 관리하는 부분에 다시 한번 생각해 보시면 될 것 같습니다.02:27
그런 일들이 모두 dutable 객체 내부에서 발생하며, 여기서는 해당 dutable 객체가 채팅과 관련이 있습니다.02:33
자, 그럼 이제 실제 코드 베이스를 살펴보고 어떻게 작동하는지 확인해 보겠습니다. 클라우드플레어 워커로 API를 구축하는 방법에 대한 이전 영상에서 말씀드렸듯이요.02:39
아직도 lib.rs 파일이 남아있습니다. 이것이 모든 API 호출의 실제 진입점입니다.02:46
API의 개별 엔드포인트를 매핑하는 곳입니다.02:52
연결하는 챗에 연결하기 위한 엔드포인트가 메인 워커에 실제로 존재한다는 것을 눈치채게 되실 겁니다.02:56
만약 슬래시 API 슬래시 커넥트를 호출하고, 채팅 아이디어를 연결한다면, 이 과정은 WebSocket 커넥트를 처리하는 함수를 호출하게 됩니다.03:02
여기서 실제 WebSocket 연결이 설정될 것입니다.03:09
여기서는 먼저 이것이 실제로 WebSocket 요청인지 확인하시는 것이 첫 번째입니다.03:14
WebSocket 요청이 아니라면, 'Upgrade' 헤더가 설정되어 있다는 표시입니다.03:18
WebSocket으로 접속하신 경우, 웹소켓 연결이 아니므로 다시 연결을 시도해 주시기 바랍니다.03:23
이것은 일반적인 HTTP 요청일 뿐입니다. 그리고 사용자 로그인 여부를 확인하기 위한 데이터가 여기 있습니다.03:26
잠깐만 건너뛸 수 있습니다. 그것은 간단한 JWT 인증일 뿐입니다.03:32
이 코드 라인들을 보면 정말 흥미로운 점들이 시작되는 것 같습니다.03:36
이제 내구성이 뛰어난 객체와 실제로 연결되기 시작하는 부분입니다.03:41
이제 Dutable 객체를 정의하실 때에는 Wrangler.toml 파일에서 해당 설정을 해주셔야 합니다.03:46
귀하의 Dutable 객체에 바인딩을 생성하실 것입니다.03:51
여기에는 '챗룸'이라고 불리는 바인딩이 있습니다. 그런 다음, 이 바인딩을 애플리케이션의 클래스에 연결하시면 됩니다.03:55
이제 제 코드 안에서, Rust의 경우에는 struct이거나, 클래스라고 부를 수 있는 채팅방이라는 요소가 있을 것입니다.04:02
소스 폴더를 다시 살펴보니 chatroom.rs라는 파일이 있네요. 그 안에 채팅방 구조체가 정의되어 있습니다.04:09
그 내구 가능한 객체 매크로가 할당된 것입니다.04:16
이것은 런타임에 이 채팅방 구조체가 있다는 것을 알려주는 부분입니다.04:20
그것은 오래 지속적으로 사용될 것으로 예상됩니다.04:24
클라우드플레어의 많은 것들처럼, 여기 또한 모든 것이 그렇습니다.04:27
코드 베이스에서 채팅방 이름을 채팅방 클래스에 연결하시는 것 같습니다. 연결하시는 거죠?04:29
음, 해당 대화방 바인딩을 여러분의 컨텍스트에서 제거한 다음, 실제로 로드하실 겁니다.04:35
이 내구성이 뛰어난 객체의 특정 인스턴스를 말씀하시는 건데요, 이것이 경계를 제공하는 부분입니다. 여기에서요.04:40
실제 채팅 ID를 사용하여 경계를 가져와야 합니다. 이렇게 하면 여러 곳에서 공유 상태를 얻을 수 있습니다.04:46
프론트엔드 클라이언트들은 모두 동일한 채팅 ID에 접속을 시도하고, 결국 모두 동일한 ID에 접속하게 됩니다.04:51
귀하의 내구성이 뛰어난 객체의 한 예시입니다.04:58
내구 가능한 객체를 얻으신 후에는 해당 내구 가능한 객체의 fetch 엔드포인트를 호출하실 수 있습니다.05:01
Cloudflare 내부의 작업자 간 소통 방식과 동일하게 접근해 주시면 감사하겠습니다.05:06
여기 내부의 실제 작업 코드, 그리고 내구 실행 객체에 연결을 설정하기 위한 실제 API 코드 모두가 포함되도록 하기 위해05:11
이 fetch 호출이 실제 워커 코드 내에서 호출되면, 바로 그 지점에서 해당 작업을 수행하게 됩니다.05:18
그런 다음에는 주요 내구 객체로 이동해야 합니다. 다시 말씀드리지만, 코드 베이스를 정의하는 구조체가 있습니다.05:23
해당 구조체는 지속 가능한 객체로 정의되어 있습니다.05:29
이후에 구현하신 영구 객체에 실제로 fetch 함수를 정의하실 수 있습니다.05:32
그리고 실제로 어떤 비즈니스 로직을 구현할 함수가 바로 이 fetch 함수입니다.05:39
이제 이 내구성이 보장되는 객체에서 필요한 비즈니스 로직은 WebSocket 연결을 실제로 설정하는 것뿐입니다.05:45
정리하자면, 앞으로 어떤 일이 일어날지 말씀드리겠습니다. 사용자 인터페이스에서 메인 API로 요청을 보내게 됩니다.05:52
요청이 인증되었는지 확인하는 주요 API입니다.05:58
그런 다음, 해당 내구 객체의 특정 인스턴스로 요청을 프록시합니다.06:01
참고하시기 바랍니다. 객체의 인스턴스는 특정 채팅방과 관련이 있습니다.06:07
그럼 이 코드 부분을, 내구성이 뛰어난 객체 내부의 fetch 함수를 실행하시게 될 겁니다.06:11
그리고 여기에서 실제로 내구성이 뛰어난 객체와의 연결을 처리하실 수 있습니다.06:16
자, 그럼 이제 핸들 연결 코드를 살펴보면, 바로 이 부분에서 WebSocket 연결을 설정하기 시작하게 됩니다.06:22
이 핸들 연결 함수 안에서 보시면, 실제로는 WebSocket 쌍을 생성하는 것뿐입니다.06:30
그리고 실제 내구 가능한 객체 자체에도 기능이 존재합니다.06:35
웹소켓 연결을 실제로 수립하기 위해서는 웹소켓 쌍을 새로 만들어야 합니다.06:40
그리고 나서 이 내구 가능한 객체의 상태에서, 내구 가능한 객체는 상태를 관리한다는 것을 기억해주세요.06:45
WebSocket 연결을 수락하는 기능이 있습니다.06:50
여기서는 새로운 WebSocket을 만들어서 연결을 수락하고, 데이터를 추가할 예정입니다.06:53
그 WebSocket 연결에 몇 가지 첨부 파일들을 추가할 예정입니다.06:58
연결 데이터에 특정 사용자 ID를 연결하고 싶습니다.07:01
이제 웹소켓으로부터 응답을 실제로 반환할 수 있습니다. 그러면 이제 응답을 클라이언트로 다시 전송하게 됩니다.07:06
프론트엔드와 양방향 연결을 실제로 구축하려면요.07:11
그리고 이 영구 객체의 특정 인스턴스 사이에서 발생합니다.07:15
기억하시죠, 중간에 계시던 작업자분은 대리인 역할을 하셨고, 지금 연결은...07:19
귀하의 프론트엔드와 실제 사용할 수 있는 객체, 즉 귀하에게 특정한 객체 인스턴스 사이에 직접 연결됩니다.07:23
채팅방에서 주요한 것은 실제 코드 내에서, 특히 dutable 객체의 self 부분에 있다는 점입니다.07:29
self.state에 실제 웹 소켓 연결을 관리하기 위한 다양한 기능들이 구현되어 있습니다. 다른 부분에서도 관련 기능을 찾아볼 수 있습니다.07:35
Duttable 객체의 멋진 기능 중 하나는 알람이나 알림을 설정할 수 있다는 점입니다. 실제로 구성할 수 있도록 지원합니다.07:40
특정 기간이 지나면 자동으로 만료되도록 내구성이 좋은 객체를 만들 수 있으며, 바로 그것이 필요한 것입니다.07:48
그것이 바로 저희 채팅방에서 기본적으로 일어나는 일입니다.07:55
불과 5분 동안만 제공되며, 그 시간은 유동적으로 변동될 수 있습니다.08:00
따라서 누군가가 연결을 하거나 메시지를 보낼 때마다 그 5분은 초기화됩니다.08:04
저희는 다시 한번 self에서 상태 함수를 사용하실 수 있고, state.storage.setAlarm을 호출하실 수 있습니다.08:10
그 시간이 지나면 Cloudflare는 해당 객체의 인스턴스를 자동으로 종료할 예정입니다.08:17
그리고 사용자가 이 fetch 함수를 호출하여 연결을 시도할 때마다요.08:23
혹은 이 영구 객체의 특정 인스턴스에 새로운 WebSocket 메시지가 수신될 때마다요.08:28
그런 다음 채팅 만료 시간을 업데이트하여 5분 슬라이딩 창을 적용하게 됩니다.08:33
자동으로 만료되도록 설정해야 하는 작업들을 수행하실 때, 정말 유용한 기능입니다.08:38
드루팔 객체 내부에 그렇게 설정해두시면, 클라우드플레어에서 자동으로 제거하는 것을 관리해 드릴 것입니다.08:43
네, 물론 WebSocket 연결 안에서 하셔야 할 일 중 하나는 새로운 메시지를 받아들이는 것입니다.08:49
웹소켓 연결을 통해 백엔드로 메시지를 보내고, 또 백엔드에서 프론트엔드로 메시지를 보낼 수 있도록 하는 것이 필요합니다.08:55
채팅방에 내구성을 갖춘 객체를 실제로 구현하는 것에 반대하신다면, 이 방법을 적용해 보실 수 있습니다.09:02
웹 소켓 메시지 함수는 실제로 메시지를 받는 것을 처리할 수 있도록 해주는 기능입니다.09:08
고객님께서 보내시는 메시지는 문자열 또는 이진 데이터 형태일 수 있으므로, 먼저 어떤 형태인지 확인해야 합니다.09:14
들어오는 데이터가 문자열 데이터인지, 아니면 이진 데이터인지 확인한 후, 어떤 종류인지에 따라 역직렬화를 진행할 수 있습니다.09:20
데이터는 슬라이스에서 가져올 수도 있고, 문자열에서 가져올 수도 있습니다. 만약 그 메시지가 누군가가 새로운 채팅을 입력하는 것이라면09:25
프론트엔드에서 오는 메시지 유형은 새로운 메시지이고, 그러면 저희는 그 메시지를 처리하는 함수를 호출할 수 있습니다.09:31
저희 웹 애플리케이션에서 들어온 메시지를 실제로 처리하기 위한 새로운 메시지를 만들 필요가 있습니다.09:36
사용자가 클라이언트에서 백엔드로 요청을 보내는 유일한 방법은 새로운 요청을 보내는 경우뿐입니다.09:42
예를 들어 다양한 사용 사례가 많으신 경우, 새로운 메시지를 입력하고 계신다는 표시입니다.09:47
이러한 다양한 비즈니스 로직에 대해 만약 매치 구문이 더 적합할 수도 있겠습니다.09:52
여기서는 메시지의 유형이 어떤 것인지 확인하기 위해 더 많은 조건이 있을 수도 있습니다.09:56
귀하의 프론트엔드에서 해당 메시지 유형 속성이 실제로 설정됩니다.10:00
프론트엔드 애플리케이션의 실제 JavaScript 코드를 살펴보시면 알 수 있습니다.10:06
WebSocket 연결을 통해 메시지가 전송될 때, 전송되는 데이터는 단순히...10:11
WebSocket 연결을 통해 데이터를 전송할 때, 어떤 종류의 메시지인지 구별할 수 있는 방법이 필요합니다.10:16
고객님으로부터 들어오는 요청들을 처리하는 것입니다. 요청들을 처리해 주시면 됩니다.10:22
웹을 처리하려면, 웹 소켓 메시지 기능을 구현하시면 됩니다.10:26
혹시 반대로 생각해보면 어떨까요? 고객님께 메시지를 보내는 건 어떠신가요?10:30
네, 당연히 저희 채팅방에서 제가 메시지를 입력하면, 채팅방에 연결된 다른 분들도 그 메시지를 보셔야 합니다.10:35
네, 그렇습니다. 이 새로운 메시지 기능에서 다루어집니다.10:42
이것은 실제로 상태에서 모든 메시지를 불러올 것입니다.10:45
이것은 Dutable Objects가 상태를 표현하는 방법 중 하나입니다.10:49
관리 측면에서, 그리고 영구적인 객체 자체에서도 상태 속성과 상태를 가지고 있습니다.10:53
저장 공간을 가질 수 있습니다. 저장 공간에서 물건을 얻을 수 있습니다.11:00
물품을 보관 장치에 설정할 수 있습니다. 자, 여기서는 이 메시지들이 로드될 때, 실제로는 벡터를 로드하게 됩니다.11:04
객체의 상태로부터 발생하는 메시지들입니다.11:11
이는 메모리 내 상태와 상호 작용하는 것과 유사합니다. 메모리에 있는 모든 메시지를 불러오고 계시는 겁니다.11:15
내용물을 로드하시려는 이유가 내구 가능한 객체가 가지고 있는 제한 때문이시군요.11:21
한 번에 메모리에 백 개의 메시지만 저장할 예정입니다. 백 개를 넘어서는 메시지는 그냥 삭제될 것입니다.11:24
알겠습니다. 바로 그 부분이 처리하는 내용입니다. 그리고 새로운 메시지를 받을 때 가장 먼저 메시지의 상태를 업데이트할 것입니다.11:29
저희가 state.storage.get 했던 것과 마찬가지로, state.storage.put를 진행하고 있습니다.11:36
저희는 이 영구 객체의 상태에 메시지를 저장하고 싶습니다.11:42
그리고 나서 WebSocket 연결을 모두 로드할 수 있습니다. `self.state.get WebSockets`를 사용해서 가져올 수 있습니다.11:47
현재 연결되어 있는 모든 연결 정보를 제공해 드릴 것입니다.11:52
이 내구성이 강한 객체의 인스턴스에 넣고 싶어요. 기억하세요, 여러 채팅방에서 여러 개의 내구성이 강한 객체 인스턴스를 가질 수 있습니다.11:56
모든 연결들을 반복적으로 검토하신 후에는 간단히 진행하시면 됩니다.12:03
데이터를 실제로 프론트엔드로 전송하기 위해 Connection.send를 사용해야 합니다.12:06
이 코드 전체에서 연결 관리가 이루어지지 않는 것을 아마 눈치채셨을 겁니다.12:11
데이터베이스를 쿼리하거나 여러 고객을 확인하기 위해 복잡한 절차를 거칠 필요는 없을 것 같습니다.12:15
동시에 상태를 업데이트하려고 시도하지 않습니다. 이 모든 것은 클라우드플레어에서 관리하고 있습니다.12:22
저는 self.state.get 및 self.state.put 기능을 수행할 수 있습니다.12:27
self.state.get을 이용해서 WebSockets을 가져올 수 있고, 그다음에 WebSockets들을 반복해서 메시지를 보낼 수도 있습니다.12:31
제 프론트엔드로 메시지를 다시 보낼 수 있습니다. 만약 WebSockets을 사용해 보신 적이 있다면, WebSockets으로 무언가를 만들려고 했습니다.12:36
더 이상 생각하지 않으셔도 될 텐데, 생각해야 할 것들이 정말 많으셨군요.12:42
이것에 상태 관리와 트랜잭션 API를 결합하면 정말 유용한 애플리케이션 개발 방법이 됩니다.12:48
다시 한번 빠르게 요약하자면, 제가 알게 된 것은 정보량이 정말 많고, 그것이 매우 빠르게 전달되었다는 점입니다.12:54
따라서 귀하의 코드 베이스에서 내구성을 갖는 모든 객체는 이 내구적 객체 매크로를 포함하는 구조체로 구현될 것입니다.12:59
그 견고한 객체 구현 내에서 fetch 함수를 구현하실 수 있습니다.13:04
그리고 이것이 실제 작업자가 호출하게 될 부분입니다. 작업자분들은 내구 가능한 객체의 인스턴스를 로드하게 될 것입니다.13:10
그리고 나서, 그들이 내구성이 뛰어난 오브젝트에 전화를 겁니다. 이번 경우에는 초기 연결만 처리하면 됩니다.13:16
특정 클라이언트와의 WebSocket 연결이 설정되면 한 번 설정된 연결은 유지됩니다.13:22
전송되는 모든 메시지가 앞뒤로 주고받아지면, API 호출이 필요하지 않고 해당 연결을 통해 실행될 수 있습니다.13:27
연결 경로가 아닌 다른 방식으로 이 견고한 객체에 요청이 전달되면 어떻게 될까요?13:32
그러면 그 듀얼 객체는 아무것도 하지 못할 거예요. 왜냐하면 할 일이 없으니까요. 404 오류를 반환할 거에요.13:37
실제로 연결을 처리하실 때는 이 accept 웹소켓을 실행하시면 됩니다.13:42
self.state.acceptwebsocket을 사용하시면 웹소켓 연결을 프론트엔드로 다시 반환하실 수 있습니다.13:49
그렇게 하면 연결이 설정됩니다. 그리고 모든 고객님들께 다시 연락을 취해야 한다면요.13:55
self.state.getWebSockets 함수를 사용하신 후, 활성 연결을 모두 반복할 수 있습니다.14:00
송신자 함수를 사용하여 실제로 파이프를 통해 데이터를 전송합니다.14:06
이 모든 요소는 귀하의 API 코드와 연결됩니다.14:10
바인딩을 사용하여, 클라우드플레어 서비스와 마찬가지로 많은 기능을 제공합니다.14:14
그렇다면 이것이 실제로 여러분에게 어떤 의미를 갖게 되는 걸까요?14:19
개발자로서, 특정 객체에 대한 상태를 관리해야 하는 상황을 생각해 보신 적 있으신가요?14:22
어떤 특정 사물을 생각해보세요. 이렇게 채팅방이 있거나, 멀티플레이 게임, 심지어 관리를 하는 것과 같은 일도 포함될 수 있습니다.14:29
이것은 전자상거래 웹사이트에서 사용되는 바구니입니다. 각 바구니는 개별적으로 내구성을 갖도록 제작될 수 있습니다.14:35
그 객체는 사용자의 ID와 연결될 수 있는, 지속 가능한 객체의 인스턴스입니다.14:41
이렇게 하면 사용자가 어떤 기기를 연결하든 항상 최신 버전을 받게 됩니다.14:46
바구니입니다. 백엔드에서 어떤 것도 관리하실 필요가 없습니다. Cloudflare에서 모든 것을 관리하고 있습니다.14:51
귀하께 불편을 드릴 수 있는 부분입니다. 물론, 클라우드플레어는 몇 가지 제한 사항이 있습니다.14:56
계정에 객체를 무제한으로 보유하실 수 있습니다.15:00
인스턴스를 무제한으로 사용하실 수 있습니다. 고객이 백 명 더 추가되더라도요.15:03
천 명의 고객, 백만 명의 고객, 모두 각자의 바구니를 들고 있습니다. 클라우드플레어는 그것을 제공해 드리겠습니다.15:06
객체의 인스턴스는 무제한으로 가질 수 있지만, 계정에 저장되는 용량은 50기가바이트를 초과할 수 없습니다.15:11
만약 백 명의 고객이 모두 메모리에 100만 기가바이트를 저장한다면, 문제가 발생하기 시작할 겁니다.15:17
내구성이 있는 객체당 초당 천 건의 요청이라는 제한도 있습니다.15:25
상태에 메모리에 저장하는 데이터는 키의 크기가 2KB를 초과할 수 없습니다.15:29
128킬로바이트보다 큰 데이터 또는 파일을 의미합니다.15:35
고려해야 할 몇 가지 제약 사항들이 있습니다. 자세한 내용은 클라우드플레어 웹사이트에 모두 나와 있습니다.15:38
설명란에 링크를 넣어두겠습니다. 하지만 다음 번에 여러 클라이언트 간에 상태를 관리해야 할 때는요.15:43
여러 백엔드와 시스템이 있고, 그러한 작업을 귀하께 이점을 제공하는 방식으로 수행해야 합니다.15:50
지속성은 인메모리 상태를 제공하고, WebSocket 연결을 지원하여 실시간 통신을 가능하게 합니다.15:54
음, 내구성이 좋은 물건들을 고려해 보십시오. 건축을 하는 데 정말 유용한 방법입니다.16:00
시청해주셔서 감사합니다. 다음 영상에서 또 만나요.16:05
AI Summary
이 영상은 클라우드플레어의 Durable Objects를 활용하여 채팅방을 구현하는 방법을 안내합니다. Durable Objects는 서버리스 환경에서 상태를 유지할 수 있는 객체로, 복잡한 상태 관리와 데이터 동기화를 용이하게 합니다. 채팅방 구현 아키텍처는 클라이언트, Durable Object, 엣지 워커로 구성되며, WebSocket을 통해 실시간 양방향 통신을 지원합니다. Durable Objects API(self.state.get, self.state.acceptwebsocket, self.state.getWebSockets 등)를 활용하여 WebSocket 연결을 관리하고, 상태를 저장하며, 메시지를 브로드캐스팅합니다. 채팅방, 멀티플레이 게임, 장바구니 시스템 등 다양한 서비스에 적용 가능하며, 클라우드플레어가 객체 관리를 대행하여 백엔드 부담을 줄여줍니다. 다만, 저장 용량(50GB), 요청 제한(초당 1000건), 키 크기 제한(2KB) 등의 제약 사항이 존재합니다.
Key Highlights
- •Durable Objects는 서버리스 환경에서 상태를 유지할 수 있는 객체입니다.
- •WebSocket을 통해 클라이언트와 Durable Object 간 실시간 양방향 통신이 가능합니다.
- •Durable Objects API를 활용하여 상태 관리, WebSocket 연결, 메시지 브로드캐스팅을 수행합니다.
- •채팅방, 멀티플레이 게임, 장바구니 시스템 등 다양한 서비스에 적용 가능합니다.
- •클라우드플레어가 객체 관리를 대행하여 백엔드 부담을 줄여줍니다.


