JIGGAG

6월 한달동안 로그

2021년 7월 2일

6/28 ~ 6/30

Map<String, Any>

  • 코틀린 Post Body로 Map<String, List<Int>> 이런 형태로 보내고 싶은데
  • 브릿지로 받아온 타입은 ReadableMap 이걸 toHashMap()해주니깐 타입이 Map<String, Any>이 된다
  • API request 타입은 Map<String, List<Int>>인데...
  • 어쩔 수 없이 Any인가보다 했는데???
  • Parameter type must not include a type variable or wildcard
  • toHashMap 했는데 왜 request type을 Map으로 했을까... HashMap으로 하니깐 해결

retrofit2

  • 코틀린 스터디 끝나고 RN + kotlin 사이드 프로젝트를 진행하는데 모든 로직을 코틀린으로 작성하다보니 장벽이 생각보다 높다
  • REST API 호출을 위해 retrofit2 모듈을 사용하는데 잘 풀리다가 갑자기 오류
  • Expected BEGIN_ARRAY but was BEGIN_OBJECT
  • 왜 갑자기? API가 바뀐건가? 아닌데?
  • 그냥 잊고 하루 뒤에 다시 보니 아무래도 타입은 맞는데...
  • 설마? API 인증 토큰을 임의로 알려준 값을 사용하고 있었는데 (100년짜리라 그랬는데.. 만료라니)
  • 인증 실패로 리스트가 내려오리라 예상된 포맷에 이상하고 독특한 서블렛 메세지를 보내주고 있었다
  • 바꿔주세요!
  • 근데 타입 포맷을 너무 강하게 지키는 기분은 그냥 기분일뿐일까

6/21 ~ 6/27

kotlin DSL

  • build.gradle -> build.gradle.kts
  • 맞는데 왜 안되는걸까
  • cli가 문제인걸까 안드로이드 빌드하면 되는데... 정답! cli
  • setting.gradle.kts로 바꾸고 나서 autolinking 안되는 것과 같은 이슈겠지

metro

  • RN을 하면서 metro에 대해 깊게 알아보지 않은듯
  • 팩트

6/14 ~ 6/20

serialize

  • 직렬화/역직렬화? JSON.stringify?
  • 코틀린에서 RN브릿지로 list 데이터를 넘겨주고 싶은데 promise.resolve에 안들어간다
  • string으로 보내야할까
  • 그럼 list를 JSON.stringify해서 보내볼까?
  • 그러기전에 찾아보는 직렬화
  • ...이럴수가
  • string이 아니라 WritableNativeMap으로 넣으면 되는거였다
  • 이제 build.gradle Groovy DSL을 build.gradle.kts kotlin DSL로 바꿔보려고 도전!
  • 코틀린스터디하면서 DSL을 언제 쓰지 했는데 여기서 쓸줄이야... 마이그레이션 참고 블로그

RN kotlin

  • 코틀린 스터디하면서 react-native-starter에서 java를 kotlin으로 변경했다
  • 그리고 스터디 파이널 프로젝트를 하려고 하는데...
  • 라이브러리 linking이 iOS는 잘되는데 안드로이드는 실패하고 있다
  • 오류메세지도 수상하게도 너무나도 linking 스럽다
  • 혹시나 하는 마음으로 react-native link ...
  • 정답입니다~ 에러가 나타났다
  • autolinking, warning은 스킵하더라도 너무나도 딱 떠버린 Error
  • Error: ENOENT: no such file or directory, open '.../MainApplication.java'
  • 당연한거 아닌가..? kotlin으로 바꿨는데 왜 아직도 MainApplication.java를 찾고 있는걸까
  • MainApplication.kt를 봐야하는거 아닌가?
  • (++++++ react-native.config.js에서 설정해주면 된다)

6/7 ~ 6/13

코틀린

  • 라인개발실록 코틀린의 현재와 미래
  • 코틀린을 선택한 이유 = 람다 + 적은 코드(코틀린 스터디 내내 익히 들어온)
  • 안드로이의 자바와 진짜 자바랑 다르다
  • 뭐!
  • 자바와 비슷한 무언가 = 안드로이드의 자바 => Dalvik
  • (dalvik 어디서 들어봤는데..? bugsnag에서 자주 본거같다)
  • 어쨌든 안드로이드는 Dalvik을 실행하고 자바 API를 그대로 복제한 안드로이드 플랫폼 API
  • 이게 오래된 버전의 자바를 기반으로 하고 있어서 최신 API를 사용하는데 어려움
  • 그래서 코틀린을 도입했는데
  • 어플리케이션 속도는 뭐 차이는 없지만 대용량 프로젝트에서의 컴파일 시간이 너무 느리다고 한다 ㅋㅋㅋ

