공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/이것저것_개발일지 21

FastAPI, SQLAlchemy 프로덕트에서 alembic을 쓰지 않은 이유

작은 사이드 프로젝트 중간에 투입돼서 코드 개선을 하게 되었는데, FastAPI + SQLAlchemy (postgres) + Alembic으로 구성된 기존 방식에서 Alembic을 atlas로 변경했다. Python으로 구성하는 API Server + ORM + DB migration tool 조합의 정석으로 많이 쓰이지만, 글 작성 기준 alembic 최신버전인 v1.13.1 프로덕트를 써보니 장점보다는 단점이 더 크게 느껴졌다. 당연하게도, 내가 느낀 단점이나 불편함이 alembic 프로덕트 자체의 한계는 아닐 수도 있다. 문서에서 내가 놓친 부분이 있을 수도 있다. 이런 고민을 하게 된 상황은 아래와 같은 조건에서였다. Python으로 production level의 웹 서비스를 목표로 상정하고 ..

2023 서울디지털재단 주최 생성AI 해커톤 - 상담부문 최우수상 후기

서울시 생성AI 해커톤 후기공고: https://aifactory.space/competition/detail/2376작업물: https://github.com/AIFactory-CallPilot (공모2) 생성형 AI를 활용한 상담지원 서비스 앱・웹 개발aifactory.space기획 / 아이디어 아이디어는 공고에 첨부되어 있던 '다산콜센터 상담 프로세스'의 위 페이지 한 장에서 완성됐다. LLM에서 기술적으로 성능이 검증된 기능 중 하나가 '문해력'이다. 긴 글의 맥락 이해, 문서 요약과 같은 작업의 수행 능력이 뛰어나다. 일평균 2만 건을 사람이 직접 처리하고 있다면, 자동화를 제안할 명분으로는 충분했다. LangChain을 활용하면 LLM을 활용한 로직을 소스코드로 자동화할 수 있다. LangCh..

Paketo buildpack의 Stack Customization 테스트 기록

시도했던 이유 Knative Function은 paketo buildpack을 기본 빌드팩으로 채택해서 쓰고 있다. 빌드팩은 runtime version과 같은 정보를 동적으로 입력받은 뒤 실행 시점에서 binary를 다운로드받는다. 그런데, 신규 함수를 생성할 때마다 CPython이나 Node같은 runtime을 매번 다운로드받는 방식은 빌드 속도가 느려지는 원인이 된다. 빌드팩이 실행될 환경인 builder 이미지에서 특정 runtime은 미리 다운로드 받아두고, buildpack에서 빌드를 시도할 때 builder 이미지에 해당 runtime이 있다면 재사용하도록 만들 수 있지 않을까? cf. 원래 Buildpack은 애초에 'runtime을 동적으로 관리할 수 있도록 한다'는 철학에서 출발한 프로..

Streamlink로 유튜브 멤버십 스트리밍 영상 다운로드하기

멤버십에 가입되어 있고, 유튜브에 로그인할 수 있는 계정이 필요하다. Streamlink라는 오픈소스 프로젝트를 활용해서 유튜브의 멤버십 전용 스트리밍 영상을 다운로드받는 방법. 21.09.26 현재 streamlink 프로젝트의 latest 버전은 2.4.0이다. 우선 https://github.com/streamlink/streamlink/releases 로 들어가서 latest Version을 선택한다. Releases · streamlink/streamlink Streamlink is a CLI utility which pipes video streams from various services into a video player - streamlink/streamlink github.com Win..

화상 모의면접 연습 플랫폼 개발 프로젝트 (2) - KeyCloak 활용해서 서비스 DB에 OAuth 인증 붙이기

Yapp 동아리의 개발 프로젝트였던 화상 모의면접 연습 플랫폼 "위더뷰" 개발에 백엔드 개발자로 중도 합류했다. github.com/witherview/witherview_backend witherview/witherview_backend🎯 위더뷰 Backend. Contribute to witherview/witherview_backend development by creating an account on GitHub.github.com기본적으로는 자바 스프링부트를 사용하지만, WebRTC의 경우 Node JS를 사용하는 구조다. 프론트는 React 기반이다. 중도에 합류해서 기존 코드와 구조를 어떻게 분석했는지 / 어떻게 개선방안을 찾아갔는지 생각을 정리하는 용도의 포스트. 이 당시 서비스 백엔드는 ..

