- 학과 내 소개 링크: 데이터사이언스학과 학생들만을 위한 책 거래 어플리케이션 '데사책방' 출시
-
데사책방은 학과 학생들이 전공서, 비전공서, 기타 서적을 서로 거래할 수 있도록 만든 모바일 중고 도서 거래 앱입니다.
-
Expo 기반 React Native 앱이 프론트엔드를 담당하고, Firebase Authentication, Cloud Firestore, Firebase Storage가 인증, 게시글 데이터, 이미지 업로드를 담당합니다.
-
앱의 주요 흐름입니다.
- 이메일 기반 회원가입 및 로그인
- 전체 책 목록 조회 및 카테고리별 탐색
- 책 제목 또는 과목명 기준 검색
- 사진과 함께 판매 게시글 등록
- 관심 도서 찜하기
- 상세 화면에서 판매자에게 문자 보내기
- 마이페이지에서 내가 올린 책 조회 및 판매완료 처리
cd frontend
npm install
npm startcd backend/functions
npm install
npm run serveLanding.js에서 Firebase Auth로 이메일/비밀번호 로그인을 처리합니다.Register.js에서 회원가입 후 Firestoreusers컬렉션에 사용자 이름과 이메일을 저장합니다.App.js는firebase.auth().onAuthStateChanged로 로그인 여부를 확인하고, 인증 상태에 따라 인증 화면 또는 메인 앱으로 분기합니다.
Main.js진입 시 Redux 액션을 통해 사용자 정보와 게시글 목록을 불러옵니다.- 홈 화면은
HomeMain.js의 Drawer Navigation으로 구성되어 있으며전체,전공,비전공,기타탭을 제공합니다. Home.js에서는 제목과 과목명을 기준으로 로컬 검색을 수행합니다.
Add.js에서 기기 갤러리 권한을 요청하고expo-image-picker로 이미지를 선택합니다.- 선택한 이미지는 Firebase Storage에 업로드되고, 다운로드 URL과 함께 게시글 메타데이터가 Firestore
posts컬렉션에 저장됩니다. BookDetail.js와BookEdit.js를 통해 게시글 상세 조회 및 작성자 본인 수정이 가능합니다.
- 각 게시글의 찜 정보는
posts/{postId}/likes/{userId}경로에 저장됩니다. Like.js는 Redux 피드 중currentUserLike가 true인 항목만 모아 관심 목록 화면을 구성합니다.Profile.js와MyBookItem.js에서는 내가 등록한 게시글을 모아 보여주며,selling필드를 기준으로 판매완료 상태를 반영합니다.
BookDetail.js는expo-sms를 사용해 판매자에게 미리 작성된 문자 메시지를 보낼 수 있게 합니다.- 프로필 하단에서는 이용안내 링크와 Q&A 링크를 외부 URL로 연결합니다.
개발 중 생성되는 .expo, 로그 파일 등은 제외하고 핵심 구조만 정리하면 아래와 같습니다.
DSbookstore/
├── README.md
├── Screenshots/
│ ├── appstore.png
│ ├── bookdetail.jpeg
│ ├── home.jpeg
│ ├── login.jpeg
│ └── profile.jpeg
├── frontend/
│ ├── App.js
│ ├── app.json
│ ├── config.js
│ ├── assets/
│ ├── components/
│ │ ├── Main.js
│ │ ├── auth/
│ │ │ ├── Landing.js
│ │ │ └── Register.js
│ │ └── main/
│ │ ├── Add.js
│ │ ├── BookDetail.js
│ │ ├── Home.js
│ │ ├── HomeMain.js
│ │ ├── Like.js
│ │ ├── Profile.js
│ │ ├── Home/
│ │ │ ├── BookEdit.js
│ │ │ ├── BookItem.js
│ │ │ ├── Comment.js
│ │ │ ├── Search.js
│ │ │ └── HomeScreen/
│ │ ├── Like/
│ │ └── Profile/
│ └── redux/
│ ├── actions/
│ ├── constants/
│ └── reducers/
└── backend/
├── firebase.json
└── functions/
├── index.js
├── package.json
└── package-lock.json
frontend/Expo 기반 React Native 앱 본체frontend/components/auth비로그인 사용자를 위한 인증 화면frontend/components/main로그인 이후 실제 기능 화면frontend/redux전역 상태와 Firebase 연동 액션을 관리frontend/assets로고, 아이콘, 상태 이미지 등 앱 정적 리소스를 보관backend/functionsFirebase Cloud Functions 확장 포인트ScreenshotsREADME에 사용하는 앱 화면 이미지 모음
Landing로그인 화면Register회원가입 화면
HomeMainDrawer 기반 홈 컨테이너Home전체 게시글 + 검색MajorScreen전공 카테고리NonMajorScreen비전공 카테고리EtcScreen기타 카테고리Add게시글 작성Like관심 목록Profile내 정보 및 판매 내역
BookDetail게시글 상세 모달BookEdit게시글 수정 모달MyBookItem,BookItem,LikeBookItem리스트 렌더링용 아이템 컴포넌트




