장문의 위키를 작성했는데 막판에 이런 문구가 뜨면 공포 그 자체다 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를 입력할..
클러스터를 생성할 때 함께 만든 슈퍼계정 이름을 변경하는 방법을 기술합니다. 우선, 계정 이름을 변경하는 쿼리는 다음과 같고 슈퍼계정 권한이 있어야만 실행할 수 있습니다. ( 기존 계정 이름이 admin이고 이를 sysadmin으로 변경하겠다는 예제입니다 ) alter user admin rename to sysadmin; 하지만 위에 쿼리를 실행하면 아래와 같은 에러를 만나게 됩니다. 현재 접속한 계정의 이름을 변경할 수 없다는 내용입니다. 이 상태에서 우리가 선택할 수 있는 방법은 1) 임시 계정(tempadmin)을 추가로 2) 임시 계정에 슈퍼계정 권한을 줍니다 3) 임시 계정으로 접속해서 기존 계정(admin)의 이름을 변경해줍니다 4) 그리고 다시 변경된 이름(sysadmin)으로 접속해서 임..
작은 프로젝트를 진행할 때도 메시지 브로커는 아키텍처에 따라 필요한 경우가 종종 있습니다. 이때 Apache kafka를 쓰자니 배보다 배꼽이 커지고, 클라우드의 메시지 큐(AWS SQS 등)를 사용하자니 벤더 락인(vendor lock-in)이 우려될 때 Redis stream은 아주 좋은 대안이 됩니다. 혹시 kafka를 redis pub/sub과 비교하려 한다면 정확한 비교가 안되는데 토픽 개념은 유사하지만 redis pub/sub에는 소비자 그룹의 개념이 없기 때문입니다. ( stream에서 xread의 경우에는 소비자 그룹을 사용하지 않습니다. xgroupread로 접근하는게 맞습니다. 소비자 그룹의 개념이 들어가면서 메시지가 잘 도착했는지 확인이 가능합니다. 혹시 메시지 전달의 성공/실패/처리..
macOS에서 docker를 사용하기 위해 그간 Docker Desktop을 사용해왔었는데 유료화 소식이 전해져 왔다. Docker Desktop은 개인은 무료, 기업은 직원이 250명 이상이거나 연매출이 대략 110억($10 million) 이상인 경우 유료 버전을 사용해야 한다 (아직 유예기간 있음). https://www.docker.com/blog/updating-product-subscriptions/ Docker is Updating and Extending Our Product Subscriptions - Docker Blog Learn from Docker experts to simplify and advance your app development and management with Do..
redis를 사용하면서 필요에 의해 CONFIG SET을 통해 설정을 변경하는 경우가 있습니다. 아마 처음 config set을 검색했을 때 목적은 notify-keyspace-events 변경을 통해 key expire에 대한 이벤트를 받기 위해서가 많을 듯합니다. notify-keyspace-events 변경은 아래 페이지에 자세히 설명되어 있습니다. https://redis.io/topics/notifications Redis Keyspace Notifications – Redis *Redis Keyspace Notifications IMPORTANT Keyspace notifications is a feature available since 2.8.0 *Feature overview Keyspac..
키보드 자판 위에 vim 단축키를 나타내는 이미지가 돌아다니지만 입문자 입장에서 보기 어렵지 않을까 싶은 생각에 입문자용 핵심 단축키 정리를 마음먹었다. 아래 이미지를 보시라. 한글 버전판도 있지만, 입문자에게 이게 다 무슨 소리인가 싶지 않겠냐는 거다. 우주선 조종 기판 같다. 나는 개발 커리어를 리눅스 커널로 시작해서 약 7년간 vim으로만 개발을 해왔으면 이후에도 IntelliJ에 vim 플러그인을 이용하는 등 광적으로 vim을 사랑하는 유저이다. 지금이야 순정이 좋지!라는 마음으로 웬만하면 IDE는 그냥 플러그인 없이 순정으로 이용하는 편이지만. 아무튼 각설하고 vim을 처음 입문하는 사람에게 실제로 도움이 될만한 단축키를 설명하도록 한다. 본문에 있는 단축키는 모두 완벽하게 손으로 익혀주는게 좋..
scrapy는 웹사이트에서 필요한 데이터를 추출하는 오픈소스 프레임워크입니다. 네, 많고 많은 crawler 중에 하나입니다. 혹시 듣보잡 아니냐고요? 네, 뭐 구글 트렌드로 다른 크롤러와 비교해보면 크게 뒤떨어지는 건 사실입니다. (지난 5년간 대한민국 기준 트렌드 자료입니다. 파란색이 selenium, 노란색이 beautifulsoup, 빨간색이 scrapy) GitHub에 Star를 인기의 척도라고 본다면 scrapy는 상당히 인기 있는 프레임워크로 볼 수 있습니다. 이 말인즉, 개발자에게는 꽤나 인기 있는 크롤러라는 겁니다. 아래를 보세요. 스타 수가 무려 41.1k 개고 아직도 활발히 개발되고 있습니다. scrapy는 가볍고, 빠르고, 확장성이 좋습니다. 개발자는 파이썬 기반으로 spider라고..
앞서 docker-compose를 통해 airflow를 심플하게 설치하는 방법에 대해서 다뤄봤습니다. 스터디, 혹은 가벼운 인프라에서 사용되는 목적이라면 기본 설치된 airflow 환경으로 충분합니다. 하지만 조금 더 묵직한 환경에서 운영이 되어야 한다면 튜닝이 필수인데요, 튜닝에 어떤 것들이 있는지 살펴보도록 하겠습니다. # concurrency, max_active_runs 아마도 튜닝의 첫 단계가 아닐까 싶습니다. airflow의 목적은 병렬로 다수의 task를 운영하는 것이기 때문에 concurrency, max_active_runs 옵션은 제일 먼저 손봐줘야 하는 부분이 될 겁니다. 각각이 나타내는 의미는 아래 그림에서 가장 잘 표현되어 있습니다. 이 이상의 설명은 존재할 수 없을 듯. 설정은 ..
이전 글에서 Airflow란 무엇인지 알아봤습니다. 이번 글에서는 플랫폼을 구축해보고 기본적인 터미널 명령어를 살펴보도록 하겠습니다. 위에 그림에 있는 것처럼 airflow를 구축하기 위해서는 webserver, scheduler, worker, database까지 함께 움직이는 서비스가 많습니다. 이것들이 조합되면 airflow라고 하는 워크플로 플랫폼이 완성되는 겁니다. 여기 있는 서비스를 하나씩 설치하면서 고생하기에는 우리의 시간이 넉넉하지 않죠? 이번 글은 airflow를 제일 빠르고 간편한 방법으로 만날 수 있는 docker-compose를 통한 설치 방법을 알아봅니다. # docker로 airflow 설치 airflow를 운영하려는 환경에 docker-compose가 설치되어 있는지, 설치되어..
Airflow는 Airbnb에서 2014년 10월 시작된 오픈소스 프로젝트입니다. 오픈소스로 2015년 6월 발표되었으며 2016년 3월에 Apache Software Foundation에 인큐베이팅되었어요. 그리고 2019년 1월 아파치 재단은 Apache Airflow를 탑티어 프로젝트로 발표했습니다. 자, 그럼 Airflow가 무엇인지 천천히 살펴보도록 하겠습니다. airflow는 workflow를 구축하고 실행할 수 있는 하나의 플랫폼입니다. 워크플로라는 단어가 모든 것을 설명해주는데요, airflow에서 워크플로는 DAG(Directed Acyclic Graph)으로 표시되며 세부사항으로는 개별 작업을 포함해서 종속성 및 데이터 흐름을 정렬하게 됩니다. 이게 다 무슨 소리인가 싶을 수 있는데요...
AWS에서 EC2를 제 돈 주고 쓰면 많이 손해입니다. 비용을 절약할 수 있는 몇 가지 방법이 있는데요, SP (Savings Plans) RI (Reserved Instances) Spot 이렇게 기본적으로 세 가지를 언급할 수 있겠습니다. 이번 글에서는 Spot의 설명은 아니고, 그래서 얼마나 할인되는데? 에 대한 이야기를 해보려고 합니다. 위에 그림에서 보여지듯이 Spot Instance 가격은 c5.large 기준으로 리전 별로 차이는 보이지만 최대 64%까지 할인되는 것을 볼 수 있습니다. 한 달이면 $44 차이까지 발생하죠. 이런 인스턴스 열 대를 운영하면 $440입니다. 절대 무시할 수 있는 수준이 아닙니다. 위에 표를 볼 수 있는 경로는 EC2 -> INSTANCES -> Spot Requ..
AWS에서 선택 가능한 EC2 인스턴스 타입은 범용, 컴퓨팅 최적화, 메모리 최적화, 가속화된 컴퓨팅, 스토리지 최적화로 나눌 수 있습니다. 이번 글에서는 범용 타입에서도 버스터 가능한 인스턴스 타입을 소개합니다. 버스트(burst) 가능한 인스턴스 타입은 현재(2021-05-06) 기준으로 T2, T3, T3a, T4g 네 가지 타입이 존재하고 각각의 타입은 CPU와 메모리에 따라서 nano, micro, small, medium, large, xlarge, 2xlarge로 나누어집니다. T 타입 인스턴스에는 CPU credits이라는 개념이 존재하는데 CPU 유휴시간에 따라 credits을 획득하고, CPU가 사용되면 사용률에 따라 획득한 크레딧을 소모하게 되는 구조입니다. 이 의미를 상세히 이해하기..
ECS 클러스터 안에 서비스를 등록할 때 선택하게 되는 Service type에 대해서 살펴보겠습니다. 먼저 옆에 i 아이콘에 마우스를 올려서 팝업 도움말을 살펴보면 다음과 같은 문구를 볼 수 있습니다. Replica services place and maintain a desired number of tasks across your cluster. Daemon services place and maintain one copy of your task on each container instance. If a capacity provider strategy is used, the DAEMON service type is not supported. 위의 내용은 아래와 같이 정리하고 사용할 수 있습니다 # R..
SQLAlchemy는 애플리케이션 개발자에게 SQL의 모든 기능과 유연성을 제공하는 Python SQL 툴킷 및 객체 관계형 매퍼입니다 (공식 홈페이지 소개 문구). 모든 데이터베이스 객체를 다룰 때 신경 써야 하는 부분이 트랜잭션(Transaction)인데 SQLAlchemy도 예외는 아닙니다. 공식 홈페이지의 예제를 통해 기본적인 트랜잭션 관리를 살펴봅시다. from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # an Engine, which the Session will use for connection # resources engine = create_engine('postgresql://scott:tiger@l..
컨테이너와 컨테이너 인스턴스라는 용어로 본문에 많이 등장합니다. 컨테이너 인스턴스는 클러스터에 묶여있는 EC2 인스턴스를 나타냅니다. 표준 표현을 따르다 보니 본문을 읽는데 어려움이 있을 수 있습니다. 이번 글에서는 Task, Container에 CPU와 Memory 설정에 대해 알아봅니다. ECS를 처음 접하면 리소스를 설정하는 곳이 너무 많아서 정신이 혼미해질 정도인데요, 추려보면 다음과 같습니다. 인스턴스의 CPU, Memory 설정 (인스턴스 타입에 따라 고정, 혹은 custom 사용) task의 CPU, Memory 설정 container의 CPU, Memory 설정 위에서 아래로 갈수록 작은 개념으로 이어집니다. 직감적으로 보면 container는 task 안에서 돌기 때문에 당연히 task에..
ECS를 구축, 관리하기 위해서는 그 안에서 사용되는 용어를 이해해야 합니다. 이번 글에서 ECS에서 통용되는 용어들의 개념을 이해하도록 합니다. 자원 개념 위에서 아래로 내려갈수록 큰 개념으로 생각하시면 됩니다. container는 ECS에서 가장 작은 단위, cluster가 가장 큰 단위입니다. # container 단순히 시야가 제한된 리눅스 프로세스입니다. namespace 분리로 컨테이너 환경 안에서 호스트의 프로세스 목록을 볼 수 없고, 루트 디렉터리 변경으로 호스트의 디렉터리를 볼 수 없도록 제한합니다. (chroot) 끝으로 제어 그룹을 통해 컨테이너가 접근할 수 있는 자원을 제어합니다. (control group) 우리가 알고 있는 바로 그 컨테이너의 원리죠? # task definiti..
- Total
- Today
- Yesterday