전체 글 47

Flutter Hive box의 open을 어떻게 하는게 좋을까?

Hive 라이브러리를 쓰면서 하는 고민이 있다. 우선 유지보수 단계에서의 유연성, 서비스 운영이 장기화되면 발생할 수 있는 마이그레이션 관련 이슈를 방지하기 위해서는 관심사를 세부적으로 나누고 각 관심사별 box를 분리해서 관리하는 게 좋을 것 같다는 생각을 하게 되었다. 이렇게 할 경우 hive에 저장되는 데이터의 구조 변경이 일어나도 비교적 간단하게 처리가 가능할 것이다. 또한 특정 자료형이 지나치게 복잡해지는 것도 방지할 수 있을 것이라고 생각했다.하지만 이렇게 사용할 경우 문제점이 하나 생긴다. 방법에 따라 하나 이상의 문제가 발생하는데, 문제의 유형은 3가지로 발생한다. 보일러 플레이트 코드가 발생한다코드 외적인 절차가 발생할 수 있다인지하지 못할 수 있는 동작이 발생한다일단 이 문제의 발단은 ..

flutter 2024.10.12

riverpod의 AsyncStateProvider의 AsynData관련 오류 디버깅

발생 상황 AsyncGuard를 통해 가공한 값을 사용하는 과정에서 nullcheck를 명시하였음에도 불구하고 Exception이 발생하는 상황Sample Codeclass TempAsyncNotifier extends _$TempAsyncNotifier{ ... foo() async { state = await AsyncData.guard( .... ); return state.value?.data ; }​}원인과 해결 방법AsyncValue는 [AsyncData, AsyncLoading, AsyncError] 이렇게 3가지의 형태로 분리되어 사용됩니다. riverpod(provider)에서 제공하는 값이며 비동기 상태변화가 일어날 경우 사용하라고 제공한 타입들입..

flutter 2024.09.17

flutter_cache_manager를 사용한 Svg캐싱

앱을 개발할 때 이미지를 사용하는 일을 굉장히 빈번하다. 그리고 이미지는 앱의 퍼포먼스에 지대한 영향을 미친다. 기기의 성능이 제한적인 앱 환경은 웹 환경에 비해 더 섬세한 자원관리가 필요하다.자원관리가 미흡할 경우 최소 퍼포먼스 저하 및 발열, 최악의 경우 os 차원에서 리소스를 많이 소모하는 앱이라는 경고창을 띄울 수 있다.앱의 성능을 최적화하는 방법들은 이미 여러 가지가 있지만 가성비가 가장 좋은 방법 중 하나는 이미지의 캐싱이다.아무리 이미지의 용량을 조절한다 하여도 결국 외부에서 이미지를 가져오는 행위는 리소스의 소모가 클 수밖에 없다. 언제나 새로운 이미지를 제공해야 한다면 어쩔 수 없겠지만 대부분의 요구사항에서는 가져오는 이미지의 종류가 기간별로 한정적이다. cached_network_ima..

flutter 2024.09.04

MergeRequest, PullRequest 차이점

들어가며git base에서 협업을 진행하면 두 가지 용어를 자주 볼 수 있다. 각각 gitlab, github이라는 cloud git base 서비스에서 병합 요청을 할 때 사용되는 항목이다. push, pull, merge, branch, rebase 등 gitbase에서 사용되는 수많은 항목들의 이름은 같다. 하지만 미묘하게 이 부분의 이름만 다르다. 일단 나는 현업에서 주로 gitlab을 사용하였고, 개인학습으로 github을 사용하는 편이다. 적어도 내가 사용하는 범주 안에서는 두 가지의 기능적 차이는 없었다. 혹여나 내가 기능을 잘못 사용하는가 싶어 gpt를 통해 확인한 결과 일단 기능적인 차이는 없다고 한다. 설령 있다고 하더라도 부수적인 편의성 정도일 것이다.차이점은?두 가지의 차이점은 결국..

형상관리 2024.08.30

Html2Canvas svg element absolute 적용 시 오동작 케이스

과거 라이브러리 문제 해결 사례들을 정리하다 html2canvas 의 issue를 살펴보게 되었다. 해당 플러그인은 특정 html요소를 canavs 정보 형태로 변환하는 기능을 한다. 해당 라이브러리는 대상 html의 dom의 정보를 기반으로 canvas정보로 랜더링 하는 과정을 거치는데 svg 이미지가 포한된 상황에서 문제를 발생시킨다. 1. 특정 style 적용 누락내 경우에는 ionic/angular 라는 플러그인에서 해당 플러그인을 사용했다.html의 기본 구성요소만 포함된 경우 정상적으로 동작하지만 ionic 프레임워크의 구성요소를 사용하여 html을 구성한 경우 특정한 style이 누락되는 상황들이 있었다.파싱 한 정보를 기반으로 직접 계산하며 랜더링 하기에 일반적이지 않은 속성은 누락될 수 ..

