MyAR
👀 Overview
한줄 소개 | 위치 기반 서비스를 통한 AR 다이어리 |
진행기간 | 2022.03.28 ~ 2022.11.28 |
Skills | Gson, Retrofit2, Google Map SDK, Coroutine, AR SDK, Multi Module, Flow |
팀구성 | Android 2, AR 1, Spring 2 |
❓ 개발 의도 및 개발 목표
기획 의도
사람들은 어떠한 장소를 방문할 때 자신의 흔적을 남기고 싶어합니다.
그렇게 유적지나 문화재에 이름을 쓰거나 남산과 같은 관광명소에 자물쇠를 걸기도 합니다.
하지만 이러한 행위들은 유적지나 문화재를 손상시키거나 자연을 훼손하기도 하기 때문에 이를 보호하고자 기획하게 되었습니다.
개발 목표
AR 캐릭터, 방명록, 타임캡슐 등의 기능을 이용하여 사용자가 보다 즐거운 여행 추억을 남길 수 있는 것이 목적입니다.
또한, 다음 2가지의 목표를 두며 프로젝트를 진행했습니다.
- 완성도 있는 애플리케이션을 개발하여 개발자로서의 기술적, 사업적 능력을 향상시킴
- AR이 접목된 여행 어플리케이션의 비지니스적 가치를 가시화함
🍀 서비스 내용
여행을 가서 유적지, 문화재에 이름을 쓰거나 관광명소에 자물쇠를 거는 방법은 역사를 훼손하는 행위입니다.
따라서 AR 기술을 활용하여 자연환경을 해치지 않는 방법으로 가상현실에 자신의 흔적을 남기는 기능을 제공합니다.
특별한 장소에 방문했을 때 AR을 이용한 기록(방명록, 타임캡슐)을 남기고, 다른 사람이 남긴 발자취를 시간대별로 확인할 수 있는 기능을 제공하며, 남긴 기록은 언제든 다시 확인하며 추억을 되새길수 있습니다.
여행 중 경험해보지 못한 장소에 방문했을 때, 다른 사람들이 남긴 AR 여행 기록을 참고하여 여행 계획을 세우는 기능을 제공합니다.
크게 다음의 3가지 주요기능을 가지고 있습니다.
- 방명록 : 타인과 공유할 수 있는 방명록 작성
- 타임캡슐 : 특정 기간이 지난 이후 다시 열람할 수 있는 타임캡슐 기능
- 일기장 : 원하는 장소에 개인 일기장 작성
🛠 기술 스택
- Retrofit2
- 서버로부터 데이터를 효율적으로 불러오기 위해 사용됨
- Gson
- 네트워크 통신 시 받아오는 데이터를 Gson으로 데이터를 파싱
- Google Map SDK
- Google Map을 통해 다이어리 마커 표시와 지도 표시를 해주며, 경로를 표현해 준다.
- Coroutine
- 데이터 호출의 비동기 처리를 위해 사용됨
- Flow
- 데이터 변화를 감지하고 뷰에 적용하기 위해 사용됨
- Multi Module
- Profile 부분을 멀티모듈로 분리해 Unity에서 개발된 AR이 프로필 화면을 호출 할 수 있도록
- 또, 안드로이드에서 프로필을 호출할 수 있도록 모듈로 분리해 관리함
- Hilt
🖥 개발 내용
Splash & Login
- Splash
- Splash Activity를 활용해 생동감 있는 애니메이션을 주었음
- TedPermission을 활용해 앱에 필요한 권한을 인가받는다.
- 카메라 활용 및 좌표 권한
- Kakao OAuth Login
- Kakao SDK를 활용해 kakao OAuth Login을 구현함
Main - Map
- Google Map SDK를 활용해 적용함
Profile
- 유저 프로필 정보 로드
- 유저 프로필 변경
- 프로필 편집 버튼 클릭 시 전환되며, 적용할 수 있다.
- 친구 및 좋아요 리스트로 이동
My Diary
- RecyclerView Grid vs. Linear
- RecyclerView와 LinearView를 바꿀 필요가 있기에 layoutManager를 변경하는 방식으로 구현함
Like & friend List
- TabLayout & ViewPager2
- TabLayout과 ViewPager를 TabLayoutMediator로 연결시켜 동작하도록 함
Create New Diary
- Multi Module로 따로 분리함
- 해당 프로젝트를 설계할 때
registerforactivityresult
의 개념이 부족했다. - 그래서 Unity에서 데이터를 받아와 이를 원래 activity로 가져오는 작업을 했어야 했지만,
- Unity에서 데이터를 담아 새 Activity를 호출하는 방식으로 구현하게 되었다.
- 해당 프로젝트를 설계할 때
- Select Fragment
- 마커를 선택해 정보를 다음 화면으로 전달해준다.
- 이전 카메라에서 받아온 정보와 함께 전달
- 방명록, 타임캡슐, 일기 작성 페이지로 이동한다.
- 마커를 선택해 정보를 다음 화면으로 전달해준다.
- 방명록, 타임캡슐, 일기 작성 페이지
- 양방향 데이터 바인딩으로 텍스트 입력 및 버튼 기능들을 적절히 구현함
📈 성장 경험
- 한이음 공모전에 참여했던 프로젝트이며, 팀장의 역할을 맡고 동시에 안드로이드 개발을 진행해왔다.
- 매주 개발 마감 기한에 시달리며, 전반적인 프로젝트 진행 상황에 대해서도 커버를 치려고 하다보니 코드의 부족한 점이 보인다.
- 즉, 네이밍 컨벤션이나 규칙이 일관되지 않고 습관이 들여지지 않다는 것을 잘 보여준 것 같다.
- 또한 설계가 탄탄하지 않기에 여러번 구조를 변경했었다.
- 초기 설계의 중요성과 현재 내 개발 습관의 문제점들을 볼 수 있는 프로젝트이다.
- 이 프로젝트에서 팀장의 역할을 맡으면서 안드로이드 개발보다 해당 역할에서 더 많이 얻었던 것 같다.
- 프로젝트의 설계 단계에서는 큰 무리없이 잘 진행되어왔다.
- 시장조사, 요구사항 정의, 플로우 차트, 와이어프레임, UI 제작 등까지 매주 회의록 준비 및 충분한 회의시간 덕에 예상한 기간동안 잘 마무리 해왔다.
- 하지만, 실 개발에 들어가서는 타 프로젝트를 더 진행하면서 내 업무에 지장이 가기 시작했다.
- 개발은 괜찮지만, 프로젝트를 진행하고 관리하는데 있어 무리가 있었다.
- 타 개발 파트가 충분히 진행되고 있는지, 또 같이 안드로이드 개발을 하는 분과 소통을 통해 머지를 해야하기도, 매주 회의의 준비 등 다양한 일들을 진행하지 못했다.
- 즉, 팀장의 능력 부족이 해당 프로젝트의 실패를 야기한 것이다.
- 상당히 아쉬움을 가지고 있기에 앞으로의 프로젝트를 진행함에 있어 똑같은 실수를 하지 않게끔 이를 정리해둔다.
- 프로젝트의 설계 단계에서는 큰 무리없이 잘 진행되어왔다.
📱 서비스 화면