20220922 어싱크 스위푸투 커뮤니티 2회
RIBs : 타다 아키텍처, RIB : Router, Interactor Builder 의 약어
RIB은 필수로 들어가고 View, Presenter도 포함한다. (Presenter, 변환하는 로직 ? )
State tree를 사용한다.
RIBs 에 대해서 더 알고 싶으면 레츠스위프트2018의 강연연상이 있으~
미리배차 라는 기능을 사용하면 평가 없이 바로 진행 되는 플로우가 생김
다음 주변콜 이라는 기능을 사용하면 앞의 플로우는 같지만, 새로운 상태가 하나 생김
-> State Tree 에서 RideDroppedOff 컴포넌트안에서 하차하는 걸 관리해라 ! 라고 구현함. 나머진 알 필요 x
문제 해결을 위한 가설
TODO : 거대한 모듈 -> 책임 분리나 확장에 용이한 모듈
-> 안정적이고 확장에 유리한 모듈로 개선
이 고민을 하기에 앞서 다른 생태계에선 ?
효과 1 상태 관리 모듈 분리
-> 전반적인 버그 감소
효과 2 Middleware
효과 3 UnitTest
추가로 자랑하고 싶은 부분은
이 발표는 상태관리 모듈 분리, 유연하고 안정성 있는 상태관리 모듈 만들기 이고 아키텍쳐 발표가 아닙니다 ~
MVVM에 관한 주제로 얘기를 하실 예정
Model - View - Controller
Controller -> Model == Model Life cycle / write
Model -> Controller == Model life-cycle / read
Controller -> View == View LifeCycle / update
View -> Controller == Handle user events
Model : 데이터 상태를 관리
View : 사용자와 직접 상호작용한다.
Controller :
장점 : 각 모듈의 결합도 약화, 역할에 따른 코드 기반한 구별
단점
장점
단점
View Model -> Model == Data Binding / write
Model -> View Model == Data bindings
나머진 비슷한듯 데이터 바인딩이라는 부분이 좀 다른 느김 ~
ViewModel : 옵저버 패턴등을 사용하여 뷰 모델 사이에 연관성을 완전히 분리, (Rx or KVO 등을 활용하면 편리, 이제는 Combine)
장점
단점
좀 더 추가하자면
뷰
뷰 컨트롤러
모델
뷰 모델
기존 MVVM이 아닌 방식에서는 함수를 호출하여 비지니스 로직 실행
공유 변수 및 외부 변수가 참조되는 코드가 많아져서 동적인 코드가 다수
런타임에 동작에서 예외 케이스 다수 발생
MVVM에서는 각 모델에 뷰 모델을 통하여 비지니스 로직을 바인드
각 비지니스 로직은 모델에서 참조중인 데이터에 대해서만 태스크 수행
클로져 형태로 바인드 되어 외부 변수 참조시에 context capturing을 통한 무결성 보장
이 부분이 크다고 생각하심
누구나 3개월 ~ 6개월 배우면 코딩은 할 수 있다고 함.
연사님은 그래서, 왜 쓰는지 그런 이유에 관한 것과 철학 까지 파악하는걸 중요시 여긴다고 하심
네이버나 쿠팡에 입사하면 들을 수 있는 더 자세한 MVVM 아키텍처 강연이 3~4시간 짜리가 있다고 하네여 ㅋㅌㅋ
연사님 소개
PR 리뷰를 기반으로 한 팀 협업 문화에 진심
평범한 사람들이 팀으로 모여 비범한 결과를 내고 싶어함
개발자는 회사 비즈니스 성공을 위해 존재해야 한다고 생각
개발 문화는 회사와 팀의 성공을 위한 것이어야만 한다
연사님은 지식 아카이브로 사용하고 있다고 하심 .
신규 입사자분들도 이 훈련을 3~6개월 한다고 한다
업무와 관련된 히스토리, 의사결정, 일련의 활동등을 보관할 필요가 있다.
지라, Trello 등 칸반보드에 보관한다거나, 위키 서비스(Confluence)도 있으
노션으로 넘어가는 추세라고 함
변경사항 자체와, 이에 대한 맥락을 팀에 공유 하는 방식으로 PR 작성을 하도록 변함
PR을 단순히 코드리뷰를 위한 도구라고 생각하고 협업하면 오히려 생산성에 악영향을 미침
작성자 위주의 PR - 불친절한 설명, 맥락 부족
우성님은 머리를 크게 쓰지 않고도 리뷰할 수 있을 정도로 잘 읽히는 PR 을 지향함
(적어도 PR 제목 + 본문에 한해서는)
팀원 중에서 이 PR을 꼭 지금해야하나 이런 당위성에서 의문을 느껴 본인이 직접 자료를 찾아서 리뷰를 남긴 적이 있다. 이 부분도 PR을 요청하는 입장에서 자료를 주어야하지 않을까..?
PR에 너무 많은 내용이 있는것도 xxxx 조치아눔~ 그리고 테스트코드를 요청하는 리뷰 댓글이 많이 보였음 역시 테스트코드는 중요하다~
풀리퀘는 기본적으로 글이다. 그 중에서도 리뷰어가 읽는 요청서. 결국 잘 읽혀야 한다는 의미. (연사님은 잘 설득이 되어야 한다고 하심)
오픈소스에 기여하는 느낌으로 작성해보는걸 추천하심. RxSwift 머지된 리뷰들을 참고해보자 !
다른 추천 방법으론 스마트폰으로도 리뷰할 수 있을정도로 최대한 작고 간결하게 작성하는걸 추천. (다만 PR 특성에 따라 프로젝트 내 기반이 갖춰져 있어야 할 수도 있다)
Git - 꼭 알아둬야 할 기능들
Alfred Worflow * GitHub 알프레드에 PR을 찾는 기능이 있다고 하심
깃허브의 레이블 기능을 적극 활용 하시는 듯
정리하는 목차라고 보면 될 듯
diff
를 최소화한다. 리뷰에 방해가 안되는 선에서의 리네이밍, 리팩토링은 권장사항이나 많은 파일이 수정 혹은 추가되어 리뷰를 어렵게 만드는 변경은 별도의 PR로 작성하는 편참고 사진
추가로 테스트 코드로 확인하기 어려운 부분을 담기 !
리뷰하기 & 승인하기
비동기로 효율적으로 커뮤니케이션하기
이런 분야에 대한 지식이 없는 사람이 봐도 이해가 될 수 있게 해당 분야에 대한 내용도 적당히 작성 해주는 것도 좋은 듯 하다.
자신의 고민 내용을 기록한 노트나, 사진 등등도 첨부하여 리뷰에 올리신것도 있었음
테스트가 필요한 이유 ?
가짜 인스턴스를 만들어서 테스트를 진행하였음
이를 만들기 위해 프로토콜을 만들어서(추상화 진행) 가짜 인스턴스와 진짜 인스턴스에 채택을 시켜서 진행함.
그리고 무엇을 테스트하는지 파악을 잘 해야한다 !
테스트가 중요한 부분은 아무래도 네트워킹 쪽인듯 하다.
우리의 데이터를 전송할 때 서버가 이상하다면 ? 또는 와이파이 연결이 불안정 하다면 등 이러한 경우엔 테스트 코드를 적극 활용하는게 좋아 보였다.
연사님이 설명한 URLSession의 가짜 인스턴스를 만드는 방법은 새로 프로토콜을 정의하고, URLSessionDataTask에 해당 프로토콜을 채택하였고, URLSession에서는 해당 프로토콜의 타입을 반환하는 함수로 새로 하나 더 작성하여서 만들었다.
여기서도 중요한건 네트워킹 이후의 과정을 테스트 한다는 점이다.
URLSession, URLSessionDataTask를 테스트 하는게 아니라 네트워킹 과정 이후 처리 과정을 테스트하는 것이다.
저 클래스들은 애플이 만든거기때문에 그건 우리가 테스트 하는게 아니라고 하심.
정리하자면, 기존에 존재하는 URLSession, URLSessionDataTask를 추상화해서 Mock을 만들고, 이를 통해 completionHandler를 테스트함.