개발

  • ONNX를 이용하여 치와와와 머핀을 구분해보자.

    새로 구입한 디바이스가 몇개 있는데 이게 스냅드래곤 X 엘리트를 탑재했다. 요즘 AI 디바이스니 뭐니 하는데 이걸 써보려고 했다. 그런데 스냅드래곤 X 엘리트에서 사용하려면 ONNX 모델로 만들어야하니 그거까지 해보려고 대충 짰다. 그래서 주제는 뭐가 좋을까… 하다가 치와와와 머핀을 구분하는 모델을 만들어봅시다. 우선 데이터셋을 얻기 위해 Kaggle에 있는 데이터를 받습니다. https://www.kaggle.com/datasets/samuelcortinhas/muffin-vs-chihuahua-image-classification 학습도 ONNX로 되는거같긴한데… 이건 그냥 파이썬으로…

  • Spring Webflux 프로젝트를 진행하는데 코틀린만 쓰면 그게 바로 코프링 아니겠나! 싶었는데 아니었다. 보통 자바로 Webflux를 사용하면 리액티브 스트림을 써서 Mono나 Flux를 사용하게 되는데, 코루틴은 mono {}나 flux {}를 통해서 변환할 수 있었는데 아예 리액터를 안쓸 수 있었다… CoRouter DSL이 있는건 알았는데 뭔가 했더니 이거였다. 그래서 대충 보면서 리액터를 안쓰고 코루틴으로만 사용해봅시다. 일단 알아본건 이정도고… 뭐가…

  • 트리를 RDBMS에 넣으려고 하면 id와 parent_id를 만들어서 나타낼 수 있다. 대충 만들어보면 다음과 같은 테이블이 나온다. 내가 원하는 건 어떤 행의 모든 부모 행을 가져오는것이다. 단순히 생각하면 걍 여러번 쿼리를 때리면 되는데 이걸 한번에 할 수는 없을까? 하고 ChatGPT에게 물어보니 바로 가르쳐줌 쉬발; 로 하면 된다. 그다지 깊지 않은 경우엔 재귀쿼리가 낫고 매우 깊어질 가능성이…

  • 이게 필요한 경우가 생겼는데 난 당연히 안되겠지 하면서 ChatGPT에 물어보니 가르쳐줌;; 시발;; 다음 경우를 말한다. 얘를 사용하고 싶은데 로직 상 리플렉션에 의해 생성된 객체 안에서는 Bean을 넣을 방법이… 없… 는 줄 알았는데 있다. 저 홀리쉿헬퍼를 사용하는 서비스가 다음과 같이 생겼다고 하면 서비스레이어야 사실 @Service 어노테이션 써서 빈으로 만드는데 그냥 저런게 있다 치고, 저걸 다른 곳에서…

  • 상태관리와 npm 라이브러리 래핑하는 법도 얼추 알겠으니 풀스택을 해봅시다. 백엔드는 자주 쓰는 Spring Webflux이다. 프로젝트 구조는 루트 프로젝트 밑에 backend (Spring Boot) + frontend (Kotlin/JS React) + shared library (공통 모델 정의) 이다. 가장 막혔던 부분은 shared library에 모델을 어떻게 정의해야하는가이다. 처음에는 인터페이스로 정의하고 각 프로젝트에서 재정의해야하나 했는데 그럴거면 시발 왜 이걸 씀하는 생각이 들었는데…

  • 리액트 기본 useReducer를 쓰는건 아무리 생각해도 너무 개같아서 결국 Zustand를 래핑해서 쓰기로 했다. 기존에는 Zustand를 통째로 들어서 Kotlin/JS 로 바꾸려는 원대한 꿈을 가지고 있었으나 사실 그럴 필요가 없는게 겉으로 공개된 API에 대한 인터페이스만 만들면 되는거라 그렇게 다시 접근… Mutate 가 결국에는 종착점이 StoreApi이기 때문에 이 끝점만 알면 되는거고 중간에 뭐가 있든 신경을 안쓰면 된다. 그래서…

  • 코틀린에서는 타입스크립트의 Partial 을 자체로 구현할 수 없다. 그런데 jso 를 통해 자바스크립트 객체를 만들면 코틀린에서 nullable이 아니더라도 설정한 필드만 설정이 되고 나머지는 설정하지 않는다. (undefined) 그래서 요즘에 State 관련해서 여러개 올렸는데 useReducer에 넘기는 리듀서의 리턴타입은 온전한 State여야하기 때문에 자바스크립트에서처럼 spread 연산자로 쓰고 싶은데 코틀린은 이걸 지원 안한다. 처음에는 Object.assign을 쓰면 되지 않을까 싶어서 썼는데…

  • TaskExecutor란 프로세스 내에 상주하고 있으면서 Task를 등록하면 그 Task를 실행해주는 녀석을 말한다. (내가 그냥 대충 지은거임) 이걸 몇년 전에 자바스크립트로 만든적이 있긴 한데 자바스크립트 특성 상 이게 어떻게 동작하는지 알 수가 없어서 (사실 지금 만든것도 이해가 잘 안됨) 좀 그랬는데 이걸 코루틴으로 만들어봅시다. 아래는 executor가 실제로 실행할 작업을 정의한 클래스이다. 얘는 진행상황을 알아야하기 때문이 진행률같은…

  • 2로 올린걸 사용하려는데 시발 제대로 작동 안하는 경우가 있었다. 그래서 그냥 다음과 같이 전역 메서드로만 구성하는게 해답일 것 같다. 미들웨어는 리덕스 미들웨어처럼 다음 상태도 알 수 있는 건 아니고(store를 구현한게 아니라서;) 그냥 받은 액션과 현재 상태만 로깅하는 용도다. 예시 카운터 사용법은 CounterContext.Provider 로 적절히 감싸고 CounterContext.useSelector나 Countercontext.useDispatch 를 쓰면 된다. 다음에 알아볼 것은 npm 라이브러리를…

  • 어제 쓴 게 좀 그래서 좀 더 살펴보니 useReducer라는게 있었지 참! 싶어서 그걸로 고쳤다. 처음에 ReducerAction을 data class 로 했었는데 에러가 나서 external interface로 바꿨다. data class를 자바스크립트로 트랜스파일 했을 때 문제가 일어나는 듯 하다.