helm upgrade --install 명령어가 실패하는 경우가 있습니다. $ helm upgrade --install airflow apache-airflow/airflow --namespace airflow --create-namespace Release "airflow" does not exist. Installing it now. Error: failed to download "apache-airflow/airflow" 공식문서에 있는 명령어를 그대로 사용했음에도 오류가 나는 경우는, 일반적으로 이미 오래전에 helm repo를 추가해두고 방치한 경우일겁니다. 아래와 같이 repo를 업데이트 해주세요. $ helm repo update Hang tight while we grab the late..
AWS에 대표적인 Data Warehouse 제품인 Redshift에 Serverless 버전의 비용 관련된 내용이 잘 정리된 글이 없어서 이번 기회에 정리해 봅니다. 글을 정리하는데 백서도 도움이 됐지만 메가존 포럼과 AWS Global Center의 도움을 많이 받았습니다. 우선 Redshift Serverless 비용을 이해하려면 Redshift Processing Units(RPUs) 개념을 알아야 합니다. Redshift Serverless는 워크로드에 따라 자동으로 컴퓨팅 파워를 확장하는데 그게 RPUs 단위입니다. 가벼운 쿼리는 32 RPUs(최소 설정 값)로 처리되고 좀 더 복잡한 쿼리는 최대 512 RPUs까지 늘어납니다. 기본 값을 Base capacity라고 하는데 이 값을 32부터 ..
첫 번째 글을 통해 슬랙 앱을 설치했고 두 번째 글에서 로컬 PC에서 ChatGPT를 서비스하는 방법을 살펴봤습니다. 이번 글에서는 앞서 소개한 소스코드를 클라우드에 올려두고 슬랙에 연동해서 사용해 볼 겁니다. 슬랙 앱이 없다면 첫 번째 글을 참고하시고, 두 번째 글은 슬랙 앱에 권한 설정 부분과 토큰을 얻는 설명이 있기 때문에 부분적으로 참고하셔야 할 겁니다. 만약 권한 같은 문제를 이미 통달하셨다면 이번 글만 보셔도 상관은 없습니다. 자, 그럼 클라우드로 출발합니다. 우리는 Google Cloud 를 통해 서버리스 환경에서 ChatGPT와 슬랙앱을 운영해 볼 겁니다. 대략적인 아키텍처는 아래와 같습니다. 보이는 것처럼 아주 심플합니다. Cloud Run은 fully-managed serverless ..
이번 글에서는 ChatGPT를 로컬 PC 서비스하기 위한 과정을 살펴볼 겁니다. 이 과정을 준비하기 위해서는 첫 번째로 Slack App이 필요합니다. 혹시 아직 앱이 없으시다면 이전 글을 참고해서 앱을 먼저 생성해 주세요. 두 번째는 ngrok이라는 애플리케이션이 필요합니다. 그리고 끝으로는 제가 만든 애플리케이션을 동작시키기 위해 Git과 Python이 필요합니다. 먼저 ngrok 은 Slack에서 발생하는 메시지를 내 PC에서 받아서 처리하기 위해 필요한데요. 설치를 포함한 자세한 내용은 여기 글을 통해 확인하시기 바랍니다. # OpenAI 회원 가입 및 토큰 획득 우리 프로그램을 돌리기 위해서는 OpenAI API를 호출할 수 있는 토큰 정보가 필요합니다. https://platform.opena..
이번 글에서는 연일 화제를 이어가고 있는 ChatGPT를 슬랙에 연동하는 과정을 살펴보겠습니다. 소스코드는 제가 모두 준비해 놨으니 천천히 따라오시면 누구나 슬랙에 ChatGPT를 사용하실 수 있을 겁니다. 글은 총 세 편으로 이어질 겁니다. 첫 번째 글에서는 슬랙 앱을 생성하고 두 번째 글에서는 로컬에서 서비스를 실행시켜 ChatGPT를 슬랙에 연동할 겁니다. 세 번째 글에서는 클라우드에 서비스를 배포하고 운영하는 내용을 다룰 겁니다. 자, 그럼 첫 번째 글을 시작합니다. 첫 번째 글에서는 슬랙 앱을 생성합니다. 아주 간단한 과정으로 이어지니 편하게 따라와 주시면 됩니다. 먼저 https://api.slack.com/apps로 접속해서 앱을 생성하도록 하겠습니다. 사이트에 접속했으면 Create New..
Google Analytics 4(GA4)는 구글에서 제공하는 웹 분석 도구 중 하나로, 기존의 Universal Analytics (UA)와는 다른 구조와 기능을 가지고 있습니다. GA4는 향상된 사용자 경험과 효율성, 광고 및 마케팅 분석 등을 위해 개발되었습니다. 기존의 UA와는 달리, GA4는 이벤트 중심의 데이터 수집 방식을 채택하고 있습니다. 이벤트 중심의 데이터 수집은 화면 뷰나 페이지 뷰 등에 대한 추적이 아닌, 사용자가 웹 사이트에서 수행하는 작업에 초점을 둡니다. 예를 들어, 사용자가 제품을 구매하거나 동영상을 시청하는 등의 작업은 이벤트로 수집되며, 이를 기반으로 사용자의 행동 패턴 등을 분석할 수 있습니다. 또한, GA4는 머신 러닝을 활용한 분석 기능을 제공합니다. 예를 들어, 사..
Google Cloud Platform(GCP)하면 역시 빅쿼리(BigQuery)를 빼놓을 수 없습니다. 타사 어떤 DW(Data Warehouse)와 비교해도 더 우수한 성능을 자랑하며 사용성도 뛰어나니까요. 실례로 Redshift는 파티셔닝을 지원하지 않아서 데이터 관리에 불편함이 있는데 빅쿼리는 이를 지원합니다. 혹자는 Redshift는 데이터/비즈니스에 맞게 튜닝을 해야 성능이 나오지만 빅쿼리는 그냥 그 상태로 성능을 낸다고도 합니다. 각설하고, DW 때문에 혹은 빅쿼리의 강력함 때문에 AWS에 쌓아둔 데이터를 Google Cloud에 Cloud Storage로 옮기려고 하시는 분들도 계신데요. 이런 상황을 타개하기 위해 빅쿼리 옴니(BigQuery Omni)를 사용할 수 있습니다. 빅쿼리 옴니는..
Google Cloud Run online hackathon 에 참여했습니다. APAC을 순회하며 이벤트를 하고 있는 것 같은데 한국은 9월 27일이었네요. 해커톤의 기본 룰은 간단했습니다. 퀵랩을 통해 모든 환경은 제공받고 GitHub에서 기본 코드까지 내려받을 수 있었습니다. 그야말로 클릭 대여섯 번이면 게임에 참여가 가능했죠. 다만, 점수를 올리려면 소스코드에 본인만의 로직을 개발해야 했습니다. # 해커톤 방식 해커톤은 게임 형식으로 진행됐습니다. 마치 크레이지 아케이드처럼 바둑판 모양의 경기장에 사용자가 로그인합니다. 여기서 "사용자"는 해커톤 참가자가 배포한 cloud run 애플리케이션입니다. 경기장은 1초에 한 번씩 입장한(등록된) cloud run 서비스 전체를 호출합니다. 이때 경기장의 ..
코로나 때문에 개발자 오프라인 콘퍼런스는 멸종했었는데 정말 오랜만에 코엑스 그랜드볼룸에서 콘퍼런스가 열렸습니다. 인프콘 2022. 약 만 명 정도가 신청을 했다는 후문인데요, 그중에 (짐작건대) 1~2천 명 정도 추첨하지 않았을까 싶습니다. 그럼 현장의 내용과 함께 세션에 대한 간략한 요약을 해보겠습니다. 우선 아래는 이번 행사의 전체 타임라인입니다 코엑스 그랜드볼룸은 갈 때마다 길이 헷갈리는데요. 이번에는 대-충 개발자처럼 복장하신 분들이 지하철을 내려서 우르르 가시는 걸 따라가 보니 쉽게 도착할 수 있었습니다(웃음). 자, 코엑스에 들어서자마자 어마어마한 인파에 놀라게 됩니다. 우리 회사도 열심히 채용하고 있는데 개발자들 어디 있나 했더니 여기 다 계셨네요!! :) 위에 사진으로는 "사람이 많은 건가..
2019년 11월 GA 된 Cloud Run은 퍼블릭 클라우드에서 서버리스 애플리케이션 분야의 게임 체인저로 단숨에 자리 잡았습니다. Cloud Functions의 경우 multiple language runtime 개수도 부족해서 타사의 FaaS(Functions-as-a-Service)를 쫓아가기 바쁜 상황처럼 느껴졌는데요. 그러던 와중에 Cloud Run이 등장하게 됩니다. Cloud Run은 Cloud Functions 대비해서 인스턴스 크기가 커졌습니다. 즉, CPU, Memory를 더 풍성하게 사용할 수 있게 된 거죠. 그뿐만이 아니라 Cloud Run은 클릭 몇 번으로 트래픽을 버전별로 분할해서 처리할 수 있고 function instance에서 처리 가능한 요청 개수(maximum requ..
클라우드 인프라를 구축하는 방법은 0) 프로바이더가 제공하는 웹 대시보드에서 생성 1) 애드 훅 스크립트(bash, shell script) 사용 2) 구성 관리 도구(Chef, Puppet, Ansible, Saltstack) 3) 서버 템플릿 도구(Docker, Packer, Vagrant) 4) 서버 프로비전 도구(Terraform, CloudFormation, Openstack Heat) 이렇게나 다양합니다. 오늘은 테라폼을 통해 GCP 인프라를 구축하기 위해 그 뼈대가 되는 모듈 구조에 관해 이야기해봅니다. 본문에서 사용하는 코드는 GitHub으로 제공되니 전체 코드가 궁금하신 분은 링크를 참고하시면 되겠습니다. 이 글은 GCP 기준으로 작성했지만, AWS, Azure 등 어떤 provider를..
MacOS에서 5000번 포트를 사용하려는데 이미 포트가 사용 중이라는 오류를 본 적이 있나요? OSError: [Errno 48] Address already in use netstat 을 통해 살펴보면 실제로 5000번 포트가 열려있습니다. 그런데 내가 실행한 프로그램은 아닌 거죠. jybaek:~$ netstat -nat | grep 5000 tcp6 0 0 *.5000 *.* LISTEN tcp4 0 0 *.5000 *.* LISTEN 어떤 애플리케이션에서 열고 있는 건지 lsof 로 살펴봐도 잘 모르겠습니다. jybaek:~$ sudo lsof -i :"5000" COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ControlCe 460 jybaek 22..
KubernetesExecutor 적용에서 이어지는 내용입니다. 환경 구성이 끝났다는 가정하에 진행합니다. 앞에서 만든 values.yaml 파일을 수정하고 적용해야 합니다. 이 파일은 계속 사용되므로 VCS(Version Control System)에서 관리하면 좋습니다. 자, 파일을 열어보면 gitSync라는 설정 부분이 있습니다. 이 부분을 수정해서 Kubernetes에서 Sidecar Pattern으로 gitSync를 사용할 수 있습니다. 이름부터 직관적이라 어떤 기능인지 이해하는데 어려움은 없습니다. 일단 values.yaml 파일에서 관련된 부분을 살펴보시죠. # Git sync dags: persistence: # Enable persistent volume for storing dags e..
EKS 위에 Airflow 구성에서 이어지는 글에서 이어지는 내용입니다. 환경 구성이 끝났다는 가정하에 진행합니다. 헬름 차트를 통해 EKS 위에 Airflow 배포가 끝났다면 이제 Executor를 변경해보도록 합시다. 단계는 아주 간단합니다. 1) 설정 파일을 다운로드하고 2) 파일 내용을 원하는 방향으로 수정합니다 3) 끝으로 수정된 파일을 배포하는 순서입니다. 먼저 설정 파일을 아래처럼 다운로드하도록 합니다. $ helm show values apache-airflow/airflow > values.yaml artifacthub에 접속해서 다운로드하여도 상관없습니다. 혹은 GitHub을 방문해도 됩니다. 이제 파일을 열고 수정해 줍니다. 아래 내용 기준으로 executor에 있는 CeleryExe..
EKS 생성은 모두 끝났다고 가정하고 진행합니다. 이 글은 Kubernetes를 설명하는 글이 아니므로 namespace, pod, kubectl, helm 등 K8S와 함께 등장하는 용어에 대한 깊이 있는 설명은 하지 않습니다. 로컬 PC에서 aws 명령어를 통해 EKS 컨텍스트를 추가합니다. 무슨 의미인지 해석하실 필요 없습니다. 쉽게 생각해서 로컬에서 kubectl 명령을 사용할 때 바라보게 되는 곳이 AWS EKS라고 생각하시면 됩니다[1]. --name 뒤에 transformer-dev는 각자의 설정에 맞게 변경해주시기 바랍니다. transformer-dev는 이 글이 작성될 때 기준으로 테스트한 EKS 클러스터 이름입니다. $ aws eks --region ap-northeast-2 updat..
장문의 위키를 작성했는데 막판에 이런 문구가 뜨면 공포 그 자체다 Error converting ADF to storage format 컨플루언스(위키)에서 지원하지 않는 포맷으로 글을 작성했다는 의미인데, 세부적으로 파 해쳐 보면 유효하지 않은 특수문자가 글의 제목이나 본문 어딘가에 포함된 경우이다. 응? 특수문자라고? 난 입력한 적이 없는데? macOS Monterey의 입력 버그로 보인다. 왜냐면 그 이전 버전에서는 이와 같은 오류를 만나본 적이 없다. 문제의 원인은 타이핑하는 도중에 백스페이스(\b) 자체가 특수문자로 입력이 돼버린 거다. 그런데 대부분의 사람들은 이 오류를 만나지 않는다. 유독 일부 인원에게만 나타난다. 대충 감이 오지 않나? 바로 키보드 타이핑 습관이 이 오류를 만나게 해준다...
재택근무가 계속되면서 화상으로 진행되는 미팅의 개수가 아주 많아졌다. 더욱이 직책을 맡고 있는 사람이라면 여러 개의 회의가 동시에 진행되는 상황도 마주하게 된다. A 회의와 B 회의가 동 시간에 진행되어 모두 참석하는 경우다. 보통 흔한 케이스는 아니지만 중간에 짧은 의견만 내는 수준이라면 겹쳐도 큰 문제는 없다. 혹은 듣기만 해도 되는 자리라던지. 이런 케이스는 오히려 재택근무의 특수성을 잘 이용하고 있는 경우겠다. 아무튼, 그런데 여러 회의를 들어가면 일단 사방에서 흘러나오는 소리가 귀에 꽂힌다. A 회의실과 B 회의실에서 여러 발화자가 이야기를 하니 알아듣는 게 매우 어렵다. 고도의 집중력이 필요하다. 모든 회의가 끝나고 나면 체력소모가 느껴질 정도. 그런데 더 어려운 상황은 A 회의실에서 이제 내..
pycharm, datagrip을 최신 버전으로 업데이트했을 때 메뉴가 전부 현지화(한글) 되어 버렸다. 아마 IntelliJ를 포함해서 JetBrains에서 나오는 모든 프로그램이 동일하지 않을까 하는 예상된다. 자, 그럼 메뉴를 영어로 되돌리고 싶으신 분들은 최신 버전으로 업데이트될 때 자동으로 설치된 "Korean Language Pack / 한국어 언어 팩" 플러그인을 제거해주면 되겠다. 딱히 영어가 능숙한 건 아니지만 이미 눈에 익어버려서 한글 메뉴는 매우 불편하게 느껴졌다. 왜 이런 업데이트를 감행했을까? 아무튼, 메뉴 위치는 Preferences -> Plugins에서 찾을 수 있다. 영어로 변경하고 나서 다시 마음이 편-안 해졌다. :) 그러고 보니 파이참은 한 2년 만에 업데이트한 건가...
컨테이너를 생성할 때 제한은 아래와 같이 해줍니다. 메모리는 b, k, m, g로 설정할 수 있습니다. 여기서 적용되는 메모리 제한은 hard limit입니다. 해당 메모리를 초과해서 사용하려고 하면 OOM(out of memory)이 발생됩니다. $ docker run -d -it --name local-python --memory=1g python:3.8-slim /bin/bash 한편, memory를 따로 설정하지 않으면 0으로 적용됩니다. 즉, 호스트의 메모리 전체를 공유해서 사용하게 됩니다. 잘 적용되었는지는 inspect 옵션을 통해 확인할 수 있습니다. $ docker inspect local-python | grep Memory "Memory": 1073741824, "KernelMemor..
한 개의 터미널에서 여러 화면을 사용해야 할 때 screen은 매우 유용합니다. 백그라운드로 돌려야 하는 작업도 " > /dev/null 2>&1 " 같은 꼬리표보다 가끔은 screen이 편할 때도 있죠. 이번 글에서는 screen을 빠르게 사용하기 위한 기본 커맨드를 알아봅니다. # screen 실행 screen -S sockname screen은 이름을 갖습니다. 이름으로 구분해서 스크린을 사용할 수 있죠. 보통 여러 개의 스크린을 운영할 일은 드물기 때문에 적당히 본인만의 이름을 사용해도 크게 무리는 없습니다. 여기서는 sockname을 이름으로 사용했습니다. # screen 빠져나오기 Ctrl + a + d 스크린을 빠져나올 때는 위의 커맨드를 순서대로 눌러주면 됩니다. 마치 영어를 AD를 입력할..
- Total
- Today
- Yesterday