전체 글 (33) 썸네일형 리스트형 [Flutter.250210] 유저의 망령이 떠돌아다니는가! 로그아웃이 되어야 하는데 안된다.앱을 등록하려면 로그아웃, 회원탈퇴 기능이 구현 되어야 승인이 나는데, 그래서 로그아웃, 회원탈퇴를 시키려는데안되는 것이다. 이유를 찾은 것 같다. 장장 이틀 동안 찾아 헤맸다. 내가 만들고 있는 `my_page`에서는 하위 페이지로 `n-RM` 페이지를 가지고 있다.찾아보니 하위 페이지에서 `loadCurrentUser()` 하면서 캐시된 유저 정보를 다시 갖고왔던게 아닌가 싶다. 사실 지금 해결의 실마리를 찾은 것 같아 두근거려서실행을 못해보고우선 블로그를 적고 있는 것이다. 왜냐면 이게 실행이 잘 되면, 나는 또 이 블로그 글 작성하는 것을 등한시할 것이기 때문이다. 아 이거 냄새가 난다. 냄새가 나.버그의 냄새를 좇아서 여기까지 온 나에게 칭찬을 해 주고 싶군. .. [openAI api.250205] firebase functions deploy 성공기 (feat. openAI 인스턴스를 생성하는 적절한 시점) 아 도무지 에러가 안잡혀서, 지난 에러에 대해 글을 쓰기로 했다. 짤막하게. openAI api를 쓰려면 api key가 필요하다. 아주 소중한 api key. 처음에는 코드를 이렇게 썼었다. const functions = require("firebase-functions");const admin = require("firebase-admin");const { onDocumentWritten } = require("firebase-functions/v2/firestore");const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); 그랬더니, 이 함수를 firebase functions에 deploy 하려고 `firebase depl.. [openAI api.250203] 돈을 내 보았다 함수 결과 값을 받아보려고 유료 API 결제를 하였다. 우선 10달러 넣어두었고, 5달러 이하로 떨어질 때마다 10달러씩 충전하게 해 두었다. 이런 아름다운 자본주의 세상, 모든 어여쁜 것에는 돈이 드나니. https://platform.openai.com/docs/quickstart 챗GPT는 잘 써왔는데, OPEN AI api 결제는 처음 해 본다. 둘은 별개다. 돈을 받아내기 위해서인지, 굉장히 친절한 설명으로 가이드 되어 있는 것을 알 수 있다. 1.https://platform.openai.com/api-keys 여기에 가서, api 키를 만든다. 우상단에 보면 'Create new secret key' 버튼이 있다.이 때 생성되는 api 키는 다시 볼 수 없다. 잘 복사해 둔다. 2.터미널로 가서, .zshrc 파일.. [Flutter.250202] 수많은 에러 안에서 살아남기 위한 허우적 feat.Firebase functions 그렇다, 쓸 거리가 너무 많아서 도무지 글을 쓰는 것을 시작할 수 없었다.이것은 마치 삼류 소설 인트로 같다고 생각하고 소설을 읽은지 오래되었으니 아무래도 굉장히 아웃데이티드 된 개 구린 인트로일 것이다. 흑흑 참신하게 흑흑 좋네내 마음이다 흑흑흑 하는 내 마음 아니 도대체 에러 없는 날이 없는것이다.이렇게 하면 이러한 에러가 나고저렇게 하면 저러한 에러가 나고영어를 잘 한다고 생각하며 사는데 (한국말도 못하니까 비슷하다) 영어 에러 메세지는 왜이리 안 읽히고 읽기도 싫은지그냥 쫙 다 긁어서 구글에 검색해본다.그러면 이제 스택 오버플로우에 같은 에러에 고민했던 사람의 글이 최상단에 노출되고그걸 읽어보는데 또 영어야그러니까 또 집중해서 읽고 이러는 날들이다. 아니 왜 또 새벽엔 잠이 안오고 그래서 컴.. [Flutter.250115] ListView와 ListView.builder의 차이 리스트를 만들 때 사용된다는 공통점이 있지만, ListView와 ListView.builder 사이에는 차이점이 있다.ListView 같은 경우는 리스트를 한번에 만들어버리기 때문에, 만들어야 할 리스트의 양이 많으면 버벅이는 현상이 발생할 수 있다.반면에 ListView.builder 같은 경우는 visible, 딱 보이는 양 부터 만들고, 요청이 오는 것에 따라 리스트 아이템을 만들어서 보여주기 때문에, 앞서 말한 많은 양의 리스트를 만들어야 하는 상황에 적합하다. 공식 문서에도 다음과 같은 표현으로 설명되어 있다. (https://api.flutter.dev/flutter/widgets/ListView-class.html) 더보기The ListView.builder constructor takes .. [Flutter.250113] Hot restart, Hot reload 둘 다 Hot 하지만, 뭐가 다를까 둘 다 핫하다. Hot restart, 그리고 Hot reload 디버그 모드로 코드를 실행시키면, 저런게 뜬다. 저기서 번개 모양은 'Hot reload', 꼬부라진 화살표 모양은 'Restart'이다. 구글에 물어보았다. "플러터의 리스타트와 핫 리로드의 차이가 무엇이니?"구글이 다음과 같이 대표 답변을 주었다. 플러터의 핫 리스타트는 full restart, 아예 처음부터 다시 시작하는 것보다는 확실히 빠르다. 핫 리로드는 기존의 state를 보존하는 상태에서 구동되지만, 핫 리스타트는 앱이 보유한 기존의 상태를 모두 파괴하고, 전체 앱 코드를 다시 컴파일해서 새로운 default state에서 다시 시작한다. 검색 결과 아래로 조금 내려가니, 플러터 공식 문서도 있다. 제목은 'Hot re.. [Flutter.250110] 간단히 개념만 알아보는 Widget testing & Unit testing & Integration testing 플러터에는 테스팅 관련 공식 문서도 있다. https://docs.flutter.dev/cookbook/testing TestingA catalog of recipes showcasing testing your Flutter app.docs.flutter.dev 유닛 테스팅이 아마 가장 기본적인 테스팅 기법이 아닐까 싶은데, 작성한 클래스들, 특정 함수나 메서드와 같은 개별 단위를 'test' 패키지를 이용하여 테스트한다. 위젯 클래스를 테스트 하기 위해서는 'test' 패키지에 더해서 'flutter_test'를 활용할 수 있다. 테스트는 동일하지만, 각각의 테스팅 목적이 상이하다. 유닛 테스팅 같은 경우는 비즈니스 로직이 제대로 동작하는지 확인한다. 예를 들어 데이터를 받아와서, 사용할 enti.. [Flutter.250108] 다트의 네이티브 컴파일 기술 JIT AOT 다트의 JIT, AOT에 대해 더 알고싶었다. 키워드를 검색해보니 다음의 문서가 최상단에 노출되어서 읽기 시작하였다. https://dart.dev/overview Dart overviewA short introduction to Dart.dart.dev 다트의 컴파일러 기술은 우리의 코드를 다양하게 서로 다른 방식으로 동작할 수 있게 해 준다. 우선 크게 두 가지로 나뉘는데 1. 네이티브플랫폼모바일과 데스크탑 디바이스에서 동작하는 앱의 경우 다트는 머신 코드를 만들어 내기 위해 Just-in-time(JIT) compilation과 ahead-of-time (AOT) 컴파일러를 포함하고 있다. 2. 웹 플랫폼웹을 타겟팅 하는 애플리케이션의 경우, 다트는 개발 또는 프로덕션 목적으로 컴파일을 할 수 .. 이전 1 2 3 4 5 다음