팔방은 부동산 중개인이 등록한 매물을 체계적으로 관리할 수 있도록 돕는 모바일 애플리케이션입니다.
팔방을 통해 부동산 중개인은 부동산 매물 목록을 쉽게 정리할 수 있고,
고객의 요구사항에 부합하는 매물이 존재하면 자동으로 해당 매물을 추천할 수 있습니다.
이 모든 기능이 지도 위에서 시각화되어 고객에게 직관적이고 편리하게 설명할 수 있습니다.
- 매물 등록 • 수정 • 삭제
- 매물 리스트 • 상세정보 조회 • 검색
- 지도에서 매물 위치 시각화
- 고객 요구사항 등록 • 수정 • 삭제
- 고객 요구사항 리스트 • 상세정보 조회 • 검색
- 고객 요구사항에 부합하는 매물 추천
[사용자]
⇅
[View (Flutter UI 화면)]
⇅
[ViewModel (상태/로직 관리)]
⇅
[Model (Repository, DataSource)]
⇅
───────────────────────────── (HTTP 통신) ─────────────────────────────
⇅
[REST API (백엔드 서버, Dart)]
├── 사용자 인증/권한 관리 (구글 OAuth API 연동)
├── 매물/고객 요구사항/매칭 비즈니스 로직
├── 파일 업로드/다운로드 처리
⇅
[DB (MongoDB)]
⇅
[외부 API]
├── 지도 API (Naver)
└── 구글 OAuth API (인증)
- View: Flutter로 구현된 UI. ViewModel과만 직접 통신.
- ViewModel: UI 상태 및 비즈니스 로직 관리. Model(Repository)와 통신하여 데이터를 가져오고, View에 전달.
- Model: Repository/DataSource 계층. REST API를 통해 서버와 통신.
- REST API: Dart로 구현된 백엔드 서버. 클라이언트의 요청을 받아 DB 및 외부 API와 연동.
- DB: MongoDB. 서버에서 직접 접근하여 데이터 관리.
- 외부 API: 지도 API(네이버), 구글 OAuth API(인증).
- 사용자가 앱에 접속하여 로그인 또는 회원가입을 진행합니다.
- 로그인한 사용자는 매물 목록을 조회할 수 있습니다.
- 검색 기능을 통해 원하는 매물을 쉽게 찾을 수 있습니다.
- 매물 항목을 선택하면 상세 정보를 확인할 수 있습니다.
- 매물 상세 정보 화면에서 매물 등록, 수정, 삭제가 가능합니다.
- 지도 탭에서는 매물 위치가 지도 위에 핀으로 표시되며, 도로명 주소 검색을 통해 지도 위치를 이동할 수 있습니다.
- 고객 요구사항을 등록, 수정, 삭제할 수 있으며, 요구사항에 맞는 매물 추천을 받을 수 있습니다.
palbang
├── client/ # 클라이언트(Flutter)
│ ├── lib/
│ │ ├── main.dart
│ │ ├── data/
│ │ │ ├── datasources/
│ │ │ ├── models/
│ │ │ └── repositories/
│ │ ├── view/
│ │ │ ├── demand/
│ │ │ ├── map/
│ │ │ ├── property/
│ │ │ └── sign/
│ │ ├── viewmodel/
│ │ │ ├── demand_viewmodel.dart
│ │ │ └── property_viewmodel.dart
│ │ ├── widgets/
│ │ │ ├── demand_card.dart
│ │ │ └── property_card.dart
│ ├── assets/
│ ├── android/
│ ├── ios/
│ ├── linux/
│ ├── macos/
│ ├── web/
│ ├── windows/
│ ├── pubspec.yaml
│ └── pubspec.lock
│
└── server/ # 서버(Dart)
├── bin/
│ └── main.dart
├── lib/
│ ├── main.dart
│ ├── controllers/
│ │ ├── auth_controller.dart
│ │ ├── demand_controller.dart
│ │ ├── match_controller.dart
│ │ ├── property_controller.dart
│ │ └── static_controller.dart
│ ├── models/
│ │ ├── demand_model.dart
│ │ ├── listing_model.dart
│ │ ├── property_model.dart
│ │ └── user_model.dart
│ ├── repositories/
│ │ ├── demand_repository.dart
│ │ ├── property_repository.dart
│ │ └── user_repository.dart
│ ├── routes/
│ │ ├── auth_routes.dart
│ │ ├── demand_routes.dart
│ │ ├── match_routes.dart
│ │ └── property_routes.dart
│ ├── services/
│ │ ├── auth_service.dart
│ │ └── property_service.dart
│ └── utils/
│ ├── db.dart
│ ├── jwt.dart
│ └── match.dart
├── uploads/
├── test/
├── pubspec.yaml
└── pubspec.lock
-
client가 관리하는 정보
- 사용자 인증 상태(로그인/로그아웃)
- 매물 목록, 매물 상세 정보
- 고객 요구사항 목록, 상세 정보
- 지도에서 표시할 매물 위치 정보
- 검색 및 필터 조건, UI 상태(선택된 탭 등)
- 사용자 입력값(폼 데이터 등)
-
server가 관리하는 정보
- 사용자 계정 정보(아이디, 비밀번호 해시, 권한 등)
- 매물 데이터(주소, 가격, 면적, 옵션, 이미지 등)
- 고객 요구사항 데이터(희망 지역, 가격대, 면적 등)
- 매물-고객 매칭 결과
- 데이터베이스 연결 및 관리 정보
- 업로드된 파일(이미지 등)
-
client와 server가 송수신하는 정보
- 로그인/회원가입 요청 및 응답
- 매물 등록/수정/삭제 요청 및 응답
- 매물 목록/상세 정보 조회 요청 및 응답
- 고객 요구사항 등록/수정/삭제 요청 및 응답
- 고객 요구사항 목록/상세 정보 조회 요청 및 응답
- 매물 추천 결과
- 지도에서 사용할 매물 위치 데이터
- 이미지 파일 업로드 및 다운로드
-
server와 server가 송수신하는 정보
- (본 프로젝트는 단일 서버 구조로, 서버 간 직접 통신은 없음)
- 단, 외부 API(네이버 지도 API)와의 통신이 존재함
- 주소-좌표 변환(Geocoding)
- 지도 위 매물 위치 표시를 위한 지도 데이터 요청
- pubspec.yaml
# pwd: .../palbang
cd client \
&& flutter pub get \
&& cd ../server \
&& dart pub get