[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을 나누어 전달/할당 원하는 시간에 작..
Git: dangling commit이란? 깃이 필수인 세상, 이제는 모를 수 없다 ! - 사실 학교에서 git을 활용해서 프로젝트하는 과목을 안들어서, 내 맘대로 쓰고있었지만 어찌보면 뜬금없이 통계학과에서 프로젝트 수업을 들으면서 git활용을 (제대로) 하기 시작했다ㅋㅋㅋ tmi: 통계학 교수님께서 언제부터 git을 썼냐, 어떻게 배웠냐고 물어보셨는데... 사실 저는 주전공인 컴과에서 git을 배운적이 없고요.. 질문 주신 교수님의 프로젝트 수업을 할 때, 뚝딱거리면서 혼자 배우면서 썼읍니다.. 회사 생활을 하면서 보니, 나는 정말 원격 저장소와 로컬 저장소의 개념조차 제대로 이해하지 않고 사용했음을 깨닫고... 내 머리를 여러번 내리쳐 가며 Git을 공부하고 있다. 지금도 아직까지 배워가고 있는 중이지만, 공부하면서 중요하다 생각했던 개념들과..
[Github] pull request(pr) 날리기 Hello, World! 이번 학기에 새로운 예측 프로젝트를 진행중이다. 뉴스기사수와 포털 트렌드의 주간 데이터들을 수집하여, 월간 경제 지표인 소비자심리지수를 예측하여 새로운 주간 경제 지표를 개발하는 프로젝트이다. 팀 프로젝트를 진행 중인데, 코드는 주로 새벽에 짜다보니, 회의 시간 이외의 팀간 의사소통을 카톡으로만 하는 것이 무리인 것으로 보였고, 드디어 활용해본 gitHub의 pr기능...✨👍✨ 이제야 써보다니.. 장점으로는, 코드 충돌을 방지할 수 있고, 내 코드에 대한 설명을 덧붙이기 좋고, 팀원들과 해당 pr에 대해 대화를 나눌 수 있다는 점. 그리고 또 당연히 버전 기록도 남는다. ✨유의할 점✨ PR과 merge는 다른 개념이다. merge를 하기 직전에만 PR을 날릴 수 있는 것이 아니고..