본문 바로가기

분류 전체보기

[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..
(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..
[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 파일으로 변환해준다. 패키징 여러 디바이스 타입에서 영상파일을 사용할 수 있도록 영상 파일을 패키징을 한다. 접근 ..
동영상 플랫폼 이해하기 (1) - HLS 이번 포스팅에서는 스트리밍 동영상 플랫폼을 구성하기 위해 필요한 사전 지식을 정리하고자 합니다. HLS이란? HTTP으로 영상 스트리밍을 할 때 사용하는 프로토콜을 의미합니다. 이 프로토콜은 2009년에 애플에서 공개한 표준이며, 현재는 많은 플랫폼에서 HLS 프로토콜을 지원하고 활용하고 있습니다. HLS 특징 HLS 프로토콜을 사용하면 네트워크 상태에 따라 영상 화질을 선택할 수 있는 Adaptive Bitrate Streaming을 사용할 수 있습니다. 그리고 클라이언트에서 영상을 청크 단위로 쪼개서 다운받을 수 있고, 부분 재생을 할 수 있는 기능도 제공합니다. 이러한 특징 덕분에 사용자는 영상 재생 시, 전체 영상 파일을 다운받지 않아도 되게 되었습니다. 그리고 특정 재생 위치부터 영상을 보는 경..
(Gitlab CI) Gitlab에 테스트 CI 연동하기 - Django + Postgresql 배경 최근에 신규 프로젝트를 진행하면서, 코드의 구조를 변경하는 경우가 잦아졌다. 빠른 사이클로 기능을 구현하다보니, 회귀 테스트를 못하게 되는 경우가 빈번해졌다. 그러면서 잘 동작하던 코드들이 고장나는 경우가 많아졌고, 디버깅으로 인한 삽질이 늘어나기 시작했다. 이런 고통의 루프에서 벗어나고자 gitlab ci으로 테스트빌드 자동화를 적용해보았다. gitlab-ci 장점 gitlab ci에 테스트 자동화를 적용하면, gitlab에 코드를 push할 때마다 자동으로 테스트코드를 돌려준다. 그리고 풀리퀘스트를 날릴 때에도 자동으로 돌려주고, 성공/실패여부도 자동으로 알려준다 😄 이해만 한다면, gitlab ci는 꽤 쉽다. gitlab ci 준비물 a. gitlab runner gitlab ci에 등록한 ..
elasticsearch와 RDB 데이터 저장하기 #시작 오늘은 엘라스틱서치 기술 블로그에서 흥미롭게 읽었던 자료를 함께 살펴보는 시간을 가져보려고 합니다. 설명드릴 블로그 포스팅은 Keeping Elasticsearch in Sync입니다. https://www.elastic.co/kr/blog/found-keeping-elasticsearch-in-sync#the-bulk-api-a-must-for-most-applications Keeping Elasticsearch in Sync One of the trickiest parts of integrating Elasticsearch into an existing app is figuring out how to manage the flow of data from an authoritative data ..
<조영호> 오브젝트 05. 책임 할당하기 1. 클래스가 여러 이유로 변경돼야 한다면 응집도가 낮은 것이다. 변경의 이유를 기준으로 클래스를 분리해야한다. 2. 응집도가 높은 클래스는 인스턴스를 생성할 때 모든 속성을 함께 초기화한다. 반면 응집도가 낮은 클래스는 객체의 속성 중 일부만 초기화하고, 일부는 초기화되지 않은 상태로 남겨진다. 때문에 함께 초기화되는 속성들을 기준으로 클래스를 분리해야한다. 3. 모든 메서드가 객체의 모든 속성을 사용한다면 클래스의 응집도가 높다고 볼 수 있다. 반면 메서드들이 사용하는 속성에 따라 그룹이 나뉜다면 클래서의 응집도가 낮다고 볼 수 있다. 06. 메시지와 인터페이스 디미터 법칙 클래스 내부의 메서드는 아래 조건을 만족하는 인스턴스에게만 메시지를 전송해야한다. -> this 객체 / ..