전체 글 21

MLOps 기본 개념

개요 MLOps를 구현할 기회가 생겨서 알아보던 중에 기본적인 개념 정도는 정리를 하고 들어가야 할 것 같아서 찾아보던 중에, GCP에서 제공하는 좋은 문서가 있어서 이를 공부하면서 정리해보는 느낌으로 게시글을 작성하려 합니다. 아예 AI 쪽으로는 문외한이라 가장 기본적인 부분부터 작성될 예정이니, 이 글을 보실 분들도 참고해주시면 좋을 것 같습니다. 참고한 문서는 아래와 같습니다. https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ko MLOps: 머신러닝의 지속적 배포 및 자동화 파이프라인 | 클라우드 아키텍처 센터 | Google Cloud 의견 보내..

MLOps 2023.06.21

In NestJS's microservice, let it fix that cannot refer another microservice (2)

지난 글에서, NestJS 프레임워크의 microservice에서 다른 microservic를 참조하려고 할때 module init이 정상적으로 이뤄지지 않는 이슈가 있다고 설명했습니다. 해당 글을 작성한 이후에 NestJS의 INestApplication 쪽을 추가적으로 찾아보다가 아래 문서에서 INestApplicationContext 인터페이스를 inherit 하는 인터페이스가 2개 있다는 것을 발견했습니다. http://nestjs-doc.exceptionfound.com/interfaces/inestapplicationcontext.html 하나는 INestApplication이고 다른 하나는 INestMicroservice 였습니다. INestApplication은 일반적인 monolisic ..

NestJS 2023.04.08

In NestJS's microservice, let it fix that cannot refer another microservice

