본문 바로가기

분류 전체보기

[Varnish] Vary User-Agent HTTP Header가 캐시 퍼포먼스에 미치는 영향 Vary HTTP Header란? vary: Accept-Language, User-Agent, Cookie, Accept-Encoding 동일한 URL에서 사용자 에이전트에 따라 다른 응답을 내려줄 때 가용되는 Header이다. Vary User-Agent HTTP Header가 Cache Hit에 미치는 영향 과거의 웹 환경에서는 에이전트 환경 별로 보여주는 HTML이 달랐다. 그래서 Vary Header의 User-Agent 값을 활용하여 클라이언트 별로 다른 데이터를 내려줬다. 그러나 오늘날에는 에이전트별로 다른 HTML을 내려주지 않는다. 그리고 현대 웹 개발에서는 JSON 데이터으로 데이터를 주고받기 때문에, 유저 에이전트 별로 데이터가 다른 경우는 흔치 않다. 때문에 Vary HTTP Hea..
[Django] Django에서 MultiProccess 사용 시 주의사항 Django에서는 하나의 프로세스에서 하나의 커넥션을 맺는 것을 가정하고 있다. 그러나 Python에서는 프로세스를 사용하는 경우, 자식 프로세스에서 부모 프로세스의 자원을 복제한다. 때문에 Django에서 멀티프로세스를 사용하는 경우, 위와 같은 처리 때문에 오류가 발생하기 쉽다. 해당 문제의 대표적인 해결안으로는 자식 프로세스 시작 시, 모든 커넥션을 닫아주는 방법이 있다. def close_service_connections(): # close db connections, they will be recreated automatically db.connections.close_all() # close ES connection, needs to be manually recreated connection..
루비 개발자가 파이썬 개발자가 된다면? 나는 2015년도에 스타트업에서 백엔드 엔지니어로서 처음 프로그래밍 일을 시작했다. 2010년대 초에는 가독성이 높고, 생산성이 높은 웹 프레임워크가 인기를 끌었다. 루비온레일즈도 그 중 하나였고, 당시에 시작된 많은 스타트업에서 루비온레일즈를 주력 언어로 채택하고는 했다. 첫 직장도 이러한 배경으로 루비온레일즈를 주 언어로 사용했다. 그래서 메인 서비스가 루비온레일즈로 구현되었고, 이 곳에서 3년간 루비를 사용했었다. 나는 루비의 긱한 이미지와 희소성을 좋아한다. 드라마 실리콘밸리의 주인공인 리처드도, 처음에는 루비로 프로그래밍을 시작했다. 그래서 루비가 더 특별하고 재미있게 여겨졌다. 그리고 루비의 동글동글한 문법과, 한 편의 글을 쓰듯이 프로그램을 작성할 수 있단 점을 좋아한다. 그 중, 테스트 프..
이커머스에서 검색엔진이 필요한 이유 이커머스에서 검색엔진이란, 사용자들이 쉽게 상품을 검색할 수 있게 해주는 기술을 의미한다. 상품 검색을 아래와 같이 DB에 상품명을 단순 조회하는 방법으로 생각할 수 있지만, 이 방식은 몇가지 한계가 있다. SELECT * FROM products WHERE product_title LIKE '%{search_query}%' 1. 상품명이 정확하게 일치해야 상품을 조회할 수 있다. 위와 같은 쿼리로 "리버시블 무스탕”을 검색하면, "램스울 리버시블 숏 무스탕”이라는 상품은 검색할 수 없다. 완전 일치되는 상품만 검색할 수 있기 때문이다. 2. 검색 결과를 가중치에 따라 정렬할 수 없다. 정확도순 (계절/키워드 가중치 등), 추천순 등을 반영하기 어렵다. 3.하나의 속성에 대한 검색만 가능하다. 위의 쿼리..
(Django) Django에서 Thread를 다룰 때 주의할 점 💡한줄 요약 Django 스크립트에서 Thread를 사용하는 경우, Thread가 종료될 때 명시적으로 DB Connection을 닫아주는 것이 좋다. Djagno에서 Thread를 사용할 때, DB Connection이 관리되는 방식 Django에서 DB에 접근하는 Thread를 사용하는 경우, Thread마다 새로운 DB Connection을 생성된다. Django는 request가 종료될때, request_finished signal을 발생시켜 지난 DB Connection들을 모두 닫는다. ( 참고 - DB Connection을 관리하는 방법 ) 즉, Thread에서 만들어진 DB Connnecion은 Thread를 실행시킨 메인 프로세스가 종료될 때 닫힌다. import threading fro..
2019년 회고 슬기로운 직장생활 멋진 제품 만들기 난 현직장에서 만드는 제품을 좋아한다. 같은 기능이여도 멋지게 디자인되고 운영되는 모습을 보면 더 보람차고는 한다. 2018년 5월, 현직장에 입사하던 당시, 내 목표는 최소 3개의 신규 피쳐를 만드는 것이였다. 작년에는 경매라는 실험적인 서비스를 출시했었고, 올해에는 동영상 플랫폼을 준비했다. 처음에는 신규 아키텍처와 프랙티스 도입이 어색하고, 어렵게 느껴졌었다. 그런데 백엔드 동료들과 많은 토론을 하고, 기술 리서치도 하다보니 플랫폼에 대한 이해도가 쑥쑥 올라갔다. 🏋️ 이 과정 중에 새로 실험하고, 학습하고, 성장한 것들이 많았다. 이렇게 학습한 내용들은 기존 애플리케이션에도 전파되고 있다. 아래와 같은 것들을 시도했었다. 😌 포스트맨을 팀단위로 활용하기 mock..
[APM]Elastic APM Agent 튜닝하기 최근에 회사에서 Elastic APM을 도입했다 ! 호호 🙉 쌩으로 도입한 후, 1주일 지켜본 결과. 몇가지 튜닝이 필요한듯하여 관련 자료를 찾아보았다! ( 튜닝을 안하니 APM Queue가 가득 찼다는 오류가 난다 🙈 ) 1. Sample Rate APM 에이전트에서 기본적으로 샘플링된 트랜잭션을 수집하긴 하지만, 수집 비율을 조정할 수 있다. transaction_sample_rate 설정을 조정하면 스토리지 비용과 APM 운영으로 인한 부하를 줄일 수 있다. 100% 샘플링을 하더라도 Agent가 API 응답시간에는 영향을 미치지 않는다. 그리고 샘플링되지 않은 트랜잭션이더라도 응답시간 같은 기본 정보들은 수집된다. https://www.elastic.co/guide/en/apm/agent/java..
동영상 플랫폼 이해하기 (2) - AWS MediaConvert AWS 미디어 컨버트란? 파일기반 콘텐츠를 여러 디바이스에 송출할 할 수 있도록 파일을 변환해주는 프로그램이다. File based Transcoding이란? 영상 콘텐츠 파일에 영상 변환과 압축, 패키징, 접근 권한 제어를 수행한다. 영상 변환 영상 파일의 해상도를 낮춰서 파일을 압축하거나, 파일을 여러개로 분할해주는 역할을 수행한다. Adative Streaming을 위하여, 네트워크 대역폭별로 내려줄 영상 파일을 지정할 수 있다. 영상의 썸네일 이미지를 추출할 수 있다. 영상 음성 파일을 추출해준다. 영상 파일 포맷을 변환해준다. 예를 들어, m2ts 포맷 영상 파일을 hsl, mp4 파일으로 변환해준다. 패키징 여러 디바이스 타입에서 영상파일을 사용할 수 있도록 영상 파일을 패키징을 한다. 접근 ..