서론
LDF 프로젝트는 기존에 안드로이드만 지원했던 LDF 앱(가명)을 Android, iOS, Web(PC)에서 지원하면서 다양한 기능을 추가하는 앱 리뉴얼 프로젝트입니다.
LDF 앱이란 제가 고등학교 1학년 때(2018년 12월 22일) Android Studio와 JSP로 만들고 출시한 안드로이드 앱이고 현재까지 운영되고 있습니다. 가명을 사용하는 이유는 제 앱을 인터넷에 검색해 볼 수 있는 유저 분들에게 블로그 글을 노출시키지 않고 싶어서입니다. (리뉴얼 버전 개발의 상세 정보를 공개하고 싶지 않음)
아래는 기존 LDF 앱(안드로이드)의 통계입니다.
앱 사용자: 2.51만 명
활성 앱 사용자(현재): 2.2천 명
앱 회원가입 유저: 1.27만 명
총 일기장 작성: 12.42만 개
기존의 LDF 앱은 고등학교 1학년 때 Android Studio와 백엔드 관련 지식을 학습하면서 만든 첫 앱이었습니다.
출시 이후 LDF 앱의 타겟이 워낙 마이너 해서 그런지 생각보다 많은 유저와 반응을 얻게 되었습니다. 하지만 유저가 생기자 앱의 부족한 부분들이 서서히 드러났고, 심각한 문제들도 여럿 있었습니다. 구조 설계를 제대로 안 잡고 학습용으로 막 개발한 것이 화두였습니다.
큰 예로, 처음엔 유저의 비밀번호를 평문으로 저장했지만 출시 이후 유저가 생기자 실제 서비스의 책임을 느끼고 비밀번호를 암호화해서 저장하도록 마이그레이션 했습니다.
이렇게 문제들을 조금씩 개선하면서 총 154번의 업데이트를 배포했습니다.
하지만 154번의 업데이트로도 개선할 수 없는 고질적인 문제점이 있습니다.
바로 구조적인 문제인데, Android Studio로 빌드한 앱은 결코 iOS(아이폰)을 지원할 수 없다는 점입니다.
유저가 늘어나고 아이폰을 지원해 달라는 이메일을 지금까지 100 통도 넘게 받았습니다.
물론 이것만이 리뉴얼 버전 개발을 결심하게 된 계기는 아닙니다. 기존의 LDF 앱은 백엔드가 무려 JSP에서 API처럼 .json을 보내주고 그것으로 통신하는 형식입니다. 이 방법은 잘 쓰이는 방식도 아니고 너무 레거시한 방법입니다. 이대로면 유지보수가 너무 어렵고 새로운 기능을 확장하기도 힘듭니다.
따라서, 다양한 추가기능을 포함해서 아이폰과 안드로이드 그리고 웹(PC)까지 지원하는 LDF의 리뉴얼 버전을 개발하기로 했습니다.
기존 LDF 앱의 주요 기능과 추가될 것
기존 LDF 앱엔 다음과 같은 중요 기능이 있습니다:
- 꿈 일기장 작성(CRUD)
- 자각몽 강좌와 단어 사전
- 자각몽 후기 게시판 (간단한 커뮤니티 기능)
- 모두의 일기장 (간단한 커뮤니티 기능)
- 부가기능 (알람, 센서 등을 활용한 네이티브 기능)
- 튜토리얼 가이드
그리고, 리뉴얼할 LDF 앱엔 다음과 같은 중요 기능과 화면을 추가할 것입니다:
- 로그인 화면 (소셜 로그인과 ID/PWD 찾기 등)
- 일기장 화면 (카테고리, 태그 등 편의성 기능 다수 + AI 기능 다수)
- 꿈 강좌 / 단어사전 화면 (댓글, Q&A등이 가능한 커뮤니티 기능 포함)
- 부가기능 화면 (기존 LDF의 모든 기능 그대로)
- 설정 화면 (글꼴 설정 등 편의성 기능 다수)
- 홈 화면
- 프로필 화면 (작성한 모든 게시글, 댓글 등 확인 기능과 기본적인 커뮤니티 프로필 기능)
- 커뮤니티 화면 (북마크, 좋아요, 댓글과 답글 등 주요 커뮤니티 기능 모두 포함)
기존 LDF 앱의 스택은 다음과 같습니다:
- Android Studio
- JSP
- MySQL
- Cafe24 호스팅
리뉴얼할 LDF 앱의 스택은 다음과 같습니다:
- React
- Next.js
- React Native
- Spring Boot
- MySQL
- AWS
현재까지의 개발 상황
2024년 8월 3일부터 개발을 시작했습니다. React에 능숙한 큰 누나와 협업하기로 했습니다.
저의 주요 파트는 React Native와 백엔드(Spring Boot, MySQL, 인프라)입니다. Spring Boot에 능숙한 큰 누나의 남편(매형)과도 협업하기로 했습니다. 기존 LDF앱은 1인 개발이었지만 리뉴얼 앱은 3인 개발이라서 조금이나마 수월할 것 같습니다.
먼저 저의 주요 파트가 React가 아니더라도 앱의 모든 부분에 관여하고 협업할 필요가 있었습니다. 따라서 먼저 JavaScript를 학습했습니다. JavaScript는 여러 곳에서 많이 쓰이고 다뤄본 적이 적지 않아서 기본적인 것들을 학습하는 데에 오랜 시간이 걸리진 않았습니다.
이렇게 React와 React Native도 차례대로 공부했습니다. React Docs의 자습서에서 연습용 프로젝트인 Tic-Tac-Toe를 구현했습니다. 학습하다가 React docs에서 잘못된 부분을 발견해서 docs에 기여도 해봤습니다. (issue)
프론트 기술들을 학습하면서 느낀 점은, 이전에 C++로 알고리즘 공부를 해서 그런지 확실히 유연한 느낌입니다.
그리고 중간에 MongoDB와 MySQL 중에 어떤 DB를 채택해야 할지에 대한 회의도 했습니다. 전통적인 RDBMS와 NoSQL에 대한 고민인데, 저는 MongoDB가 훨씬 유연하고 확장성이 용이하다고 생각해서 지금 같은 스타트업 프로젝트에 적합하다고 생각했습니다. 특히 이후 기능에 대한 확장 가능성이 많은 LDF 앱에 적합하다는 생각이 들었고 이런 것들을 MySQL로 처리하면 이후 구조가 너무 복잡해질 것 같았습니다. MongoDB가 ACID 원칙을 위배한다는 선입견이 인터넷에 있던데 이것이 잘못된 정보인 것도 알게 되었습니다. 그래서 처음에는 MongoDB에 손을 들었으나, 이후 "현재 구조에서 MySQL도 충분히 복잡하지 않게 설계 가능하고, RDBMS처럼 체계적인 틀이 있는 편이 낫고 확장 용이성을 위해 NoSQL을 채택하는 것은 리스크가 있다."는 팀원의 주장에 설득되어 MySQL을 최종 채택했습니다.
이후 앱에 필요한 모든 프레임워크를 세팅하고, 디자인하고, 기능 정립, DB/구조 설계 등을 하며 아직 프로젝트는 시작 단계에 있습니다.
'개발 프로젝트' 카테고리의 다른 글
AI 산타 프로젝트 배포 🎁 (0) | 2023.12.12 |
---|---|
AI 신고식; 판사·경찰 봇 (0) | 2023.07.05 |
간단히 만든 스팀 온라인 체커. (0) | 2021.08.21 |
어몽어스 Translators (0) | 2020.08.15 |
findmask : 주변 공적 마스크 판매처 정보 사이트 (0) | 2020.05.16 |