헌혈은 생명을 구하는 쉽고 안전한 방법입니다. 그러나 여전히 적합한 혈액형의 헌혈자와 환자를 매칭하는 데에는 어려움이 남아 있습니다. 헌혈에서는 시간이 곧 생명과 직결되는 만큼, 헌혈자를 적합한 환자와 신속하게 연결하는 것이 무엇보다 중요합니다.
이 과정이 효율적일수록 더 많은 생명을 구할 수 있습니다. 이러한 과제에 도전한 사람이 바로 바누 코르티와다(Bhanu Korthiwada)입니다. 그가 개발한 애플리케이션 'Zindagi'는 헌혈자와 최적의 환자를 매칭하여 전체 헌혈 프로세스를 획기적으로 단축합니다.
이 애플리케이션의 핵심은 데이터를 최대한 효율적으로 전송해 사용자에게 실시간 업데이트를 제공하는 것이었습니다. 지연이나 딜레이가 발생하면 사용자 경험이 저하되고, 빠르게 변화하는 헌혈 수요에 대응할 수 없습니다.
이러한 요구 사항에 따라 Redis가 애플리케이션의 메인 데이터베이스로 채택되었고, 성능에 놀라운 효과를 가져왔습니다. 데이터가 최대 효율로 전송되었고, 사용자는 실시간 업데이트를 받았으며, 헌혈 과정 역시 한층 원활해졌습니다.
지금부터 바누가 이 애플리케이션을 어떻게 만들었는지 살펴보겠습니다. 앱의 세부 내용을 살펴보기 전에, Redis Launchpad에서 확인할 수 있는 흥미로운 다른 앱들도 다수 있다는 점을 미리 알려드립니다.
글을 다 읽은 후 꼭 한번 둘러보시기 바랍니다!
헌혈자와 환자를 연결하는 앱 구축 방법
- 무엇을 만들까요?
- 필요한 것들은?
- 아키텍처
- 시작하기
- 애플리케이션 사용 방법
- 작동 원리
1. 무엇을 만들까요?
같은 혈액형을 가진 헌혈자와 환자를 매칭하는 애플리케이션을 만듭니다. 이를 통해 시간을 절약하고 생명을 구하는, 더욱 원활하고 효율적인 헌혈 프로세스를 실현할 수 있습니다.
아래에서는 이 애플리케이션을 구현하는 데 필요한 전 과정과 핵심 구성 요소를 소개합니다. 처음부터 끝까지 모든 단계를 이해하기 쉬운 작은 단위로 나누어 설명하므로, 누구나 부담 없이 따라 할 수 있습니다.
준비되셨나요?
그럼 바로 시작해 보겠습니다.
2. 필요한 것들은?
RedisJSON: ECMA-404(JSON 데이터 교환 표준)를 네이티브 데이터 타입으로 구현합니다.
RediSearch: Redis를 위한 고급 쿼리, 보조 인덱싱, 전문 검색(full-text search) 기능을 제공합니다.
Redis Pub/Sub: 이벤트 메시징에 사용되며, 채널을 구독하는 모든 구독자에게 메시지를 전달할 수 있습니다.
Telerik: 웹, 모바일, 데스크톱 애플리케이션 개발 등을 위한 다양한 소프트웨어 도구를 제공합니다.
Blazor: C#과 HTML을 사용해 웹 앱을 개발할 수 있는 무료 오픈소스 웹 프레임워크입니다.
.NET Core Runtime: 인터넷에 연결된 앱을 위한 기본 서비스를 제공합니다.
3. 아키텍처
4. 시작하기
사전 준비 사항
- .NET Core – v5.0.x (최신 패치 버전)
- Visual Studio 2019 16.9 또는 Visual Studio Code 1.55
- Docker – v19.03.13 (선택 사항)
- Auth0:
- 도메인(Domain)
- 클라이언트 ID(Client ID)
- 클라이언트 시크릿(Client Secret)
- SMTP(선택 사항): SMTP는 선택적 기능입니다. 공급자는 여러 곳이 있으며, 필요와 비용에 따라 선택하면 됩니다. 주요 공급자는 다음과 같습니다:
- Twilio의 SendGrid
- Amazon SES
- Mail Jet
- Mailgun
- SMS: SMS 기능 코드는 아직 구현되지 않았지만 계획 중에 있습니다. 인기 있는 공급자는 다음과 같습니다:
- Msg91
- Twilio
Docker를 사용한 로컬 설치 설정
사전 준비 사항
- Docker
- Docker Compose
1단계. 저장소 클론:
git clone https://github.com/redis-developer/rediszindagi
.env 파일을 Auth0 및 SMTP 정보로 업데이트합니다.
2단계. Docker Compose 파일 살펴보기
위 Compose 파일은 두 가지 기본 서비스를 정의합니다:
- Redismod
- rediszindagi
Redismod에는 이 프로젝트에 사용되는 RedisJSON, RediSearch 같은 내장 모듈이 포함되어 있습니다. 여러 Auth0 환경 변수를 전달해야 하며, SMTP는 선택 사항입니다. 데이터 영속성을 위해 Docker 볼륨 마운트가 추가되었고, 앱은 80번 포트로 노출됩니다.
터미널/명령 프롬프트에서 docker-compose up -d를 실행합니다.
애플리케이션은 localhost를 통해 접근할 수 있습니다.
5. 데이터 저장 방식
- 요청 데이터는 다양한 키와 데이터 타입으로 저장됩니다.
- 각 요청마다:
- ID: 문자열 형태의
Guid - 혈액형, 헌혈 유형, 우선순위, 상태:
C# ENUM
- ID: 문자열 형태의
- 각 요청마다:
- Redis JSON
- 사용자 프로필 키: 접두사
USER_PROFILE, 접미사 Auth0 이름 식별자 - 요청 키: 접두사
BLOOD_REQUEST, 접미사 Guid 문자열
- 사용자 프로필 키: 접두사
- Redis Publish:
- 요청: 새로운 헌혈 요청이 발생하면 요청 ID가 메시지로
URN:BLOODREQUESTS:NEW토픽에 발행됩니다.
- 요청: 새로운 헌혈 요청이 발생하면 요청 ID가 메시지로
데이터 접근 방식:
- C# 리포지토리 패턴이 사용되며, 모든 호출은 Connection Multiplexer를 통해 인스턴스를 생성합니다.
6. 애플리케이션 사용 방법
계정 생성 또는 로그인
애플리케이션의 모든 기능을 활용하려면 헌혈자가 계정을 만들어야 합니다. 메인 대시보드에서 'Register Now(지금 등록)'를 클릭하면 됩니다.
헌혈 진행하기
상단 내비게이션 바의 헌혈 버튼을 클릭합니다. 그러면 자신의 혈액형과 헌혈하려는 수량을 데이터베이스에 알려주는 여러 입력 필드가 나타납니다.
헌혈 요청 받기
계정을 만들면 해당 헌혈자의 혈액형과 맞는 환자들이 헌혈 가능 여부에 대한 알림을 받게 됩니다. 이후 환자는 헌혈 요청을 보낼 수 있습니다. 전체 요청 목록을 확인하려면 상단 내비게이션 바의 'Requests(요청)' 탭을 클릭하세요. 여기서 환자들이 보낸 모든 헌혈 요청을 한눈에 파악할 수 있습니다.
결론: Redis로 환자와 헌혈자를 연결해 생명을 구하다
신속한 혈액 확보는 많은 환자에게 생사를 가르는 문제입니다. 헌혈자와 적합한 환자를 매칭하는 과정은 종종 시간이 오래 걸리며, 그 순간순간이 환자의 생명을 위협합니다. 바누의 애플리케이션은 Redis의 번개처럼 빠른 컴포넌트 간 데이터 전송 능력을 통해 이 장애물을 제거합니다.
이처럼 효율적인 데이터 전송 덕분에 Zindagi는 주어진 조건에 따라 헌혈자와 적합한 환자를 신속하게 매칭할 수 있습니다. 이는 전체 헌혈 프로세스를 가속화하여, 헌혈자와 환자가 실시간으로 소통하고 헌혈 일정을 조율할 수 있게 해줍니다.
이 애플리케이션의 핵심은 모든 당사자를 하나로 모아 최적의 방향으로 나아가도록 돕는 것입니다. 그 결과 더 많은 헌혈이 이루어지고, 낭비되는 시간은 줄어들며, 관련된 모든 사람에게 완벽하게 원활한 경험이 제공됩니다.
이 애플리케이션이 작동하는 모습을 시각적으로 확인하려면 YouTube 영상을 참고하세요. 이 글이 유익했다면 Redis Launchpad도 꼭 확인해 보세요. 일상생활에 실질적인 영향을 미치는 다양한 혁신적인 애플리케이션들을 만나볼 수 있습니다.
지도에서 실시간으로 버스 위치를 추적하는 앱도 있고, 개발도상국 병원의 물품 부족을 예방하는 앱도 있습니다. 그리고 그 외에도 발견할 것이 무궁무진합니다.
지금 바로 확인해 보세요!
앱 개발자는 누구인가요?
바누 코르티와다(Bhanu Korthiwada)
바누는 경험 많은 소프트웨어 엔지니어로, 현재 ADP에서 수석 컨설턴트로 재직 중입니다. 그의 최신 프로젝트 소식을 계속 받아보려면 GitHub에서 팔로우하세요.