Petting (반려견 성격유형검사 서비스)
FastAPI SQLAlchemy Classical Mapping Domain Event Kakao Local API MySQL Docker
목차
프로젝트 개요
| 서비스 소개 | 반려견의 성향을 기반으로 적합한 친구를 매칭하고, 견주들이 반려 경험과 정보를 공유할 수 있는 커뮤니티 및 소통 플랫폼임. |
|---|---|
| 핵심 목표 1 | 반려견의 성향에 맞는 친구를 안전하게 연결할 수 있는 PDTI(반려견 성향 분석) 기반의 1:1 매칭 시스템을 구축하는 것을 목표로 함. |
| 핵심 목표 2 | 동네 근접 위치 및 공간 좌표 연동을 이용해 주변 반려견 정보를 편리하게 탐색하고 소통할 수 있는 반려인 친화적 소통 채널을 제공하는 것을 목표로 함. |
팀 구성 및 정보
| 항목 | 내용 |
|---|---|
| 참여 인원 | 총 3명 (PO/PM 1명, BE 1명, FE 1명) |
| 진행 기간 | 2024.04 ~ 2024.07 (약 2개월) |
| 담당 역할 | 백엔드 API 개발 및 AWS 인프라 유지보수 수행 |
| 협업 도구 | • Slack: 팀 내부 소통 및 실시간 알림 연동 • Jira: Sprint 기반 일정 및 세부 태스크 관리 • Notion: 기획 안, 스펙 명세, 개발 및 API 문서 통합 관리 |
기술 구현 상세
기술 스택 및 개발 환경
| 항목 | 내용 |
|---|---|
| 담당 역할 | 백엔드 API 개발 및 AWS 인프라 유지보수 수행 |
| 기술 스택 | Python 3.10, FastAPI, SQLAlchemy, MySQL, dependency-injector, boto3 (AWS S3), requests, PyJWT, Aligo SMS API, Kakao Local API, Docker |
| Infrastructure | AWS(EC2, S3, RDS)를 활용함 • FastAPI: EC2 환경에 Docker 컨테이너 기반으로 배포함 • RDS: MySQL 엔진을 적용해 데이터를 적재함 • S3: 반려견 프로필 및 커뮤니티 미디어 자산 저장소로 활용함 |
| Repository | PETTING-API Repo |
주요 기능
| 기능 | 상세 내용 |
|---|---|
| PDTI 및 성격 유형 검사 | 반려견 성향 및 행동 양식 자체 진단 테스트를 개발하고 점수 산정 알고리즘을 구현함 |
| 성향 기반 친구 매칭 | PDTI 진단 결과 유형의 연산 및 비교를 통해 근접 매칭 및 성격 적합도 높은 친구 강아지 매칭 추천 기능을 개발함 |
| 위치 기반 근접 강아지 탐색 | 유저의 주소 유효성을 검증하고, 추출된 공간 좌표(경위도)를 활용하여 주변에 거주하는 반려견을 거리순 탐색하는 서비스를 구현함 |
| 실시간 1:1 매칭 채팅 및 게시판 | 매칭에 동의한 반려인 간 1:1 대화가 가능한 채팅 인프라를 구축하고 정보 공유 커뮤니티 게시판을 제공함 |
개발 성과
| 특징 | 상세 내용 |
|---|---|
| SQLAlchemy Classical Mapping 아키텍처 설계 | • 문제: 테이블 데이터 모델과 도메인 모델 간의 강한 결합으로 영속성 스펙(DB 스키마) 변경 시 도메인 규칙이 오염되거나 테스트 작성이 어려웠음. • 해결: SQLAlchemy map_imperatively() API를 도입하여 테이블 모델과 비즈니스 엔티티를 완벽히 단방향 격리하는 Classical Mapping 아키텍처를 설계함.• 성과: 외부 프레임워크나 DB 오염 없이 순수한 핵심 도메인만 테스트할 수 있는 고신뢰 단위 테스트 환경을 구축함. |
| 도메인 이벤트(Domain Event) 아키텍처 도입 | • 문제: 미디어 업로드 로직과 리워드 지급 보상 로직이 하나의 트랜잭션 안에 묶여 강하게 결합되어 있어, 리워드 지급 장애 시 업로드까지 함께 실패하는 신뢰성 문제 및 확장성 저하가 발생함. • 해결: 도메인 이벤트 발행-구독 패턴을 지원하는 공통 EventHandler 버스를 자체 설계함. • 성과: 미디어 업로드와 리워드 지급 로직 간의 물리적인 결합도를 완전히 제거하고, 향후 신규 비즈니스 리스너를 간편하게 추가할 수 있는 확장 구조를 확보함. |