JIGGAG

7월 한달동안 로그

2020년 8월 3일

7/26 ~ 7/31

마이크로 서비스

  • 모놀리식 -> 마이크로서비스
  • 8가지: 안정성, 신뢰성, 확장성, 내결합성, 성능, 모니터링, 문서화, 재난대비
  • 엔드포인트를 통해 들어온 요청흐름과 이에 대한 종속성을 그림으로 그려서 장애 지점을 예측
  • Node.js로 구현하는 마이크로서비스
  • 마이크로서비스 구축과 운영을 읽고 나서

iOS 리젝

  • 회원가입에 본인인증이 필수인 상황
  • iOS 리뷰어는 본인인증 불가 => 리젝
  • Q. 본인인증을 꼭 해야만 한다면 리뷰어가 인증번호 받을 수 있는 방법?

7/19 ~ 7/25

가벼운 마음으로

  • 이번주가 너무 힘들었기에 가볍게 쉬어가자는 마음으로
  • 점프 투 파이썬을 빌려왔다
  • 타입스크립트를 이어가고 싶었는데 가볍게 읽어가면서 숨고르기가 필요할 것 같아 선택한 파이썬
  • 지난번 Django로 프로젝트를 진행했었는데 너무 맨땅에 헤딩하기였다고 생각
  • 언어는 다르지만 하고자 하는건 똑같으니깐
  • 가볍게 읽어갈 수 있는게 바로 파이썬의 장점이지 않을까
  • 가볍게 읽은 만큼 가볍게 실습을 해보고 싶은데 무엇을

안드로이드

  • iOS보다 수월했던 한가지
  • 스토어 심사 과정
  • 그러나 최근에 정책이 업데이트 되면서 안드로이드도 조금 까다로워진듯하다
  • 우선 가장 크게 앱 액세스 권한을 기입해야한다는것
  • iOS는 앱 심사 정보로 로그인이 필요하면 테스트 계정을 적어두지만 안드로이드는 이 과정이 없었는데 이번에 추가되었다
  • 하필 이 타이밍에...

타입스크립트

  • 본격적으로 공부한적이 없었나
  • 최근에 주말마다 조금이라도 공부하러 가는게 재미
  • 기본적인 타입만 알아가는데도 너무 많다

firebase

  • Dynamic link: 앱 설치 유무에 따라 스토어 또는 앱 실행
  • Push, Dynamic link, analytics 한곳에서 처리

7/12 ~ 7/18

ref

  • forwardRef

리팩터링 자바스크립트

  • 레거시 -> 테스트 코드 작성 -> 리팩터링

UI UX

  • 앱스토어 상위 앱
  • 이번에 신규 프로젝트 진행하면서 비슷한 업종의 앱을 그냥 다운받았다
  • 그리고 멍
  • UI만으로도 충격
  • 누군가가 구현한 화면
  • 그럼 나도 할 수 있다

firebase v6

  • react-native-firebase v5에서 v6으로 마이그레이션
  • 공식문서에도 마이그레이션 방법이 친절하게 나와있다
  • 사용하는건 analytics, messaging
  • AOS부터 깔끔하게 해결
  • debugView로 이벤트 로그도 확인하고 테스트 푸시도 완료
  • 근데 지금 iOS podfile이 꼬인듯

Starter Pack

  • RN 0.63 업데이트에 이어 typescript를 적용하려고하는데
  • 에러, 왜? => babel plugin 무언가가 충돌나는것 같다

RN 0.63

  • RN 버전 업데이트 진행
  • 기본으로 지원하는 flipper 버전도 업데이트 되었고, 변경된 LogBox도 내장되었다

Push navigation

  • 앱이 background/foreground/closed 상태에서 푸시를 받고
  • 그리고 푸시를 통해 앱을 진입하는 경우 네비게이션
  • navigation 분기가 없는 경우에는 이미 해당 화면이 navigation에 등록되어있어서 단순하게 호출하여 해결
  • 그러나 문제는 인증 또는 타입별로 navigation이 다르게 구성되는 경우
  • 이때 등록되어있지 않은 화면을 호출하게되면 당연히 오류
  • 분기되어있는 navigation 초기 화면에서 푸시를 통해 들어온 경우 이벤트를 제어하고자 Context 사용
  • Consumer와 useContext를 사용해 한번에 전달

