글 전체(33)
-
[Elasticsearch] 데이터 입력, 조회, 삭제(GET, POST, PUT, DELETE)
Elasticsearch 실행 Elasticsearch를 설치하는 방법은 다양하지만 나는 mac을 사용하기 때문에 homebrew를 이용하여 설치하였다. 다음 명령어로 설치를 진행하자. 참고로 나는 7.17.4 version을 설치하였다. $ brew tap elastic/tap $ brew install elastic/tap/elasticsearch-full 설치가 완료되면 Elasticsearch를 실행하여 보자. 참고로 Elasticsearch는 9200 포트를 사용한다. $ elasticsearch 다음과 같이 많은 출력이 뜨고 마지막에 뭐 successfully reloaded changed 이런 멘트가 뜨면 성공적으로 실행이 된 것이다. 이제 인덱스를 조회하여보자. GET input $ cur..
2023.05.08 -
[Elasticsearch] Elasticsearch의 기본 개념
Elasticsearch란? Apache Lucene 기반의 분산 검색 엔진 오픈소스이다. Elasticsearch는 다음과 같은 특징들이 있다. 오픈소스(open source) Elasticsearch의 핵심 기능들은 Apache 2.0 라이센스로 배포되고 있고 Elastic github repository에서 소스들을 찾을 수 있다. 실시간 분석(real-time) Elasticsearch의 가장 큰 특징 중 하나이다. Elasticsearch는 배치 기반의 분석 시스템인 하둡(Hadoop)과 달리 Elasticsearch 클러스터가 실행되고 있는 동안에는 계속해서 데이터가 입력되고, 동시에 거의 실시간 속도로 색인(index)된 데이터의 검색, 집계가 가능하다. 전문(full text) 검색 엔진 ..
2023.05.06 -
[MySQL] INT(11)과 DATETIME(6)의 비밀
11자리 숫자까지? django orm을 사용하여 Table을 생성하고(migration) 관리하기만 하다가 문득 저 괄호 안의 숫자의 의미가 궁금해졌다. bigint(20)같은 경우에 20자리 숫자까지 표현하는데 20자리가 넘어가면 에러가 나거나 문제가 생기는 것이 아니다. 해당 필드에 ZeroFill(ZF) 옵션이 체크가 되어있을 경우 20자리까지 0을 채워 넣는다는 얘기이다. 예를 들면, 위 사진에서 font_size 필드가 smallint(5)인데, ZF가 true일 경우, 12라는 숫자를 넣게되면 00012라는 값으로 들어온다. 즉, ZF옵션이 체크되어 있을 경우에만 유의미하고 그렇지 않은 경우에는 상관없다. 그러나 각 type에 맞게 범위가 들어와야한다. smallint의 경우 -32768 부..
2023.04.11 -
[MySQL] Soft delete와 unique constraint
Soft delete인데 unique가 걸려있다... 제목을 어떻게 지어야할지 몰라서 저렇게 지었지만 회사 API 작성 중 회원가입 파트에서 막힌 부분이 있었다. 바로 탈퇴한 아이디인데 그 아이디로 다시 회원가입을 할 경우, 로직상 DB에서 레코드(row)를 삭제하는 것이 아닌, soft delete(논리 삭제)를 할 경우 unique해야 할 아이디가 이미 테이블에 존재한다며 에러를 내뿜었다. 이 부분에 대해 고민을 한 것이 2가지였다. unique constraint를 없애고 비지니스 로직으로 논리 삭제된 아이디를 제외하고 중복된 아이디인지 검사 nickname과 deleted_at 컬럼 두개를 다중 컬럼 unique를 건다. unique 삭제? unique 조건을 삭제한다면 문제가 분명히 생길 것이다..
2023.01.12 -
[Django] Channels 사용하기 - 4
이 글은 [Django] Channels 사용하기 - 3에서 이어집니다. views 테스트하기 Selenium을 사용하여 end-to-end 테스트를 할 것이다. 메시지를 보낼 때, 같은 방에 있는 모두가 그 메시지를 보는가 메시지를 보낼 떄, 다른 방에 있는 누군가는 메시지를 볼 수 없는가 Selenium을 설치하자 $ python3 -m pip install selenium chat/tests.py 파일을 만들고 코드를 작성하자. # chat/tests.py from channels.testing import ChannelsLiveServerTestCase from selenium import webdriver from selenium.webdriver.common.action_chains impor..
2022.10.24 -
[Django] Channels 사용하기 - 3
이 글은 [Django] Channels 사용하기 - 2에서 이어집니다. 비동기 consumer 작성하기 기존에는 동기적인 consumer를 만들었다. 동기 consumer는 특별한 코드없이 Django 모델에 동기적으로 접근할 수 있어서 편리하지만, 비동기 consumer는 추가 스레드를 생성할 필요가 없다는 점에서 높은 성능을 자아낸다. 기존에 사용하던 sync_to_async를 사용해도 되지만 async-native 라이브러리를 사용하는 것이 더 성능이 좋다. 이제 ChatConsumer를 비동기 형태로 바꿔보자. chat/consumers.py를 다음과 같이 바꾸자. # chat/consumers.py import json from channels.generic.websocket import As..
2022.10.24