모우다임은 개발자들이 스터디, 공모전, 프로젝트 팀원들을 보다 쉽게 모집할 수 있도록 돕는 플랫폼입니다. 이 앱은 개발자 커뮤니티 내에서 지식 공유와 협업 기회를 확대하고, 팀 구성을 간편하게 할 수 있는 환경을 제공합니다.
테킷 앱 스쿨: 안드로이드 2기 최종 프로젝트 공모에서 우수상을 수상했습니다.
스터디 진행에 필요한 다양한 정보를 손쉽게 입력할 수 있습니다.
-
카테고리 선택: 스터디 주제를 선택하세요. 알고리즘, 웹 개발, 모바일 앱 개발, 머신러닝, 데이터 분석, 디자인 등 다양한 카테고리를 선택할 수 있습니다.
-
기간 선택: 스터디 진행 기간을 설정하세요. 짧게는 1개월부터 길게는 6개월 이상까지 가능합니다.
-
진행 방식 선택: 스터디를 어떻게 진행할 것인지 선택하세요. 온라인, 오프라인, 혹은 혼합 방식으로 진행할 수 있습니다. 온라인은 ZOOM, Google Meet 등 온라인 도구를 사용할 수 있으며, 오프라인의 경우 스터디장이 임의로 장소를 정하여도, 팀원들과 협의 후 정하여도 좋습니다.
-
기술스택: 스터디에서 사용하거나 학습할 기술 또는 툴을 기입하세요. 주요 프로그래밍 언어, 프레임워크, 라이브러리, 개발 도구 등을 명시합니다.
-
소개글 작성: 스터디의 목적, 방향성, 모집 대상, 진행 방식 등을 설명하는 글을 작성합니다. 스터디에 참여하고자 하는 사람들이 어떤 목표를 가지고 있는지, 어떤 환경에서 진행될 것인지 구체적으로 기술하세요. 문의를 위한 카카오톡 오픈채팅 링크를 넣어 예비 팀원들과 소통할 수 있습니다. 스터디를 잘 나타낼 수 있는 사진을 첨부한다면 금상첨화입니다.
카테고리 선택 | 기간 선택 | 진행 방식 선택 | 기술스택 | 소개글 작성 |
---|---|---|---|---|
타인이 개설한 스터디에 신청하여 함께 공부 및 협업할 수 있습니다. 신청 상태에 따라 하단 버튼의 기능이 바뀌어 조작이 간편합니다.
-
스터디 신청 버튼: 스터디에 참여하고자 할 때 사용합니다. 버튼을 클릭하면 스터디 개설자에게 신청이 전달되며, 스터디 개설자가 승인 여부를 결정합니다.
-
신청 취소 버튼: 신청 후에는 '신청하기' 버튼이 '신청 취소' 버튼으로 바뀝니다. 아직 승인되지 않은 상태에서 신청을 취소할 수 있습니다.
-
스터디 탈퇴 버튼: 스터디 참가가 확정되면 '신청 취소' 버튼에서 '스터디 탈퇴' 버튼으로 바뀝니다. 진행 중인 스터디에서 중도에 탈퇴하고 싶을 경우 사용하는 버튼입니다.
-
신청 관련 알림: 스터디 신청 상태에 따라 실시간 알림을 받을 수 있습니다. 신청 정상 처리 여부, 스터디 개설자의 승인 여부, 신청 취소 여부, 탈퇴 확인 등이 알림으로 전달됩니다.
스터디 신청 버튼 | 신청 취소 버튼 | 스터디 탈퇴 버튼 | 신청 관련 알림 |
---|---|---|---|
자신이 개설한 스터디에서는 다양한 관리 기능을 통해 신청자들을 관리하고, 게시글을 수정하며 스터디 진행 상황을 효율적으로 관리할 수 있습니다.
-
멤버 관리: 현재 스터디에 참여하고 있는 멤버들을 관리하는 기능입니다. 멤버 목록을 확인하고, 태도가 불량한 멤버를 내보낼 수 있습니다.
-
스터디 신청 승인: 스터디에 참여 신청한 사람들의 신청을 승인하거나 거절할 수 있습니다. 신청자의 프로필과 추가 정보를 확인한 후, 적합한 멤버를 선별하여 승인을 결정합니다.
-
모집 완료로 변경: 스터디 멤버가 충분히 모였거나 모집을 종료하고 싶을 때 스터디 상태를 '모집 완료'로 변경할 수 있습니다. 이후에는 새로운 신청을 받을 수 없습니다.
-
스터디 정보 수정: 스터디 진행 중에 내용이 변경되거나 추가 정보가 필요할 경우 스터디 게시글을 수정할 수 있습니다. 스터디 제목, 기간, 기술 스택 등의 정보를 변경할 수 있습니다.
멤버 관리 | 스터디 신청 승인 | 모집 완료로 변경 | 스터디 정보 수정 |
---|---|---|---|
사용자가 스터디 게시글을 올릴 때 입력한 정보를 바탕으로 원하는 조건의 스터디를 쉽게 찾을 수 있도록 필터링 및 검색 기능을 제공합니다.
-
필터링 미적용: 필터링 조건이 설정되지 않은 상태입니다. 사용자가 직접 조건을 선택하지 않으면 기본적으로 모든 스터디가 보여집니다.
-
필터링 적용: 사용자가 설정한 특정 조건을 바탕으로 스터디 목록을 좁힐 수 있는 기능입니다. 예를 들어 스터디의 카테고리, 진행 방식, 기술스택 등의 조건을 설정하여 원하는 스터디만 표시되도록 필터링할 수 있습니다.
-
필터링 칩: 사용자가 선택한 필터링 조건을 시각적으로 보여주는 작은 버튼(칩) 형태입니다. 파란색 칩은 선택된 필터를 나타내며, 클릭하여 필터를 해제할 수 있습니다.
-
스터디 검색: 키워드를 입력하여 스터디를 직접 검색할 수 있는 기능입니다. 스터디 제목을 기반으로 검색이 이루어집니다.
필터링 미적용 | 필터링 적용 | 필터링 칩 | 스터디 검색 |
---|---|---|---|
키워드와 링크를 활용하여 자신의 전문성, 경험, 그리고 관심 분야를 간결하고 명확하게 표현할 수 있습니다.
-
프로필 화면: 프로필 사진, 이름, 간략한 소개, 관심분야, 다양한 링크들이 함께 표시됩니다. 자신이 진행하거나 참여한 스터디 등 모우다임 어플 내 활동 내역도 확인할 수 있습니다.
-
링크 연결: 자신의 기술 블로그, GitHub, LinkedIn과 같은 외부 링크를 프로필에 연결하여 신뢰도를 높일 수 있습니다. 링크를 통해 자신의 프로젝트, 경력, 포트폴리오 등을 직접 확인할 수 있도록 합니다. 웹뷰를 통해 연결됩니다.
-
프로필 수정: 프로필 정보를 언제든지 업데이트할 수 있습니다. 새롭게 습득한 기술이나 경력, 활동을 반영하여 자기소개를 수정함으로써 항상 최신의 정보를 유지할 수 있습니다.
-
설정: 앱 내의 세부사항을 확인할 수 있습니다. 프로필 및 비밀번호를 수정할 수 있으며, 고객 지원 메뉴에 접근하는 것도 가능합니다.
프로필 화면 | 링크 연결 | 프로필 수정 | 설정 |
---|---|---|---|
뷰모델(ViewModel)을 사용하여 화면에 표시되는 데이터와 비즈니스 로직을 분리하였습니다. 화면(View)에서 직접 데이터를 관리하지 않고 뷰모델이 데이터의 상태를 책임집니다. 특히 회원 가입, 글 작성 등 정보를 일시적으로 저장했다 사용해야 하는 기능에서 해당 정보를 필요한 시점에 안정적으로 활용할 수 있습니다. 이를 통해 프로그램의 유지보수성을 높이고, 화면과 데이터 로직 간의 의존성을 최소화합니다.
레포지토리(Repository) 패턴을 통해 데이터 소스(DataSource)와의 직접적인 상호작용을 관리합니다. 레포지토리는 데이터베이스 또는 네트워크를 통해 데이터를 가져오는 역할을 수행하는데, 이때 데이터 출처를 추상화하여 뷰모델이 구체적인 데이터 소스에 의존하지 않도록 돕습니다.
네트워크 연결을 확인하여 네트워크가 불안정할 때는 로컬 데이터베이스(Room)를 통해 이전에 로드된 정보를 보여주고, 네트워크가 정상화되면 최신 정보를 가져와 업데이트하는 방식으로 설계되었습니다. 아직 ROOM 데이터베이스는 적용되어 있지 않으나 추후 사용 시 쉽게 확장 및 구현할 수 있는 구조를 갖추고 있습니다.
유연하게 비동기 작업을 제어할 수 있도록 Kotlin Flow를 사용하여 데이터의 흐름을 처리했습니다. 이는 LiveData를 대신합니다. Flow를 사용할 때 주의할 점은, 앱이 백그라운드에 있을 때 Flow 수집이 일어나면 자원의 낭비가 일어나고 크래시를 일으킬 수 있다는 점입니다. 따라서 생명 주기(Lifecycle)에 맞춰 코루틴의 스코프를 정확히 설정하는 데 신경썼습니다.
Hilt는 의존성 주입을 간편하게 사용하도록 돕는 라이브러리로, 코드의 유지 보수성을 높이고 객체 생명 주기를 관리합니다.
처음 어플리케이션을 기획할 당시 NoSQL의 일종인 Firebase를 사용하려 했습니다. 접근성이 높고, 무료 사용이 가능하며, 데이터를 간편하게 접근할 수 있기 때문이었습니다. 그러나 데이터를 가져오는 속도가 너무 느려 사용자 경험에 부정적인 영향을 미쳤습니다.
속도 문제를 해결하기 위해 MySQL로 전환하고, AWS RDS(Relational Database Service)를 사용하여 MySQL 데이터베이스를 설정했습니다. 데이터베이스를 쉽게 관리하고 확장할 수 있는 AWS RDS를 사용함으로써 안정적이고 확장 가능한 데이터베이스 환경을 제공할 수 있게 되었습니다.
사용자를 효과적으로 관리하고 간편하게 로그인 기능을 구현하기 위해 Firebase Authentication을 사용하였습니다. Firebase Authentication은 다양한 로그인 제공업체와 통합이 가능하며, 안정적인 인증 시스템이 갖추어져 있습니다. 많은 로그인 제공업체 중, 모우다임은 개발자를 위한 플랫폼이라는 특성에 맞추어 GitHub 로그인을 제공합니다. 또한 더 많은 사용자를 고려하여 카카오 로그인도 구현했습니다. 이를 통해 보편적인 사용자들도 쉽게 로그인할 수 있습니다.
기존 시스템과 충돌이 일어나지 않도록 카카오 OAuth와 Firebase Authentication을 연결하였습니다. 이후 카카오, Firebase Authentication, MySQL Database를 통합하여 인증된 사용자를 한 곳에서 통합적으로 관리할 수 있게 개선하였습니다.
클라우드 기반 푸시 알림 솔루션으로, 앱 사용자들에게 실시간 알림을 보낼 수 있습니다.
Glide는 이미지 로딩 및 캐싱을 최적화하는 라이브러리로, 네트워크에서 이미지를 불러오고 처리하는 과정을 간편하게 만듭니다.
이미지 저장을 위해 처음에는 Firebase Storage를 사용하거나, 이미지를 base64로 변환하여 데이터베이스에 저장하는 방법을 시도했습니다. 그러나 이러한 방식은 이미지 로딩 속도가 느려서 MySQL로 전환한 의미가 퇴색되었습니다. 이후 AWS S3 Bucket으로 이미지 저장 방식을 전환했습니다. S3는 대용량 파일을 빠르고 안정적으로 저장하고 로드할 수 있는 서비스로, 이미지 로딩 속도가 현저히 개선되었습니다.
이러저러해서 잘 해결했습니다.
현재 레포지토리 패턴을 사용하여 데이터 관리를 하고 있지만, 아직 로컬과 리모트 데이터를 구분하여 가져오고 있지 않습니다. 이를 해결하기 위해 ROOM 데이터베이스를 도입할 예정입니다. ROOM 데이터베이스를 적용하면 데이터를 로컬에서 더 빠르게 불러올 수 있어, 유저 경험이 크게 개선될 것입니다. 특히 네트워크 연결이 불안정한 상황에서도 원활한 데이터 제공이 가능해집니다.
자체 채팅 기능 구현의 한계로 인해 카카오톡 오픈채팅을 유도하는 방식으로 사용하고 있습니다. 개발 시간 및 리소스 문제로 외부 채팅 서비스를 선택했지만, 이는 사용자가 다른 서비스로 이탈하는 문제를 일으킬 수 있습니다. 타 서비스 이탈 문제를 해결하기 위해 향후 자체 채팅 기능을 직접 구현하는 방식을 고려하고 있습니다. 자체 채팅 기능을 통해 서비스 내에서 사용자 간 원활히 소통할 수 있는 방안을 탐색 중입니다.
-
이 레포지토리를 클론합니다.
git clone https://github.com/APP-Android2/FinalProject-modigm.git
-
Android Studio에서 프로젝트를 엽니다.
-
필요한 API 키를 local.properties 파일에 추가합니다.
-
프로젝트를 빌드하고, 에뮬레이터 또는 실제 기기에서 실행합니다.
다음 링크에서 어플리케이션을 다운로드합니다.
- 로그인
- 홈 화면
- 글 작성
- 글 수정
- 알림
- 회원가입
- Firebase Authentication 관련
- 프로필
- 설정