7/5 ~ 7/11

채널톡

  • RN 0.62 미지원 난감...
  • flipper도 미지원… => 문서에는 flipper 삭제하면 된다고 하는데
  • cocoapod 사용 하는데 pod install 하면 오류 발생 => 해당 pod을 따라 들어가보면 Images.xcassetsAssets.car로 이름이 다르다
  • sed -i '' 's/Assets.car/Images.xcassets/' ios/omf.xcodeproj/project.pbxproj 로 해당 파일에 저 부분을 치환해주기는 했는데 임시방편일뿐
ld: Could not find or use auto-linked library 'swiftCoreMIDI'
ld: symbol(s) not found for architecture x86_64
  • 처음보는 swift를 찾지못해 나타나는 에러로 RN은 objective-C로 되어있으니 당연히 swift파일이 없는대? => 있는척 swift파일을 하나 만들어만 주고 넘어가본다
  • 채널톡 문서
  • (알고보니 문서에 swift파일도 만들고 설정 변경도 써있다)
  • 그리고 그냥 하는데… 왜되지? => flipper plugin를 위해 추가했던 react-native-flipper 라이브러리가 충돌이 나는것 같다
  • 아닌데? flipper도 plugin도 모두 잘된다 속았다

복습 - 리팩터링 2판

  • 비슷해 보이는 걸 중복되는 코드로 만들고 나서 분리
  • 너무 분리하려고 하다가 이런 것도 분리해야하나 생각이 들면 원복 후 다시 생각
  • 기능 추가를 하고 싶을때 리팩터링
  • 함수 추출 + 인라인 변수 제거 => 지역변수 제거로 유효범위 감소
  • 생성자를 한번 더 감싸는 팩토리 패턴으로 클래스 변환
  • 리팩터링 전에 기존에 있던 버그도 그대로 두고 리팩터링만 작업 => 버그, 성능 개선은 다른 작업
  • 필요하지 않는 주석도 리팩터링을 통해 코드로 내재
  • 테스트 코드 작성 후 리팩터링
  • 함수 의존성 분리 + 여러개의 매개변수 대신 객체 형태로 전달
  • 플래그 별로 switch-case 하기보다는 각각의 플래그를 나타내는 함수를 만들어서 사용

7/1 - 7/4

복습

  • let 로컬 스코프 => var 호이스팅 해결
  • 쉐도우 DOM => 문서 DOM은 현재 페이지 DOM이라면 쉐도우 DOM은 웹페이지 실행 중 생성된 가상 DOM으로 외부와 분리되고 스타일, 이벤트가 적용되지 않고 캡슐화 되어있음
  • 의존성 주입 DI => 내부에서 사용하려는 의존관계에 있는 특정값을 외부에서 전달해주어 사용하므로써 의존성을 낮추는 효과
  • 싱글턴 패턴 => 인스턴스를 최초 한번만 생성
  • 팩토리 패턴 => 인스턴스 생성을 캡슐화하여 사용

STAR 기법

  • Situation
    • 기존 앱 고도화
  • Task
    • A라는 기존 기능 유지보수
    • B라는 새로운 기능 추가
  • Action
    • A를 효과적으로 하기 위해 메모이제이션
    • B를 위해 RN버전 업
  • Result
    • A에서 발생하는 고객 문의 감소
    • B로 신규 고객 유치 및 유료 결제 증가
  • 처음 STAR 기법으로 작성해보았다
  • 결국 기존 앱 고도화라는 한줄에 모두 담을 수 있는 것 같은데?
  • 그동안 스토리를 알고 있는 사람이 봤을때에는 그 한줄로도 이해할 수 있지만, 그렇지 않은 사람에게는 설명과 뒷받침 되는 수치가 전달되어야한다