-
Notifications
You must be signed in to change notification settings - Fork 3
2주차 스프린트 & 데일리 스크럼 & 회고
- 홈 화면에 필요한 위치 좌표 기능 구현하기 - 경현
- 홈 화면에 필요한 지도 구현하기 - 지민
- 검색 화면 중 장소 검색 화면에 필요한 기능 구현하기 - 시진
- 검색 화면 중 경로 검색 화면에 필요한 기능 구현하기 - 종성
- 시진
- 목적 : 장소 검색을 위한 화면 구현
- 시나리오 진행에 필요한 값 : User의 현재 위치 좌표, 즐겨찾기 데이터
- 시나리오 진행에 필요한 조건 : 장소 검색 API, 지도 화면
- 시노리오 완료 시 보장하는 결과 : 특정 장소에 대한 정보를 가지고 지도 화면으로 이동
- 종성
- 목적: 기능 구현에 필요한 API 처리 로직 확인 및 API 데이터가 원하는 결과대로 가공되었는지 확인
- 시나리오 진행에 필요한 값: 출발지와 도착지
- 시나리오 진행에 필요한 조건: 낮 시간의 API 리턴 값과 막차 시간의 API 리턴 값
- 시나리오 완료 시 보장하는 결과: 낮 시간에 조회 한 API 데이터를 이용해서 예측한 최대 출발, 최소 도착 결괏값이 막차 시간에 조회 한 API 데이터와 큰 차이가 없어야 한다.
- 지민
- 목적 : 장소 및 경로 검색을 위한 지도 구현
- 시나리오 진행에 필요한 값 : 해당 좌표의 정보
- 시나리오 진행에 필요한 조건 : 지도 sdk, 홈 화면 기본 ui
- 시나리오 완료 시 보장하는 결과 : 지도 화면, 해당 위치의 정보를 나타내는 패널을 보여줌, 즐겨찾기 위치 확인 가능
- 경현
- 목적: User의 이동에 따른 지도 SDK 변화 확인
- 필요한 값: User의 현재 위치 좌표
- 조건: 지도 SDK, 홈 화면 기본 UI
- 결과: User가 이동하면 지도 상의 마커도 함께 이동
https://docs.google.com/spreadsheets/d/10tnF22pZwpyax79YpPzYxmu4cH22HNbalMR9cV58AiE/edit?usp=sharing
- 개발을 당장 시작할 수 있도록 프로젝트의 기본 뼈대 만들기
ex) 멀티 모듈, 지도 SDK, 의존성 추가 - 깃허브 Repository에 Projects 만들어서 그 주에 작업할 스프린트 내용 넣기 https://github.com/orgs/boostcampwm-2022/projects/18/views/1
- 그룹프로젝트 가이드에서 제시하는 백로그 참고하기 https://www.notion.so/boostcamp-wm/7725cf9ed3b84ce698ae2c1242ba3951
- 스프린트 작업 시작하기
- 오후 7시 이후 멘토님 미팅
- 김시진 - 4시에 잤다.
- 이종성 - 점심 메뉴가 기대된다.
- 이지민 - 주말에 체력이 보충되었다.
- 조경현 - 아침에 단체 커피 주문이 들어와서 15분을 기다렸다.
- 금요일 재택근무
-> 슬랙에 올라온 대로 진행 - 우리는 말을 놓아야 할까요?
-> 그룹프로젝트 동안은 존댓말을 하고, 끝나고 놓기 - 저녁도 구내식당을 이용하는 건 어떤가요? ( 7시에 닫기 때문에 6시에 가야 해요 )
https://naver.me/xv09lXh9
https://naver.me/F5bWKlVj
-> 구내식당을 기본으로 하되, 다른 것을 먹고 싶으면 그것을 먹으러 가기
- 멘토 님 미팅
- Project 구조 설정하기
- T Map SDK 확인
- Github Projects에 작업할 내용 설정하기
- 김시진 - 화면 그리고, API 연결을 위한 밑작업 시작
- 이종성 - T MAP 경로 탐색 API를 이용해서 경로 검색 화면에 표현할 데이터 처리하기
- 이지민 - T Map POI 해결, PlzStop 프로젝트에 지도 sdk 설치 및 홈 화면 ui 구현, 현재 위치 기반 장소 정보 기능 제공하는지 찾아보기
- 조경현 - T Map POI 해결, 현재 위치에 마커 표시 기능 구현
- 김시진 - Jetpack Compose를 생각하며 Compose Coffee 섭취중
- 이종성 - 계속 꿈에서도 오피스에서 코딩을 하고 있다
- 이지민 - 오늘 점심먹고 은행갈 수도 있음. 오늘 안가면 내일 은행 갈 것임.
- 조경현 - 아무 생각이 없다
- 22.11.19.토 쿠팡 코딩테스트가 있다.
###어제 한 일
- 김시진 - Clean Archi + Multi Module에 의거하여 장소 정보 네트워크로부터 가져오기 구현
- 이종성 - 각 모듈에 Hilt 모듈 생성하기, API 수신에 사용할 데이터 클래스 정의하기, 데이터를 표현할 UI 만들기
- 이지민 - Tmap POI 문제 해결, LongClick시 마커 표시 구현, 이전 마커 지우기 구현
- 조경현 - T Map POI 해결, 현재 위치에 마커 표시 기능 구현
- 김시진 - Recyclerview, Databinding 통해 장소리스트 구현하기.
- 이종성 - CallAdapterFactory 만들기, API를 수신하고 정의한 데이터 클래스로 변환되는지 확인하기, 최대 출발, 최소 도착 정렬 로직 만들기
- 이지민 - LongClick시 장소 정보 패널 띄우기, 장소 정보 패널 데이터 찾기, 현위치 TrackingMode 없이 구현하기
- 조경현 - 앱 시작시 현 위치에 마커 표시, 실시간 유저 위치 추적 기능 구현
- 김시진 - 벌써 이번주 반틈지남 ㅅㄱ …
- 이종성 - 집의 개발 환경이 컴포트 존에서 벗어나게 되었다.
- 이지민 - 자도자도 졸립니다. 만성 피로 물러가~~
- 조경현 - 살려주세요
Issue에 해당하는 작업 양이 너무 작은데 어떻게 해야 할까요? → 1 Issue 1 Story로 하지 않고, 작업 양에 따라 여러 Story를 합치거나, 분할해도 된다.
김시진 - 평소보다 힘들다. 사무실이 좀 답답하다.
주말에 만나기로 했던 약속은 Sprint4 이후 하는 걸로
즐겨찾기 기능은 어떤 것을 저장할지 정한 후에 구현하기 위해 나중으로 미루기
- 김시진 - 주변 장소 탐색 기능을 구현했고, PR을 올렸다.
- 이종성 - 경로 탐색 API 데이터를 수신하고, domain 모듈에서 사용할 데이터로 변환했다.
- 이지민 - Custom Tracking 모듈(현재 위치 탐색 관련 모듈)을 구현하고, 정보 패널을 구현 중이다.
- 조경현 - Custom Tracking 모듈 구현, 위치 권한 설정 관련 학습 후 코드 구현을 했다.
- 김시진 - 다른 화면에 데이터 전달하기. 구현에 사용했던 개념 학습하기, 데모 준비
- 이종성 - 코드 리뷰, 받아온 경로 데이터를 UI에 보여주기, 최대 출발, 최소 도착 기준 만들기
- 이지민 - 장소 정보 패널 구현, 즐겨 찾기 버튼 UI 구현, 코드 리뷰
- 조경현 - Custom Tracking 모듈에서 사용자가 화면을 드래그하면 카메라가 현재 위치로 돌아오지 않도록 수정하기
- 김시진 - 다음 주에 일정이 걱정된다.
- 이종성 - 수능 영어 듣기 시간에 비행기가 착륙하지 못하는데, 착륙하지 못하는 비행기를 타보고 싶다.
- 이지민 - 내일 재택이라 행복하다.
- 조경현 - 9시에 퇴근하고 싶다.
- 종성님은 왜 PR을 아직도 못 올리고 있는가
버스, 지하철마다 API URL 주소가 다르다.
Hilt로 Retrofit을 생성할 때, baseUrl을 유동적으로 넣어주려면 어떻게 해야하는지 학습 필요
-> API 함수에서 post 요청 시 파라미터로 URL 넘겨주기
지하철은 서울로 한정 되지만, 버스는 경기도 버스도 있기 때문에 해당 버스가 서울 버스인지 경기도 버스인지 확인하는 로직을 추가하고 어떤 API 서버에서 막차 시간을 가져올지 확인하는 로직을 추가해야한다.
T_MAP API 데이터 받아오기 -> 막차 시간 조회에 필요한 버스, 지하철 ID 값 알아내기 -> 막차 시간 데이터 받아오기 -> 3가지 데이터를 조합해서 Presentation 모듈에서 사용할 데이터 생성 후 정렬하기
- 학습과 구현의 조율
종성님은 선 학습 후 적용.
시진 님은 선 적용 후 학습.
둘의 스타일을 잘 조율해서 하면, 구현와 학습을 모두 잡을 수 있을 것 같다.
-> Sprint3에는 선 적용 후 학습으로 진행해보기
- 오피스 사용 목적 재고
종성님의 목적은 집이라는 컴포트 존을 벗어나는 것이였는데, 오피스에서 2주 동안하면서 집이 컴포트 존이 아니게 되었다.
평소에는 몰랐는데, 오피스에서 작업핟다보니 책상과 의자, 모니터, 데스크탑 성능의 중요성을 깨달았다.
오피스 사용의 장점을 살리고, 팀원 들의 피로도를 낮출 수 있도록 하고 싶다.
@Sprint3 : 10 to 7 / 월 ~ 목
오피스에서 바로 이야기 할 수 있다보니, 발생한 문제에 대한 기록이 되고 있지 않다.
-> 기록하는 이유는 해당 코드를 작성하지 않은 다른 팀원이 코드를 이어서 작성할 때, 같은 실수를 반복하지 않고 학습하는 시간을 줄이기 위해서다.
-> 문제가 발생하면 Issue 혹은 Slack을 이용하자
- 데일리 스크럼 방식 재고
데일리 스크럼에 무엇을 할지 다시 한 번 정하고 가면 좋을 것 같다.
일정 관리나 컨디션 확인보다는, 우리는 개발자이므로 코드나 기술적인 얘기를 하면 좋지 않을까?
-> 어제 한 일( 기능을 구현하면서 어떤 기술을 학습하고 사용했는지 )을 말하고, 다른 팀원이 해당 내용에 대해 궁금하다면 질문
-> 코드 쉐어 시간이 있으면 좋겠다. 코드 리뷰 PR을 하고 있지만, PR이 올라오기 전에는 어떤 작업을 하고 있는지 파악할 수 없다. 코드 쉐어 시간을 가져서, 각자 작업한 내용을 파악할 수 있도록 하자
-> 데일리 스크럼 내용은 그룹 노션이 아닌 Wiki에 정리하기
4. 주말에 스프린트 계획 회의를 짜기 위한 이번 주 일정과 작업 정리
경현 님 -> Sprint2 작업 모두 완료, 이번 주말에는 작업을 합치면서 생긴 코드들 정리할 계획
시진 님 -> Sprint2 작업 모두 완료, 화면 이동 간에 전달되는 데이터 처리할 계획, T MAP 함수에 대한 확인이 필요
지민 님 -> Sprint2 즐겨찾기 외 모두 완료, T MAP 내부 코드를 좀 더 확인할 계획
주말 동안에 다음주 월요일 스프린트 계획 회의에 필요한 내용 정리해서 오기
다음주 월요일 스프린트 계획에 추가로 할 내용
-> 쉐어 프로그래밍으로 앞으로의 스프린트 작업에 필요한 코드들 미리 작성해두기
-> Code With Me로 진행
저녁 8시 30분에 Develop 브랜치에 작업한 내용 합치기
[8:38] https://boostcampwm7-me.slack.com/archives/C047S8BKYU9/p1668987533894309
-
피어 세션 정리
- 키워드 1. data 모듈은 순수 코틀린 모듈로 해야할까? 혹은 안드로이드 의존성이 있는 모듈로 해야할까?
개발 과정에서 필요하면 data 모듈이 context 의존성을 가져도 된다.
비트맵을 byteBuffer, byteArray로 변환해서 data 모듈에 전달하면, android 의존성이 있는 bitmap을 data 모듈에서 사용할 필요가 없다.- 키워드2. Activities vs Fragments 뭐가 좋을까?
백스택이 깊어질 수 있는 상황에서 activity로 구현되어 있다면 Activity가 백스택에 많이 쌓이는데 Activity는 Fragment보다 무거워서, 가벼워서 Fragment를 사용한다.
google io backstack 지원 관련 영상이 있을까?- 키워드 3. Fragment가 Activity보다 가벼운 이유는 무엇일까?
Fragment는 Context가 없는데, Activity보다 제공 되는 기능이 적어서 상속받는 것이 적기 때문에 메모리에서 차지하는 크기가 적은 것 아닐까?
-
키워드 4. View, Fragment는 어떤 차이가 있을까?
-
키워드 5. 지도 객체를 어디에 둬야 할까?
lifeCycleScope를 사용해서 Framgent가 종료되면 CoroutineScope도 종료되도록 할 수 있다.
- 키워드 6. 프로젝트 디자인 패턴, 선정 기준은? MVC vs MVP vs MVVM ( vs MVI? )
MVI: Model View Intent
ViewModel 대신에 Model이랑 View 사이에 Intent로 상호작용한다.
MVP -> View와 Presenter 사이에 소통하는 기능을 추가하려면 Contract 인터페이스에 매번 추가해야 하는데, 이것이 번거롭다.
View는 왜 Presenter를 호출하면 안 되는 걸까?
MVP, MVVM 둘다 싫은 이유 : View는 왜 Presenter를 호출하면 안 될까?
ViewModel, Presenter는 다른 UI에 붙여도 사용할 수 있어야 한다.
UI가 ViewModel, Presenter를 호출해서 ViewModel, Presenter 내부 데이터가 변경되면, 다른 UI에서 기존과 동일하게 동작할 수 없을 것이다.- 키워드 7. 클린 아키텍처
예외 처리는 Repository에서 하기, Domain은 계산 처리하기
보조 서버는 DataSource에서 관리하기- 키워드 8. ViewModelScope가 어느 시점에 종료되는가?
Fragment의 onDestory()가 호출되서 ViewModle이 사라질 때 종료된다.
화면 전환 될 떄는 onDestroyView()까지만 호출되고, onDestroy()는 호출되지 않는다. 그래서 화면 전환 시 ViewModelScope가 종료되지 않는다.
ViewModel이 속한 Activity 혹은 Fragment에서 onDestroyView 오버라이딩해서 ViewModel의 ViewModelScope을 정지 시키는 함수 호출하도록 하기
Fragment의 Flow의 collect를 호출하는 방법이 가장 좋다.
ViewModelScope를 정지 해야 하는 이유는, 무한 루프를 돌면서 계속 호출 시켜야 하는 기능이 필요할 때, 이것을 멈출 방법이 있기 때문이다.- 키워드 9. 위치 권한 요청을 어떻게 처리하시나요?
Android Studio Indent RainBow 플러그인 설치하기