실패할 권리를 보장해줘야 성장할 수 있다.

논어 위정편에 이런 말이 나온다 知之爲知之 不知爲不知 지지위지지 부지위부지 "아는 것을 안다 하고 모르는 것을 모른다 한다." 라는 뜻이다. 예전 시험 공부를 할 때 느낀 것이다. 고 득점을 위해서는 반복학습을 해야 하는데  인간의 마음이 간사해서 반복 하다 보면 아는 것에 눈이 간다. 모의고사를 풀어보면 아는 문제는 항상 맞추지만 틀린 문제는 항상 틀린다. 나는 이걸 깨우치는 데 1년 6개월이 걸렸다. 아는 것과 모르는 것을 구분한 다음 모르는 것에 집중하여 반복을 한다. 무엇을 배울 때는 실패 경험이 매우 중요하다. 그래야 만이 내가 모르는 것을 알 수 있다. 옛 성현들이 아는 것에 왜 밝을 명자를 썼는지 이제는 알 거 같다. 이제는 누군가를 가르쳐야 할 때가 왔다. 실패할 경험을 할 수 있도록...., 뒤에서 지켜 보며 그 실패가 문제로 확산되지 않도록 만 해주면 된다. 이부분에선 이러면 안되는데 하는 마음이 앞서지만 참아야 한다. 실패할 경험을 보장해줘야 하기 때문에....,

App Store Connect Operation Error 조치

이미지
KMM(Kotlin Multiplatform Mobile) 을 활용하여 앱을 제작하였습니다. 아이폰 쪽 앱을 스토어에 올리는데 오류가 납니다. 설마할까 하면서 그냥 올려 보았습니다. 통과 되었습니다. 이 오류는 그냥 무시해도 될거 같습니다.  

KMM 에서 XML 자료 가져와서 Parsing 처리방법

이미지
KMM 대단한 물건이다. 비지니스 로직 부분을 코틀린으로 통일만 하면 개발량이 확 줄어든다. 샘플로 제시된 코드는 JSON 형식이다. 하지만 공공데이터 형식이 XML 인 경우가 많다. 이것에 대한 매뉴얼도 물론 있다. 주석처리 된 부분이 매뉴얼에서 제공된 라이브러리이다. 결론부터 말하자면 안된다. shared -> build.gradle.kts 상단에 1.7.10 으로 추가하였다. 1.7.20이 최신파일인데 이게 또 compose 와 충돌이 나서 하위버전으로 낮추었더니 오류가 나지 않는다. androidMain 부분에 라이브러리를 추가해준다. iosMain  부분에도 라이브러리를 추가해준다. 제일 하단에 메모리 관련 설정을 추가해준다. Project 제일 상단 폴더의 build.gradle.kts 파일은 위와 같이 설정한다. 여기서도 버번을 1.7.20 으로 했다가 1.7.10 으로 하향 설정 하였다. 호출하는 부분의 모듈이다. 일단 String 으로 받아서 함수를 만들어서 구조체에 넣을 것이다. 결과 데이터를 담을 구조체는 이렇게 작성하였다.  결과 XML 은 대충 이렇게 내려온다. 문자열 추출하여 내용을 파악하는 함수를 작성하였다. 추출된 각 항목을 Item 으로 생성하여 리스트에 넣고 이를 각 구조체 내용에 추가하여 데이터를 완성하는 부분이다. 이제 이 함수를 사용해서 가져온 결과를 리턴하는 비동기 함수를 클래스에 추가한다. 안드로이드 소스에서는 이렇게 호출한다. 아이폰 소스에서는 이렇게 호출한다. 뒤에 오는 개발자에게 도움이 되었으면 하는 마음으로 작성하였다. 전체 소스 https://github.com/whenyourapprun/ElevatorKMM 

kotlin으로 retrofit2 사용하여 xml 자료 가져오기 실패