javascript 2024.08.30

제네릭 타입이 포함 된 data class 의 Freezed 적용

제네릭 타입이 포함 된 data class 의 Freezed 적용Freezed를 통해 데이터 클래스를 정의하는 경우가 많다. 하지만 제네릭 타입이 포함된 경우 조금 특수한 처리가 필요할 수 있다.예시타입 class CommonResponse{String code;String message;T? data;}기본적으로 freezed는 제네릭을 사용할 수 없지만 몇가지 처리를 통해 추가할 수 있다.@Freezed(genericArgumentFactories: true)sealed class CommonResponse with _$CommonResponse {const factory CommonResponse({required String code, required String message, T? data})..

flutter 2024.08.28

API 통신 오류처리 방식 표준화 후기

오류는 반드시 발생한다. 서비스가 고도화되고 사용자가 많아진다면 더 많아지고 그렇지 않더라도 여러 가지 이유로 인해 발생한다. 좋은 서비스는 오류가 발생한 상황에서도 그 상황에서 좋은 사용자 경험을 제공할 수 있어야 한다. 그렇기에 오류를 처리하는 것은 중요한 문제이다. 기존 방식 기존 방식은 반환값의 key값에 직접적으로 error 혹은 success라는 상태를 설명하는 텍스트가 존재하며 그 요소를 통해 오류를 처리하는 방식이었다. 반환값 예시{  result : "success",  data : ... ,  message: "",  log :"",  code : ""}​{  result : "error",  data : null ,  message: "some message"  log : "log..

회고 2024.06.12

영수증 표시 기능 개선 후기

상황 매장 영수증 정보 조회 프로시저는 한 번에 3개월의 정보만 조회 가능그 이상의 정보 조회 시 DB에 부하가 일어날 수 있기에 차단되어 있음, 응답속도 또한 보장할 수 없음기존 서비스는 과거 내역을 조회할 경우 무조건 3개월 이내의 기간을 설정하는 방식으로 작동, 개선 대상으로 선정 해당 프로시저는 타 부서의 DB정보를 조회하며 해당 부서에서 관리된다. 다른 서비스에서도 사용하기에 프로시저 자체를 변경하기 번거로움프레임워크 없는 php를 사용하며 구조가 일반적이지 않아 기능을 직접 구현해야 함개선점API 반환값 개선을 통하여 가독성 및 유연한 대응이 가능한 구조 적용, 클라이언트 코드 양 감소페이징기능 추가를 통해 한번에 조회 가능한 기간이 대폭 상승되어 사용자 경험 개선 기존 UX [조회시작일 설정..

회고 2024.05.24

Google IO 2024 Fluttter 새로운 소식 후기

올해도 Google IO 세션이 열렸고 다양한 사항들이 발표되었다. 그중 Flutter 관련 새로운 소식들이 있었다이번 키노트에서 특히 강조한 내용은 5가지이다. Gemini(AI), Flame(Game Engine), Macros(개발 생산성), Impeller(UI Rendering Engine), WebAssembly(Web)Geminiflutter만의 추가사항은 아니고 이번 IO 자체의 가장 중요한 이슈로 보인다. 구글의 자연어 처리 AI 모델이다. flutter에서도 적극적으로 지원한다는 내용이다. 기존에도 tflite_flutter 라이브러리를 통해 tensor flow를 통한 AI기능 구현이 가능한 사항이지만 Gemini를 통해 더 쉽게 자연어 처리 기술을 적용할 수 있을 것 같다.http..

flutter 2024.05.17

Bloc 환경에서 Testcase 적용 방법

상태관리 프레임워크 bloc을 사용할 때 testcase를 만들고 적용하는 방법입니다.  사용할 라이브러리 bloc_test : test환경에서 bloc을 실행 및 테스트를 위해 사용합니다. mockito : 의존성을 가지는 객체의 mocking을 위하여 사용합니다. mocking을 지원하는 방법은 다양하며 다른 수단을 사용해도 그에 맞는 코드를 작성하면 됩니다. mocking이란 테스트 시 임시로 해당 클래스의 특정 항목이 실행되는지만 확인하기 위한 모의객체를 만드는 작업입니다. 테스트는 가장 최소한의 범위만 확실하게 테스트 할 수 있어야 합니다. 예를 들어 회원 가입에 대한 테스트를 한번 할 때마다 실제로 DB, 서버를 사용해야 한다면 많은 자원들을 사용하며 경우에 따라 반복 테스트가 번거로울 수 있..

flutter 2024.04.25