이 프로젝트는 Android 및 iOS 플랫폼용으로 설계된 메시징 애플리케이션 Jellyfish의 중요한 구성 요소인 Jellyfish 백엔드를 다시 만드는 데 중점을 둡니다. 백엔드는 도메인 중심 설계 및 클린 아키텍처 원칙에 따라 꼼꼼하게 개발되었습니다. 시스템 내 통신은 Meditr 라이브러리를 사용하여 조정되며 CQS(명령-쿼리 분리)를 강조하여 코드 명확성과 문제 분리를 향상시킵니다.
현재 배포는 단일체로 작동하지만 아키텍처는 본질적으로 유연합니다. API 게이트웨이(예: Ocelot, YARP), 명령-쿼리 책임 분리(CQRS) 및 백그라운드 데이터베이스 동기화 프로세스와 같은 도구를 통합하여 마이크로서비스 패러다임에 신속하게 적응할 수 있습니다. 후자는 읽기 및 쓰기 데이터베이스 간의 일관성을 보장하기 위해 행 버전 관리와 함께 낙관적 잠금을 사용합니다.
향후 개선을 예상하여 아키텍처는 RabbitMQ를 통한 AMQP를 통한 비동기 통신 구현을 구상합니다. 이를 통해 시스템은 대기열을 통해 이벤트를 효율적으로 처리할 수 있게 되어 강력한 게시/구독 동작을 위한 기반을 마련하게 됩니다.
기술 스택
백엔드
웹 프론트엔드
모바일 애플리케이션
C#/NET 7
C#/NET 7
C#/NET 7
ASP NET
블레이저 서버
.NET 마우이
MySQL 8.0.35
면도기 부품
시그널R
Mudblazor UI 구성요소 (https://mudblazor.com/)
도커
EF 코어
테스트
단위 테스트 접근 방식:
단위 테스트는 메서드와 프로세스 흐름의 정확성과 기능을 확인하기 위해 이 프로젝트에 적용되는 기본 관행입니다. 모든 방법이 개별적으로 테스트되는 것은 아니지만 균형 잡힌 접근 방식이 채택됩니다. 원칙은 과도한 엔지니어링과 과도한 테스트를 피하고 중요한 프로세스와 방법을 철저히 테스트할 수 있는 중간 지점을 찾는 것입니다.
단위 테스트 동작은 소프트웨어 테스트에서 일반적이고 효과적인 접근 방식인 표준 arrange, act, assertion 방법론을 준수합니다. 이 방법론은 테스트 조건 설정, 특정 작업 실행 및 예상 결과 검증을 위한 구조화된 프레임워크를 제공합니다.
Postman을 사용한 엔드투엔드 테스트:
엔드투엔드 테스트는 가져온 생성된 Swagger API 문서를 활용하여 Postman을 사용하여 수행됩니다. Postman은 포괄적인 API 테스트를 위한 강력한 도구 역할을 하여 전체 시스템 기능을 확인할 수 있습니다. Swagger API 문서의 통합은 API 엔드포인트 탐색 및 검증을 위한 명확하고 대화형 인터페이스를 제공하여 테스트 프로세스의 효율성을 향상시킵니다.
선적 서류 비치
광범위한 문서:
이 프로젝트는 모든 이해관계자가 쉽게 사용하고 이해할 수 있도록 포괄적인 문서화에 중점을 두고 있습니다. 현재 문서에는 다음이 포함됩니다.
엔터티 관계 다이어그램(EER) 문서:
데이터 모델과 시스템 내 관계에 대한 통찰력을 제공하기 위해 상세한 EER 문서가 준비되었습니다. 이 문서는 개발자에게 귀중한 리소스 역할을 하며 기본 데이터베이스 구조를 명확하게 이해하는 데 도움이 됩니다.
스웨거 문서:
이 프로젝트는 Swagger 문서를 활용하여 상세하고 대화형 API 문서를 보장합니다. Swagger는 사용 가능한 API 엔드포인트, 매개변수 및 응답을 탐색하고 이해하기 위한 직관적이고 사용자 친화적인 인터페이스를 제공합니다. 이 문서는 개발자에게 필수적이며 제공된 API와의 원활한 통합 및 상호 작용을 가능하게 합니다.
전개
바이너리 또는 도커 컨테이너를 통한 레거시.
프로젝트 동기 부여 및 목표
여러 모바일 플랫폼에서 NET MAUI 테스트:
이 프로젝트를 시작하는 주요 동기는 다양한 모바일 플랫폼에서 NET MAUI를 엄격하게 테스트하는 것입니다. 여기에는 지정된 플랫폼 전반에 걸쳐 원활한 성능과 호환성을 보장하고 NET MAUI 커뮤니티에 귀중한 통찰력을 제공하기 위한 포괄적인 테스트 및 최적화가 포함됩니다.
사용자가 자체 메시징 인프라를 호스팅할 수 있도록 지원:
이 프로젝트의 주요 목표 중 하나는 메시징 인프라를 독립적으로 호스팅할 수 있는 기회를 제공하여 사용자에게 권한을 부여하는 것입니다. 이는 메시징 서비스의 접근성을 민주화하여 사용자가 통신 환경을 제어할 수 있도록 하는 것을 목표로 합니다.
최적의 자원 활용:
이 이니셔티브의 주목할 만한 부작용은 최소한의 하드웨어 리소스로 메시징 인프라 호스팅을 활성화하는 데 중점을 둔 것입니다. 특히 이 프로젝트는 사용자가 Raspberry Pi와 같은 액세스 가능한 하드웨어에서 인프라를 실행할 수 있도록 효율적인 활용을 목표로 합니다. 자원 효율성에 대한 강조는 접근성과 지속 가능성에 대한 프로젝트의 약속과 일치합니다.
보안 및 향후 기능
종단간 암호화 및 개인정보 보호:
사용자 데이터의 보안을 보장하는 것이 가장 중요합니다. 첫 번째 프로덕션 버전이 출시되기 전 향후 단계에는 종단 간 암호화의 세심한 구현이 포함됩니다. 이는 민감한 사용자 정보에 대한 강력한 보호 계층을 제공합니다. 또한 잊어버릴 수 있는 페이로드 패턴을 채택하면 데이터 보존을 최소화하고 개인 정보 보호 모범 사례에 맞춰 개인 정보 보호를 더욱 강화할 수 있습니다.
AI 지원 봇:
사용자 상호 작용의 미래를 수용하여 인공 지능(AI) 지원 봇을 시스템에 통합할 계획이 있습니다. Google Llama 또는 ChatGPT와 같은 고급 AI 기술을 활용하는 것도 고려됩니다. 이러한 AI 기반 봇은 사용자 참여를 향상하고 지원 프로세스를 간소화하며 지능적이고 반응성이 뛰어난 사용자 경험에 기여합니다.
블록체인 인프라:
최첨단 기술을 탐구하면서 블록체인에서 시스템 인프라를 호스팅하는 가능성을 조사하는 미래 지향적인 비전이 있습니다. 강화된 보안, 분산화, 투명성을 포함한 블록체인 기술의 이점을 평가합니다. 이러한 미래 지향적인 접근 방식은 시스템을 미래에 대비하고 안전하고 분산된 아키텍처의 새로운 트렌드에 맞추는 것을 목표로 합니다.
할 일
백엔드:
JellyfishBackend, PostgreSql용 Docker.compose
특정 작업을 위한 RateLimiter
'ApiDataTransferObject' 내부에 있는 데이터를 확인하고 검증하기 위한 HttpQuery 및 HttpBody용 IModelBinder+IModelBinderProvider
Linq 표현식에서 SQL로: 값 개체 및 도메인 모델의 연산자를 재정의/생성하고 이를 Linq 표현식으로 변환합니다.
캐시 기능(현재 IMemoryCache)
비밀번호 재설정 끝점: "사용자 편집" 기능을 통해 비밀번호 재설정을 활성화합니다. 도메인 로직 변경: UpdateUser, updateuser 명령+핸들러 업데이트.
모범 사례 암호화 방법을 사용하여 데이터베이스에 비밀번호 암호화
인증/권한 부여: Jwt 데이터(클레임 등)를 데이터베이스와 일치시킵니다.
토큰 클레임이 데이터베이스의 역할과 일치하지 않거나 IP 위치(IPv4+v6의 Geo IP 또는 토큰 생성과 다른 사용자 에이전트)가 크게 다른 경우 이벤트를 트리거합니다. 이메일을 통해 사용자에게 알립니다.
파일 업로드 / 사용자 프로필 사진 / Jellyfish 메시지 또는 미디어의 첨부 파일 / 저장 전략: 성능상의 이유로 데이터베이스에 저장하지 마십시오. 캐싱 전략을 구현하고 백엔드 시작 중에 캐시를 구축합니다. 폭력적인 미디어/포르노 업로드를 탐지하기 위해 콘텐츠와 외부 AI 서비스(Azure=link, AWS)를 사용하여 바이러스 검사를 수행합니다.
바이러스 및 허용되지 않는/폭력적인 콘텐츠에 대한 책임 사슬(추상화 구현)
도메인: 채팅 비즈니스 로직 검사를 구현합니다.
GDPR: 모든 GDPR 조치(보고, 삭제 등)를 가능하게 하는 GDPR용 모듈
도메인 엔터티 채팅/메시지/사용자 우정 요청의 프레젠테이션/인프라/적용 구현: SignalR을 활용하여 대상 사용자에게 알림 등 -> 이벤트 핸들러
잊을 수 있는 페이로드 -> GDPR(독일어: DSGVO).
Jellyfish 사용자를 위한 엔드투엔드 암호화. 순서: 서로 상호 작용하는 사용자는 공개 키를 공유합니다. User-A가 메시지를 생성하면 해당 메시지는 User-B의 공개 키로 암호화됩니다. 메시지는 백엔드로 전송되고 데이터베이스에 저장(암호화)됩니다. 사용자 B는 신호기를 통해 메시지를 수신하거나 백엔드에서 확인되지 않은 모든 메시지를 폴링합니다(연결이 끊어진 경우, 예를 들어 무선 셀에 대한 연결이 끊어진 경우 다시 연결하여 폴링). 사용자 B는 백엔드에 대한 메시지를 확인합니다(수신된 레이크는 사용자 A의 앱에 표시됩니다). 사용자 B는 개인 키를 사용하여 메시지를 해독합니다.
대상에게 성공적으로 전달된 메시지 삭제
백엔드용 SSL 암호화.
스웨거 문서
필터를 사용하여 일부 기본 ASP.NET Core 응답 메시지를 다시 작성합니다. 예: HTTP 오류 422 또는 승인되지 않은 응답 -> JSONAPI 오류 응답으로 다시 작성 ----------> Presentation.Extension.JsonApiResultExtension.
FluentValidation: 유효성 검사 오류로 인한 JSONAPI 오류 응답에 대한 응답 처리 기능을 갖춘 유효성 검사기를 준비합니다. CommandHandlerValidators가 이미 구현되었습니다: ValidationPipelineBehavior; 유효성 검사 규칙만 각 CommandValidation의 생성자에 정의하면 됩니다.
채팅 경계 컨텍스트 구현:
POST: /api/v1/chat, 채팅 만들기(친구와만 대화할 수 있도록 도메인 로직 요구 사항에 따라 채팅에 최소한 하나의 메시지가 있어야 한다는 규칙이 정의됨)
프레젠테이션
구현
테스트(회색 상자 테스트)
하부 구조
구현
테스트(회색 상자 테스트)
애플리케이션
명령/쿼리
유효성 검사(Fluentvalidation)
매니저
이벤트 처리
도메인(새 비즈니스 규칙으로 인해 완료 상태가 제거됨)
구현
테스트(단위 테스트)
GET: /api/v1/chat/{chatId}, 채팅을 가져옵니다.
프레젠테이션
구현
테스트(회색 상자 테스트)
하부 구조
구현
테스트(회색 상자 테스트)
애플리케이션
명령/쿼리
유효성 검사(Fluentvalidation)
매니저
이벤트 처리
도메인
구현
테스트(단위 테스트)
PUT: /api/v1/chat/{chatId}, 설명, 이름 등 채팅 정보 업데이트
프레젠테이션
구현
테스트(회색 상자 테스트)
하부 구조
구현
테스트(회색 상자 테스트)
애플리케이션
명령/쿼리
유효성 검사(Fluentvalidation)
매니저
이벤트 처리
도메인
구현
테스트(단위 테스트)
삭제: /api/v1/chat/{chatId}, 채팅 삭제
프레젠테이션
구현
테스트(회색 상자 테스트)
하부 구조
구현
테스트(회색 상자 테스트)
애플리케이션
명령/쿼리
유효성 검사(Fluentvalidation)
매니저
이벤트 처리
도메인
구현
테스트(단위 테스트)
PUT: /api/v1/chat/{chatId}/picture/{messageId}, 채팅 사진 설정
프레젠테이션
구현
테스트(회색 상자 테스트)
하부 구조
구현
테스트(회색 상자 테스트)
애플리케이션
명령/쿼리
유효성 검사(Fluentvalidation)
매니저
이벤트 처리
도메인
구현
테스트(단위 테스트)
PUT: /api/v1/chat/{chatId}/member/{userId}, 채팅에 사용자 추가(새 구성원)
백엔드에 대한 모든 http 요청을 확인하고 모든 오류 위의 모든 상태를 파악하므로 http 코드 4xx 및 5xx
아이콘: MudBlazor 아이콘.
탐색바:
특징
은둔
도움말 섹션:
도움말 포인트가 있는 사이드바로 NavBar
도움말 포인트 검색이 포함된 본문
인기 기사
도움말 포인트 아래의 Android 및 iOS 도움말 탭
블로그:
해파리에 관한 최신 정보
다운로드:
앱스토어 링크
보행인:
해파리 아이콘
저작권
이용약관 및 개인정보 보호정책
채널이 있는 소셜 미디어 아이콘
기능(웹 프런트엔드에서):
알림용 스낵바(사용자 편집, x/y 서비스 알림 받기 등과 같은 모든 작업) => https://mudblazor.com/comComponents/snackbar#5ac08464-80c3-4c34-8cac-24f0947275e7
비밀번호 복구 기능이 있는 로그인 페이지
인상
GDPR:
쿠키 면책조항
Dashboard.razor:
차트:
보내는 메일
전월 대비 등록 이용자 수
차트 배경이 약간 회색
_Host.cshtml: 기본 메시지 변경
앱 면도기:
PageNotFound 페이지
Signup.razor(로그인 + 등록):
구성 요소 배열
등록 후 성공 페이지
사용자.면도기:
CRUD+검색(탄력적 검색으로 검색 가능)
별도의 비밀번호 재설정 작업
사용자 프로필 사진 보기(MudBlazor 이미지)
사용자 프로필 사진 업로드(MudBlazor FileUpload)
사용자 감사 로그 편집/삭제(모든 이벤트는 별도의 테이블에 있음)
수신된 사용자의 친구/우정 요청 보기
건강.면도기:
상태 확인 보기를 정교하게 만듭니다(현재 기본 상태 확인 보기는 프레젠테이션으로 표시됨).
블로그:
CRUD 게시물
임베디드 미디어
블로그: MudBlazor 수직 진행률 표시줄(애니메이션)을 사용하여 수직으로 게시물 로드
블로그: 왼쪽 및 오른쪽 순서로 타임라인을 사용하여 게시물을 봅니다.
인증: 토큰이 더 이상 5분만 유효할 때 UI에 표시되는 백그라운드 타이머입니다. 그런 다음 활성화 추적이 시작됩니다. 사용자가 UI에서 작업을 트리거하면 백엔드에서 토큰이 자동으로 새로 고쳐집니다.
세션 저장소: 마지막으로 방문한 URL을 저장합니다.
자신의 프로필
보다
편집/관리
모바일 앱:
이전 DTO 및 모델 구조와 이전 네임스페이스를 제거합니다.
새 구조로 다시 작성
SQLite의 메시지/사용자 캐시, 새로운 구조에 적응
새로운 WebApiClient 및 SignalRClient 추가(WebFrontend의 WebAPI 클라이언트를 공유로, 새로운 SignalR 클라이언트(유형화된 클라이언트)를 재사용을 위해 공유로 추가)
메시지 인터셉터: 메시지/알림 절차에 대한 호출자 체인을 유지합니다(주요 메시징 기능).
백엔드에 대한 대상 엔드포인트 URL을 새 백엔드 구조로 다시 작성
채팅: 메시징(UI+앱 백엔드)
채팅+친구목록: 프로필 보기
채팅: 메시지(첨부파일 보내기)
WhatsApp 등과 반대되는 독립형 특성:
메시지를 스크린샷할 수 없는 것으로 표시: 이 메시지는 스크린샷 생성으로 인해 흐리게 표시됩니다. 프로필 사진과 동일합니다.
그룹 캘린더: 그룹 채팅 캘린더에서 함께 개인 활동을 계획합니다.
공유에 대한 배려: 허용되지 않는 공유에 대해 신경 쓰지 않으려면 메시지를 공유할 수 없는 것으로 표시하세요. :)
메시징 인프라를 직접 호스팅할 수 있는 능력. 남에게 의존하지 마세요!
폭력 반대: 오늘날 Telegramm과 같은 개인 채팅은 폭력과 성인용 콘텐츠로 인해 사람들에 의해 악용되고 있습니다. 그래서 해파리는 그러한 콘텐츠에 대한 공유를 방지하는 기능을 제공합니다. 머신러닝 알고리즘은 메신저를 통해 공유될 미디어를 평가합니다. 폭력적인 콘텐츠가 인식되면 전송된 메시지가 회피됩니다. ** Azure AI Vision 또는 유사한 ML 알고리즘이 필요합니다 **
라이브 트랙을 통한 위치 공유: 그룹 또는 개인 채팅의 경우 불필요합니다. 관전자 모드가 켜져 있으면 움직임이 채팅 회원에게 실시간으로 스트리밍됩니다(라이브 트랙 지도에서만 사용 가능).
망각: 잊을 권리는 오늘날 GDPR의 초석입니다. 계정을 제거하면 모든 데이터(친구와 공유한 채팅 메시지도 포함)가 제거됩니다. 물론 언론도 마찬가지다. 채팅 회원에게 전송된 미디어를 삭제하는 것은 오늘날의 관행이 아니지만 모든 인간은 자신이 만든 데이터를 잊을 수 있는 권리가 있다는 것을 알고 있습니다.
여론조사/투표: WhatsApp의 예: 해파리에서도 투표가 가능합니다.
일반적인:
DNS Preconf, Windows 호스트 파일은 Docker와 같은 이름입니다.
라이센스 정의
이용약관
기부
설치 및 실행 매뉴얼
계속 지켜봐 주시기 바랍니다.
관리자 패널 알파 0.1
계기반
페이지 매김 및 검색이 포함된 사용자 관리(Users.razor)
사용자 관리(Users.razor) - 추가/편집
사용자 관리(Users.razor) - 삭제
비디오: Http 요청에서 Linq 표현식으로, 마지막으로 ORM(동적)/THUMBNAIL PNG BELOW(HREF)를 통해 MySql 쿼리로 전환 필터 미리보기