화상 모의면접 연습 플랫폼 개발 프로젝트 (1) - 채팅 DB 아키텍처 고민하기

Yapp 동아리의 개발 프로젝트였던 화상 모의면접 연습 플랫폼 "위더뷰" 개발에 백엔드 개발자로 중도 합류했다. github.com/witherview/witherview_backend witherview/witherview_backend 🎯 위더뷰 Backend. Contribute to witherview/witherview_backend development by creating an account on GitHub. github.com 기본적으로는 자바 스프링부트를 사용하지만, WebRTC의 경우 Node JS를 사용하는 구조다. 프론트는 React 기반이다. 중도에 합류해서 기존 코드와 구조를 어떻게 분석했는지 / 어떻게 개선방안을 찾아갔는지 생각을 정리하는 용도의 포스트. 처음 프로젝트에 합류..

Java WebSocket과 Stomp로 간단한 채팅프로그램 만들기

WebSocket Http처럼 서버와 클라이언트 간 양방향 통신을 제공하는 프로토콜. 한 번 connection이 맺어지면, 서버 또는 클라이언트가 connection을 종료하기 전까지 계속 통신이 가능하다. 따라서 지속적으로 서버와 클라이언트가 high frequency / low latency로 통신해야 하는 경우 http보다 websocket 프로토콜이 유리하다. url로 topic을 지정한 채 메시지를 전송 해당 메시지가 Message Broker로 도달 (Simple Broker) Message Broker는 해당 토픽에 대응되는 response channel로 Route receiver가 메시지 수신. 이 과정을 진행하기 위해서는 Stomp라는 프로토콜이 추가로 필요. Stomp WebSock..

IBM Kubernetes Cluster에 SpringBoot Application 구동 실습하기 - 2. deploy

[IBM Clouders - Indigo Blue 포스트] IBM Cloud에서는 신용카드를 등록한 Pay-go 계정이 있으면 무료 Kubernetes Cluster를 생성할 수 있다. 한 개의 클러스터를 생성할 수 있고, 30일이 지나면 자동으로 삭제되기 때문에 과금 염려도 없다. Kubernetes 환경을 가볍게 실습할 수 있는 조건이다. SpringBoot로 생성한 자바 웹 어플리케이션을 Kubernetes Cluster에 구동하는 실습을 해 보았다. DockerFile을 생성한 경로에 Kubernetes에 Deploy하기 위한 yaml파일 Deployment.yaml을 생성한다. apiVersion: apps/v1 kind: Deployment metadata: name: app-h2db labe..

IBM Kubernetes Cluster에 SpringBoot Application 구동 실습하기 - 1. dockerizing and 환경설정

[IBM Clouders - Indigo Blue 포스트] IBM Cloud에서는 신용카드를 등록한 Pay-go 계정이 있으면 무료 Kubernetes Cluster를 생성할 수 있다. 한 개의 클러스터를 생성할 수 있고, 30일이 지나면 자동으로 삭제되기 때문에 과금 염려도 없다. Kubernetes 환경을 가볍게 실습할 수 있는 조건이다. SpringBoot로 생성한 자바 웹 어플리케이션을 Kubernetes Cluster에 구동하는 실습을 해 보았다. 생성한 스프링부트 프로젝트는 www.edwith.org/boostcourse-web/joinLectures/12943 [부스트코스] 웹 프로그래밍 강좌소개 : edwith - 부스트코스 www.edwith.org 에서 확인할 수 있는 실습 예제를 직접..

Ubuntu 인스턴스에 MySQL 올리기

Ubuntu 16.04에 Mysql 5.7 / 8.0.22를 설치하면서 구글링했던 내용들 정리 Mysql 설치하기 mysql-client : 데이터베이스에 연결하고, CLI로 mysql 명령어를 실행하기 위한 프로그램 mysql-server : 데이터베이스를 host, 관리하기 위한 프로그램. 일반적으로 둘 다 필요한 경우가 많음. sudo apt-get update sudo apt-get install mysql-server mysql-client cf. mysql 버전 8을 설치하고 싶은데, sudo apt-get으로 실행하면 5.7이 설치되는 경우 # 실행중인 mysql 프로세스를 종료한 뒤 sudo apt-get remove --purge mysql* sudo apt-get autoremove s..