본문 바로가기

전체 글

(351)
[Django] ORM 성능 개선하기 ( + debug toolbar ) Django를 사용하면서 ORM도 자주 사용해보고 queryset을 만들어서 API를 여러번 개발공부를 해왔지만, 해당 API를 호출할 때마다 요청시간이 길어진다는 것을 느끼게 되었고, 디버그 툴바를 이용해서 어떤 쿼리가 반복되는지를 확인해 보았다. 메가 쇼핑몰을 개발하던 도중 여러 모델과의 관계가 복잡해지지만 반대로 쿼리셋은 복잡해진 모델 관계와는 다르게 큰 변화가 없었다. 이렇게 개발해도 되나? 라는 의문이 들었고 성능에 대해서도 관심을 점차 갖게 되었다. 1. 기존의 문제점 메가 쇼핑몰 특성상 마켓관리자는 자신의 마켓에서 판매하는 상품들을 CRUD할 수 있어야 한다. 즉, Product 모델은 다양한 모델과의 관계를 형성하고 있다. 기존의 마켓 별 상품 리스트 API를 호출해보면, 12 querie..
[Elasticsearch] (error) vm.max_map_count 값 변경하기 3개의 노드를 하나의 클러스터로 연동하면서 수 많은 에러를 발견하였다. 그 중에 하나가 vm.max_map_count에 대한 에러이다. 본인이 구글링과 함께 실제로 해본 내용을 바탕으로 글을 작성할 것이다. 1. 에러 elasticsearch | ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch. elasticsearch | bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at..
[Elasticsearch] 다른 서버에서 클러스터 구성 (노드 연동) with. docker-compose 요구사항에서 3개의 서버의 엘라스틱서치 서버를 구동하고 각 엘라스틱서치 서버에는 싱글 노드로 운영되고 있다. 3개의 서버 엘라스틱서치의 각 노드들을 하나의 클러스터로 묶어서 수명 주기 정책을 적용하려고 한다. 그러기 위해서는 먼저 각각의 싱글노드 3개를 하나의 클러스터로 연동시켜야 하는데, 여러 에러를 많이 만났다. 이러한 에러를 사전에 방지하고 실수를 회고하고자 글을 쓰려고 한다. 먼저, 본인은 3개의 엘라스틱서치 서버를 열어야 하지만 연동 테스트하기 위해서 먼저 두 개의 서버를 먼저 연동시키려고 한다. 클라우드 환경은 GCP를 이용하였고, 서비스 출시를 목표로 하는 것이기 때문에 docker-compose를 이용하였다. 여러 서버에서 하나의 클러스터로 실행하기 위해서는 엘라스틱서치 포트에 대해서 이해..
[리눅스] 36. 그 외 유용한 툴들 1. 그룹 명령과 서브 쉘 bash는 명령어들을 그룹화하여 함께 사용할 수 있도록 허용하는 방법이 있다. 그룹 명령을 사용하든지 서브쉘을 사용하는 것이다. 그룹 명령 : " {command1; command2; [ command3; ... ]}" 서브쉘 : " (command1; command2; [ command3; ... ]) " (1) 리다이렉션 수행 그룹 명령과 서브쉘은 둘다 리다이렉션을 조절하기 위해 사용된다. 복수 명령어들로 리다이렉션을 수행하는 스크립트를 보면 ls -l > opuput.txt echo "Listing of foo.txt" >> output.txt cat foo.txt >> output.txt​ 세 명령의 출력을 output.txt 파일로 리다이렉션한다. 그룹 명령 : { l..
[리눅스] 35. 배열 1. 배열이란? 배열은 하나 이상의 값을 가지고 있는 변수다. 배열은 테이블과 같은 형태로 구성된다. 스프레드시트를 예로 들어보자. 스프레드시트는 이차원 배열처럼 동작한다. 행과 열이 있고, 스프레드시트의 셀들을 가지고 있다. 배열도 같은 방식으로 동작한다, 배열은 원소라고 부르는 셀들을 가지고 있다. 그리고 각 원소들은 데이터를 가지고 있다. 각 배열 원소에는 인덱스 혹은 첨자라 불리는 주소를 사용하여 접근할 수 있다. 대부분 프로그래밍 언어들이 다차원 배열을 지원한다. 2. 배열 생성 배열 변수는 다른 bash 변수들처럼 이름을 붙일 수 있고 저븐 시에 자동적으로 변수가 만들어진다. $ a[1]=foo $ echo ${a[1]} foo​ 원소 1에 값 foo가 할당되고, 원소 1에 저장된 값을 ech..
[ElasticSearch] 엘라스틱서치의 내부 구조 및 cluster, index, replica, shard 프로젝트를 진행하면서 노드를 수명 주기 관리로서 해결해야할 요구사항이 생겼기에 엘라스틱 서치의 내부 구조와 용어에 대한 이해가 필요하다고 절실히 느꼈다. 어떤 좋은 티스토리에서 어떠한 문장을 봤는데 'ES 성능은 shard 개수보다 replica 개수에 영향을 준다'라는 문장이었다. 본인은 아직 shard와 replica에 대한 개념이 잡히지 않아서 왜 그런지, 내부는 어떻기에 이런지에 대한 의문이 생겨 공부하기로 했다. 1. 내부 구조 먼저 ES의 내부 구조를 살펴보면.. 엘라스틱서치는 여러 개의 클러스터로 구성될 수 있다. 위의 구조처럼 하나의 클러스터를 가정을 둘 때, 하나의 클러스터에는 여러 개의 노드들이 묶여져 있는 구조를 볼 수 있다. (물론 하나의 노드도 가능) 그리고 각 노드에 데이터를 저..
[ElasticSearch] 인덱스 수명 주기 관리 (Hot, Warm, Cold) 1. ILM 란? ILM란 인덱스 수명 주기 관리 (Index Lifecycle Management)라고 불린다. 인덱스 수명 주기 관리(IML)은 ElasticSearch 6.7버전에서 출시되었으며, 인덱스 관리를 효율적으로 관리할 수 있도록 설계되었다. 인덱스 수명주기 관리 (ILM) API는 시간이 지남에 따라 인덱스를 관리하는 방법을 자동화 할 수 있다. 정해진 일정에 따라 인덱스에 대한 관리 작업을 수행하는 대신 샤드 크기 및 성능 요구 사항과 같은 다른 요소를 기반으로 작업을 수행할 수 있다. 인덱스를 생성하는 데 사용된 인덱스 템플릿에 수명 주기 정책을 연결하여 인덱스가 처리되는 방식을 제어한다. 2. Hot-Warm-Cold Hot-warm-cold 아키텍처는 로깅 또는 메트릭과 같은 시계..
[MySQL] m1에서 설치한 mysql이 동작 안할 때, 진짜진짜 시작하기 전에 스트레스 잠깐 내고 하겠습니다. 분명 어제는 잘 됐다가 자고 일어나서 보니까 mysql이 작동하지 않고 있었네요,, 진짜 여기저기 다 구글링 하면서 짜집기로 간신히 해결했습니다. 1. mysql 경로 확인과 동작 중지 시키기 (base) iseungmin@iseungmin-ui-MacBookAir ~ % brew services Name Status User File mysql started iseungmin ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist mysql 옆에 Status가 자꾸 stopped로 바뀝니다. 먼저 mysql 실행 명령어는 brew services start mysql 이라고 입력하면 Status에 위의 코드처럼 st..