일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- gin
- Kafka Connect
- Golang
- Helm
- kafka-connect
- create topic
- Elk
- gortsplib
- consumer group
- Kubernetes
- minikube
- broker
- http
- Consumer
- 쿠버네티스
- kibana
- kafka broker
- Produce
- go test
- go
- ElasticSearch
- loadbalance
- Message
- gorm
- Kafka
- eck
- tls disable
- k8s
- topic
- docker
- Today
- Total
목록전체 글 (36)
개발자의 개발괴발

mlflow는 머신러닝 Experiment를 관리하고 재현성 있게 만들기 위한 오픈소스 플랫폼이다.머신러닝 모델을 학습하다보면 모델 저장도 하고 저장된 모델의 성능같은 부가 정보들을 같이 기록해야한다.아무 도구 없이 파일로 기록하다보면 기록하기도 힘들고 다시 찾아보기도 힘든데 mlflow를 사용하면 쉽게 기록하고 쉽게 찾아볼 수 있다.mlflow 설치하기설치하기는 매우 쉽다.pip install mlflowpip로 간단하게 설치할 수 있다. 이렇게하면 로컬PC에 바로 설치가 되지만 Docker를 이용해 로컬PC와 환경을 분리하고 싶다.(가상환경을 써도 분리할 수 있지만 dockerfile로 분리해보겠다.) Dockerfile# 베이스 이미지 (Python 포함된 경량 이미지)FROM python:3.13..
지난번 글에서 gortsplib로 cctv 영상을 다운받고 ffmpg로 mp4로 변환을 해보았다.여기서 각각 한 프레임을 추출해서 object detection model같은 것으로 추론해보려고 했다.단순히 생각해서 NALU가 한 프레임이라서 한 단위의 NALU만 이미지로 변환하면 된다라고 생각을 했었는데 NALU가 프레임의 단위는 아니었다.gortsplib로 한 프레임을 추출해보고 싶었는데 영상에 대한 지식이 모자라 성공하지 못했다.하지만 gocv라고 opencv를 wrapping해놓은 것이 있었다.opencv로는 rtsp 영상에서 이미지 추출하는걸 예전에 쉽게 했었던 기억이 있어 가능할 것이라 생각했다.gocv 사용하기아래와 같이 코드를 짰다.(gpt와 copilot에게 감사)python으로 했을때도..
각각의 함수의 unit test도 필요하지만 http handler에도 test가 필요하다.각각의 함수가 잘 동작한다는 보장이 있어도 handler에서 에러가 날 수도 있기 때문이다.Handler test하기handler를 테스트 하는것도 handler 함수를 호출해주는 것처럼 테스트를 할 수 있다.func GetAllUsers(c *gin.Context) { // something}그러나 handler는 parameter로 *gin.Context를 받아야한다.어떻게해야할지 몰라 당황스러울 수도 있지만 다행히도 test context를 만들어서 집어넣어줄 수 있다.func GetTestGinContext() (*gin.Context, *httptest.ResponseRecorder) { w := http..
앞에서 DB에 insert, delete하는 테스트코드를 작성해보았다.정상적으로 잘 작동하는걸 확인했으니 실제로 curl로 호출해서 잘 동작되는지 확인해보자. controller 설정아래와 같이 code를 수정하겠다.func main() { db.Init() // Create a new Gin router router := gin.Default() // Define a simple GET endpoint routerUser := router.Group("/users") routerUser.GET("", controller.GetUsers) routerUser.POST("", controller.CreateUser) routerUser.DELETE("/:userId", controller.DeleteUse..

backend 개발에 빼놓을 수 없는것 하나만 뽑으라면 db일 것이다.backend만으로 client의 요청에 응답을 할 수 있지만 영구적으로 데이터를 저장하는데는 한계가 있다.물론 메모리에 저장할 순 있지만 backend 서버가 재기동될 경우 데이터는 모두 날아가버린다.따라서 영구적으로 데이터를 저장할 수 있는 기능을 제공하는 것이 db이다.단순히 영구 데이터 저장만이 목적이 아니라 db를 이용하면 단순히 파일로 저장하는 것보다 많은 이점이 있다.그래서 이전 글에 이어 db를 추가해보도록 하겠다.sqlite3db 종류에는 여러가지가 있고 상황에 따라 적절한 선택을 하면 된다.여기서는 무거운 backend 서비스를 만드는 것도 아니 때문에 sqlite3를 사용하려고 한다.가볍다고해서 다른 db에 뒤쳐지는..
go에 많은 web framework가 있지만 나는 gin을 선택했다.장점, 단점을 읽어봤지만 나에게 중요한 것은 쉽고 빠르게 만들 수 있는 것이기 때문이다.gin 시작하기gin 시작하기는 매우 쉽다.vscode에서 새로운 폴더를 만들고go mod init home-cam위 명령어로 프로젝트를 초기화 했다.go get -u github.com/gin-gonic/gin위 명령어로 gin package를 설치하고 아래와 같이 main.go를 작성해보자.package mainimport ( "fmt" "net/http" "github.com/gin-gonic/gin")func main() { // Create a new Gin router router := gin.Default() // Define a sim..
집에 홈 캠 스트리밍 서버를 만들어보려고 한다.마침 먼지쌓인 놀고있는 PC가 있어서 Ubuntu 24.04를 설치하고 SSH Server를 설치해두었다.영상을 스트리밍할 수 있고 저장된 영상을 볼 수 있도록 앱도 만들어보려고 한다.백앤드는 Go로 앱은 Flutter로 만들어보겠다.Go와 Flutter 초보자지만 이정돈 해낼 수 있지 않을까 한다.

cctv 영상을 스트리밍받아 내 pc에 저장해보자.rtsp에 지식이 전무하다보니 시간이 꽤 걸렸다.사전준비go에서 rtps를 사용하기 위해 gortsplib를 사용했다.go get "github.com/bluenviron/gortsplib/v4"깃헙에 가면 example도 잘 되어있다.그런데 ffmpeg 버전을 낮은 버전을 사용한것 같다.몇몇의 example은 cgo를 써야하는데 몇몇 함수가 deprecated된것도 있고 해서 c라이브러리를 쓰는 곳에선 잘 동작하진 않았다.cgo를 쓰기 위해선 ffmpeg도 설치해야한다.(위 패키지를 설치할때 같이 설치 되는지는 잘 모르겠다.)설치하기 위해서 homebrew로 설치하자.brew install ffmpeg streaming할 cctv영상 원본은 여기서 구할..

Elasticsearch와 Kibana를 설치했고 Elasticsearch가 잘 동작하는걸 확인했었다.여기 페이지에 있는 화면에 접근을 하고 싶은데 Kibana에 접근하면 보여지는 것으로 보인다.Kibana를 localhost로 port-forward하고 브라우저로 접속하면 바로 접속될 줄 알았지만 역시나 한번에 되는 것은 없다.curl로도 마찬가지였다.$ curl "http://localhost:5601" -vvv* Host localhost:5601 was resolved.* IPv6: ::1* IPv4: 127.0.0.1* Trying [::1]:5601...* Connected to localhost (::1) port 5601> GET / HTTP/1.1> Host: localhost:560..
앞서 elastic-operator와 elasticsearch를 minikube에 배포해봤다.elastic-operator는 helm으로 elasticsearch는 yaml을 통해서 직접 배포했는데 elasticsearch도 helm을 통해 배포할 수가 있었다.심지어 helm 배포 한번으로 elasticsearch와 kibana를 한번에 배포할 수 있다.(여기참고) Helm으로 elasticsearch와 kibana 배포하기먼저 helm repo를 추가한다.$ helm repo add elastic https://helm.elastic.co"elastic" already exists with the same configuration, skipping$ helm repo updateHang tight wh..