앱이 삭제되다니

  • 구글 플레이스토어에서 갑자기 메일이 날라왔다
  • 앱이 리젝이라니!!!
  • 안드로이드 너마저...
  • 개인정보처리방침을 iOS만 까다롭게 처리하길래 조건으로 숨겨놨었다
  • 리젝될만하다
  • 근데 이게 아닌가?

JPA

  • 코틀린 스터디 하다가 코드 리뷰 아니도 코드 소개 받으며 JPA 읽어보기
  • 어노테이션이 너무 많았지만
  • 어노테이션을 하나 달아서 보일러플레이트를 줄여주는 좋은 느낌

brownfield

  • 브라운필드라는걸 배웠다!
  • 항상 배울 점이 많은 친구가 문득 나에게 자랑하는데 나는 그게 뭔지 몰라..!
  • 이번에도 나에게 알려주면 좋겠구나
  • 그래서 공유 받은 링크
  • 역시 콜스택 짱
  • 아마도 브라운필드라는 것은 나의 선생님이였던 존경하는 팀장님이 이 친구에게 알려준 것 같다
  • 그러나 이 글의 내용과는 다르게? RN에서 Native로 전환을 하기 위해 시도하고자 공유된 것으로 보인다
  • 살짝 슬프지만...
  • 어쨌든 새로운 무언가를 나도 알아가니 좋다!
  • 기존 네이티브에서 멀티플랫폼으로 전환하는 과정
  • 한번에 넘어가지 않고 공존하는 모양을 취하는 것
  • 그린필드라는 것이 있는데 이것은 순수 멀티플랫폼으로 개발하는 것
  • 쌩뚱맞게 갑자기 블루그린 배포법이 생각난다

onLoadEnd

  • 이미지를 보여주는 애니메이션이 동작하지 않았다
  • 처음에는 애니메이션이 동작하는 타이밍이 얽혀있구나하고 생각했다
  • 하나씩 정리하면서 따라가는데 아무리 봐도 리렌더하는 시점에 애니메이션이 동작하고 있었다
  • 테스트해보려고 상태를 업데이트했는데 이번엔 동작하지 않았다
  • 대체 왜? 어느 시점이 문제인걸까?
  • 분명 이미지 소스는 제대로 들어왔고 확인도 되는데 동작하지 않는걸까?
  • 애니메이션을 주는 함수를 이벤트를 줘서 직접 호출해보기로 했다
  • 코드를 통해 유추해보기는 모든 이미지를 불러오는 시점에 애니메이션이 동작해야한다
  • 이미지가 로드되는 시점이 문제점이였다
  • 처음에는 이미지 데이터가 존재하지 않았고 FastImage는 친절하게도 불러올 수 없음 onError
  • 그러나 우리가 핸들링하고 있는 이벤트는 onLoadEnd였다
  • 그냥 불러오는 과정이 성공, 실패 여부와 상관없이 정말 End 시점마다 호출되고 있었다
  • start -> onLoad -> onLoadEnd, start -> onError -> onLoadEnd
  • 그렇다면 처음 데이터가 없는 시점에 이미 한번
  • 정상적으로 불러오고 나서 또 한번
  • 두번씩 호출되고 있는 상황이였고 기존에 실제 이미지 수 보다 더 큰 값과 비교하고 있던 조건문은 우연하게도 자연스럽게 실행되고 있었던 것이다...
  • 어쩌다 이런일이 발생했을까
  • onLoadonLoadEnd
  • 갑자기 의식의 흐름 역시 이름 짓는게 제일 어렵다

6/1 ~ 6/6

어쩌다보니

  • 정말 오랜만에 주말동안 쭉 공부할 수 있는 시간을 갖게 되었다
  • 근데 왜 이렇게 방이 지저분하지
  • 시간이 여유있으니 미리 스터디 준비도 하고 다음 스터디도 한번 보고
  • 이번주는 여유롭게 보낼 수 있을듯!