[Database] Materialized View 0. Materialized View Materialized View는 데이터베이스에서 쿼리의 결과를 미리 계산하여 저장하는 실제 테이블로, 데이터량이 많거나 복잡한 쿼리를 실행할 때 발생하는 성능 문제를 완화하기 위해 사용된다. 많은 양의 데이터를 처리해야 하는 경우, 복잡한 쿼리의 실행은 데이터베이스 서버에 부하를 줄 수 있고, 응답 시간이 길어질 수 있다. 특히, 필자의 경우에는 프로덕트에서 해당 API에 직접 요청을 주는데, 추후 트래픽이 증가하면 데이터베이스의 성능이 저하되어 서비스 중단이 발생할 위험이 있다고 판단했다. materialized view 테이블에 대해서 몰랐던 나는, ETL 잡을 돌리면서 쿼리 결과를 DB테이블 생성해서 저장해두는 방법을 생각했었다. 그러나 매일 바뀌는 연산 결과..
[APIdoc] REST API 문서화 툴 오늘은 REST api를 문서화하는 툴인 apidoc 사용법에 대한 글을 작성하고자 한다. 필자의 팀 내에서 api 문서는 Swagger 툴을 활용해서 문서화를 했었다. 그마저도 swagger를 사용하기보다는, 알아서 코드보고 파악하거나 해당 api개발자에게 간단한 명세를 요청하는 정도로 해결했었지만, 타사와의 협업할 기회가 생겨, api 명세서를 전달할 일이 생겼다. 깔끔하게 api 문서화를 해야했고, 팀의 판단으로는 Swagger 보다는 apidoc이 깔끔하고 한 눈에 들어온다고 생각했다. 결론적으로 apidoc 툴을 사용해서 명세서를 다시 작성하기로 결정했다. 초반에 Swagger를 선택했던 이유는, 팀 내에서만 api를 사용했기때문에, 운영에 리소스를 많이 들이지 않는 것이 목표였기 때문이다. 초..
[Ansible] Ubuntu 환경구성해보기 오늘은 Ansible로 ubuntu 환경구성하는 playbook을 직접 짜보려고 한다. 배경으로는 팀 내 프로덕트 장비들이 ubuntu 21을 사용하고 있었는데, ubuntu 22가 (작년에) 출시되면서 호환되지않는 장비들이 생겼다. 와이파이 랜카드 등... 이를 이유로 ubuntu 22.04로 드디어 업데이트해보려고 한다. Ansible을 활용해서 구성하면, 사실 업데이트라기보다는 처음부터 새로 구성하는 것이 맞는 말이긴 하다ㅎㅎ. 1. control node에 ansible, python 설치 복습) - managed node(host): 환경 구성의 대상이 되는 컴퓨터들. Host, Target 등등으로도 표현한다. - control node: 앤서블 플레이북을 수행하는 서버. linux/unix ..
[Ansible] 개념 공부 환경 구성 자동화 도구로는 가장 기초적으로 bash shell script을 사용한다. 현재 필자도 팀에서 환경구성을 쉘스크립팅으로 하고 있고 안정화 단계에 이르렀지만, 쉘 스크립트로는 완전히 자동화할 수 없는 영역들이 분명히 있기에, 초기에 스크립팅을 했던 필자에게만 환경 구성에의 정보가 쏠려있다는 단점이 있었다. 또한 아무리 매뉴얼을 작성해놓았다고 해도, human error는 항상 존재했다. 작업이 복잡해질 수록 human error가 생길 수 있는 여지는 더 커졌고, 인프라에 맞게 확장하기 어려워졌다. 이러한 이슈를 해결할 수 있는 방법을 고안하다가 알게 된 것이 Infrastructure as Code였다. 처음에는 조금 더 팀원들이 직접 관여하고 이해하기 위해 스크립팅을 했다면, 이제는 자동화..
[Fluentbit] 로그데이터 수집하기 팀 프로덕트에서 로그 수집기로 사용하는 툴인 fluent-bit을 소개하려고 한다. fluent-bit란? 로그 데이터를 수집, 필터링, 변환해서 대상 시스템으로 전달해주는 오픈소스 데이터 수집 툴(data collector)이다. 서버에 실시간으로 쌓이는 log파일들을 지정해서 수집 하며, http, tcp 통신을 통해 fluentd로 직접 전송이 가능하다. 다양한 Input, Output 플러그인을 지원하고 있고, 로그 데이터를 다양한 형식으로 전송할 수 있다. Elasticsearch, InfluxDB, Kafka,AWS S3등의 데이터 저장소와 통합하여 사용할 수 있으며, 필자는 fluent-bit으로 로그데이터를 수집하여 S3로 전송하도록 구성하여 사용하고 있다. 궁금했던 것 1. Fluent-..
[프로젝트 회고] 광고 성과 최적화 최근 회사에서 진행했던 프로젝트에 대한 간단한 소개와 어떤 구조의 시스템으로 설계되었는 지 설명해보려고 한다. 프로젝트의 이름을 붙여보자면 '광고 성과 최적화' 정도가 될 듯하다. 간단히 소개하자면, 초반에 광고들을 특정 횟수이상 만큼을 노출시킨 후, 성과를 측정해서 더 성과가 좋았던 광고를 선택해서 재생시키는 시스템이다. 성과를 어떻게 측정하냐고 물어본다면, 측정을 위해서는 MAB 알고리즘이 사용되는데, MAB모델 / 알고리즘보다는 해당 프로젝트의 시스템 자체에 대해 작성하고자 한다. 아키텍쳐 구성도 이 프로젝트에는 크게 서버에서 작동되는 코드가 있고, 광고가 재생 및 노출되는 클라이언트에서 작동되는 코드가 있다. 서버로는 크게 스케줄러 서버와 api 서버로 구성되며, 서버 사이드와 클라이언트 사이드에..
[Python] Celery를 활용한 스케줄링 시스템 오늘은 파이썬 프레임워크인 Celery을 활용한 스케줄링에 대해 작성하고자 한다. 작년 말에 celery를 이용한 프로젝트를 진행했었다. 여러 툴들을 비교하다가 celery를 스케줄링 도구로 사용했었는데, 시간도 지났고 당시 빠르게 구현해서 서비스화하는 것이 목표였어서 완벽히 이해하지 못하고 넘어갔었다. 이번 기회를 통해 제대로 정리를 해보고자 한다. celery란? [celery docs] Celery는 파이썬 프레임워크로, 비동기 테스크 큐 + 스케줄링 툴이다. Celery의 역할 요청에 대한 응답이 오래걸리는 task들이 있을 때, 해당 task를 비동기로 처리하도록 하고 바로 응답하게끔 처리할 수 있게 함 broker를 사용하여 적절한 worker들에게 job을 나누어 전달/할당 원하는 시간에 작..
글또의 서막 글또의 시작을 알리면서 그동안 내가 해왔던 업무들의 정리와 스스로의 피드백을 해보려고 한다. 그리고 덤으로 계속 하고싶었지만, 꾸준히 글을 쓸 엄두가 나지않아서 미루고 미루다 참여한 글또 활동에 대한 다짐까지! 글또의 시작: 2년동안 뭘 했는가? 간단한 소개를 하자면, 이제 겨우 3년차인 내가 해왔던 공부와 업무가 스펙트럼이 넓은 편이라 추억 속에 묻어두었던 기억까지 꺼내와야한다. (너무 깊이 숨겨둔 기억이라 셀프 리뷰를 꺼내읽었다) 현재는 MLops(보다는 devops에 가깝지만)로 일하고 있는, 3년차 소프트웨어 엔지니어다. 옵스 직무를 2년동안 해왔냐?하면 그건 또 아니다. 나의 소개글에 작성했듯이, 나는 데이터분석을 공부해왔고 어느 날 머신러닝 엔지니어가 되었다. 그리고 눈떠보니 배포 시스템을 만..
à propos de ma vie 아주 오랜만에 작성하는 블로그 글이다. 예전 글들을 다시 보니, 그 때의 감성들 심각하게 오글거리지만 귀여우니까 그냥 둬본다. 서점에서 일하면서 생겼던 문과 감성으로 쓴 글들이라 ... 하여튼 오랜만의 포스팅이라 꽤나 떨리는데, 심지어 내가 살아온 날들에 대한 글을 쓰려니 더 떨린다. 대학도 정시로 갔고, 회사도 자소서를 쓰고 간 경우는 아니라서 나의 삶에 대해 글을 쓰는 건 참으로 낯설다. 두근-두근-. - 식당 메뉴, 카페 메뉴로 도전하는 것을 싫어하고, 갔던 여행지를 다시금 느끼는 걸 더 좋아하는 나다. 새로운 도전을 싫어한다고 생각했던 나인데, 이 글을 쓰려고 되새기다보니 변수의 연속으로 생각지 못한 반전의 순간들을 살아온 것 같다. 나 사실은 도전을 좋아할지도? 1. 이혜승이 말을 한다구 ? 어..