NestJS에서 MSA를 구현하다보면, 단순히 Client - Server 구조(https://kahnco.tistory.com/9)로 되어있는 프로젝트를 로컬 환경에서 돌리는 케이스는 별 에러없이 진행됩니다. 하지만, Client가 여러 개가 되고 각각의 Client가 Listen하고 있는 포트가 여러 개가 되면 Server(gRPC를 호출하는 쪽)에서 Client(gRPC를 제공하는 쪽)를 onModuleInit을 통해서 호출하고자 할때, override한 onModuleInit 함수가 정상적으로 호출되지 않는 문제가 있습니다. // client-svc.service.ts @Injectable() export class ClientSvcService implements OnModuleInit { pr..

NestJS 2023.04.02

Implementation gRPC MSA with Separated Projects in NestJS

개요 예전부터 MSA 아키텍처로 서버를 구성해보고 싶다는 생각이 들었는데, 좋은 기회가 있어서 구현해보게 되었습니다. 다양한 프레임워크 중에서도 제가 그나마 친숙한 NestJS로 진행해보고자 하는데, NestJS는 한국어로 잘 번역된 공식 문서도 있고 프레임워크에 MicroServices 파트가 공식적으로 지원하기 때문입니다. 정식으로 MSA 아키텍처를 구현해보기 전에, NestJS 공식 도큐먼트에 있는 간단한 MSA 예제를 먼저 실습해보았습니다. 아직 gRPC 프로토콜에 대해서 제대로 이해하지를 못해서, 이해를 위한 과정입니다. 여러 삽질과 구글링 끝에 MSA 실습을 성공하였고, 그 과정에서 생긴 오류와 해결 과정을 공유하기 위해서 이 글을 작성하게 되었습니다. 문제 NestJS 공식 도큐먼트에서 제공..

NestJS 2023.01.31

In Flutter, which Empty Widget is most fastest?

Flutter로 위젯을 구현하다보면 아무것도 없는 빈 위젯을 사용해야할 때가 종종 있습니다. 예를 들면, 네트워크 통신을 통해서 데이터를 가지고 올 때에 보통 다음과 같은 상태값을 가집니다. Idle (유휴값, 보통은 초기값) Loading (네트워크 통신할 때의 값) Success (네트워크 통신 성공) Failure (네트워크 통신 실패) 이럴 때에, Idle 값으로 사용하는 위젯은 보통 Container 아니면 SizedBox 입니다. 그런데, 문득 저 두 개의 값 중에서 빌드 속도가 가장 빠른 것은 무엇일까? 라는 궁금증이 들었습니다. 간단한 Flutter 프로젝트를 생성해서 위젯 테스트를 진행해보면서 확인해보겠습니다. 테스트에서 비교할 위젯은 총 3개입니다. Container SizedBox S..

Flutter 2023.01.29

Make a Data Pipeline with Aurora DB, Logstash and AWS Opensearch

데이터 파이프라인을 짤 일이 있어서 Logstash를 활용해서 구현해보겠습니다. Logstash 공식사이트 (https://www.elastic.co/kr/logstash/)에서 설치 관련 내용을 확인할 수 있지만, 제대로 실행되지 않아서 제 나름대로의 방법으로 진행해보겠습니다. 또한, 여러 개의 테이블을 동시에 Consume 하기 위해서 pipeline을 활용해서 여러 개의 Logstash를 돌렸으니 이 점 참고 바랍니다. 요구 조건 DB에 데이터를 넣으면 그 넣어진 데이터를 OpenSearch에서 실시간으로 확인 가능해야합니다. 여러 개의 테이블을 동시에 Consume 해야합니다. sql_last_value 값을 써서 중복값이 OpenSearch에 쌓이지 않도록 해야합니다. Aurora DB 세팅 R..

Logstash 2023.01.25

Flutter with ChannelTalk

Flutter로 프로젝트를 진행하다가, 문의하기 채널로써 채널톡을 활용하게 되었습니다. 단순히 채널톡 버튼을 띄우는 것은 어렵지 않았지만, 파일 업로드 부분에서 어려움을 겪었기 때문에 이 글을 보시는 분들은 저랑 같은 어려움을 겪지 않길 바라는 마음에서 이 글을 작성합니다. 채널톡은 Android, iOS, Javascript, React Native를 지원하기 때문에 공식적으로는 Flutter를 지원하지 않습니다. 따라서, Android, iOS를 각각 설정해준 다음 methodChannel을 통해서 Flutter와 Native 단의 통신을 설정해줘야합니다. 하지만 이 부분은 난이도가 높고, 시간이 많이 걸리는 작업이기 때문에 저는 React를 활용해서 웹페이지에 채널톡 버튼을 구현하고 이를 Flutt..

Flutter 2023.01.06

Flutter Build Flavor with Firebase (1)

이번 게시글에서는 Flutter에서 Firebase 및 환경변수를 debug, release 모드 별로 빌드할 수 있는 방법에 대해서 서술해보겠습니다. Fastlane과 같은 베포 파이프라인을 활용하는 방식이 아닌, Shell 코드를 통해서 직접 파일을 변경해주는 방식으로 진행해보겠습니다. 위와 같은 방법을 사용하는 이유는 iOS 설정에서 build flavor에 따른 각각 다른 Firebase 세팅을 해주는 것이 상당히 난이도가 높기 때문입니다. 0. 사전 세팅 본론으로 돌아와서, 먼저 FlutterFire를 설치해보도록 하겠습니다. FlutterFire는 Flutter Plugin들로 이루어진 라이브러리로써, Flutter Application과 Firebase 프로젝트를 손쉽게 연동시켜줄 수 있습니..

Flutter 2023.01.04

CheckBox Inner Color Not Changed

Flutter에서 CheckBox를 구현하다보면, 선택되지 않은 상태에서의 내부 색상을 변경하고 싶을 때가 있습니다. 이런 경우에 다른 Widget들 처럼, MaterialState 상태를 분기시켜서 selected 되지 않은 상태일 때에 원하는 값을 넣으면 될 것처럼 보입니다. 코드로 구현해보면, Checkbox( fillColor: MaterialStateProperty.resolveWith(setCheckBoxColorState), value: isChecked, onChanged: (value) {}, ); ... Color? setCheckBoxColorState(Set states) { if (states.contains(MaterialState.selected)) { return Colors..

Flutter 2022.12.28

Flutter Clean Architecture

이 글은 Flutter Library 중에서, flutter_clean_architecture에 대해서 설명하는 글입니다. 소개 Uncle Bob의 책과 블로그를 기반으로 한 아키텍처입니다. Onion 아키텍처와 다른 아키텍처에서 가져온 개념의 조합입니다. 아키텍처의 주요 초점은 관심사의 분리와 확장성입니다. App, Domain, Data, Device 이렇게 네 가지 주요 모듈로 구성됩니다. 종속성 규칙 소스 코드 종속성은 그 방향이 내부로만 향합니다. 즉 내부 모듈은 외부 모듈을 인식하지도 종속되지도 않습니다. 그러나 외부 모듈은 내부 모듈을 인식하고 의존합니다. 외부 모듈은 비즈니스 규칙 및 정책(내부 모듈)이 작동하는 메커니즘을 나타냅니다. 더 많이 안으로 들어갈수록 더 많은 추상화가 나타납니다..

Flutter 2022.12.28