코틀린으로 retrofit2 를 사용하여 xml 자료를 가져와서 파싱하는 것으로 시도했다. 주로 3가지가 사용된다고 검색결과 나온다. 첫번째 simplexml 은 deprecated 경고가 뜬다. 이것도 시도했지만 xml 추출 부분에서 conveter 오류가 뜬다. 두번째 Tikxml 을 사용하라고 나오며 이에 대한 자료가 검색을 하면 꽤나 많이 나온다. 주어진 대로 시도 했으나 마찬가지로 conveter 오류가 뜬다. 세번째 JAXB 사용하라고 안드로이드 스튜디오에서 권장으로 뜬다. 역시 마찬가지로 conveter 오류가 뜬다. 혹시 파싱해서 모델에 추가하는 부분이 잘못되었나 싶어  이부분을 몇번이고 시도 했는지 모른다. 이제 더이상 검색에 나온 결과로 해볼 수 있는게 없다. 내 추측으로는 아마도 라이브러리에서 잘못되지 않았나 싶다. 원래 모듈이 자바로 volley 를 사용해서 gson 으로 파싱하여 xml 내용을 추출한 것이었다. 별수 없이 공공데이터 포털에서 주는 자료를 파싱하는 부분만 이전처럼 자바로 구성하였다. 결론은 XML 결과를 파싱하는 부분은 volley & gson 을 사용하도록 하자. 이것 때문에 주말을 전부 날린걸 생각하면 억울하다. 무조건 최신 라이브러리 적용보다 잘 되고 검증된 것은 그대로 유지하는게 낫다

안드로이드 스튜디오 자바 11 자바 1.8 오류

이미지
안드로이드 스튜디오에서 자바 11 자바 1.8 오류가 난다. 다음과 같은 화면이다. 이 오류는 Gradle 이 자바 11이 필요한데 현재 설정은 자바 1.8로 되어 있다는 이야기이다. 설정에서 자바 11로 변경하면 된다. 다음과 같이 변경 하였더니 오류없이 잘 된다.

KMM(Kotlin Multiplatform Mobile) 환경 구축 on 맥북(12.6 Monterey)

이미지
KMM 은 아직 알파이다. 베타도 아닌 플랫폼이 현장에 적용되고 있다고 해서 한번 구축해보았다. 나의 노트북 환경이다. 첫 번째로 공식 사이트에서 진행한다. https://kotlinlang.org/docs/multiplatform-mobile-getting-started.html 여기서 제공하는 도구가 있다. 맥북에서 설치하는 환경을 맞춰주는 도구이다. $ brew install kdoctor $ kdoctor 실행결과는 다음과 같다. 여기서 중요한게 버전을 맞추는 일이다. 나도 버전때문에 이틀 정도 체크가 뜨지 않았다. 안드로이드 스튜디오도 돌핀으로 올리고  엑스코드도 14.0.1로 올렸다. 결국 ruby 2.7 로 낮추고 겨우 환경 체크가 된거 같다. 루비와 코코아팟 설치에서 아주 애를 먹었다. 루비 버전을 2.7로 낮춰야 한다. 최신 버전에서 아직 지원이 되지 않는거 같다. 이렇게 아직 문제도 많은데 사용자가 점점 늘어나는거 같다.

fastapi 파이썬 모듈인데 쓸만하다.

운영하고 있는 서비스가 있습니다. 우분투 서버에 노드 코아로 API를 작성 했으며 AI 모듈을 위해 파이썬 3으로 진단모듈을 작성했어요. 안드로이드 및 아이폰에서 서비스를 요청하면 노드 코아가 받아서 내부 스크립트로 파이썬을 실행하여 그 결과를 문자열로 받아서 파싱 처리 하도록 구현 했는데 약 10초 정도 걸리더군요. 좀더 효율적인 방법이 없을까 고민하다 fastapi 를 알게 되었습니다. 파이썬으로 된 노드 코아와 같은 경량웹서비스용 모듈입니다. 서버 내부 스크립트가 필요 없어지더군요. 그냥 서비스 받아서 결과를 json 으로 내려주는 걸로 변환했더니 응답속도 5초로 줄었습니다. 파이썬 코드가 편하다면 이거 추천할만 하네요. 일단 파이썬이 파싱이나 json 그리고 멀티파트 폼 데이터 처리가 원활합니다.