2024/12 5

Django - Inverted Index로 검색하기

1. filter로 검색 시의 문제점장고 프로젝트에서 어떤것을 검색하는 것을 구현해야 할 때 filter()를 많이 사용하고, 가장 편한 방법이다.하지만 이런 방식은 많은 문제점이 있다.db index 사용 불가능filter() 에서 __contains를 사용하게 되면 LIKE 문이 실행되는데 이 경우는 Full Scan을 한다.LIKE% (__startwith)를 사용하는 경우는 제외제대로 된 검색이 불가능쿼리 한 키워드가 완벽히 일치해야지 검색된다.단어별로 검색이 불가능여러 가지 이유로 검색엔진을 구현해서 검색기능을 사용하는 게 좋은 방법이다.검색엔진에선 대표적으로 역인덱스(inverted index)를 사용하는 방법이 있다. 2. 역인덱스역인덱스란, 각 단어들이 어떤 문서에 저장되어 있는지를 나타내..

django 2024.12.29

Django - squashmigrations

이번 글에서는 django의 마이그레이션과 squashmigrations 명령어에 대해서 작성해 보았습니다.1. migration이란Django는 개발자가 모델링을 하면, 개발자가 작성한 models.py과 실제 db와 같은 상태를 유지하기 위해 django orm은 plan을 작성하며 관리합니다.이런 plan을 생성하기 위해 makemigrations 명령어를 사용합니다. 이렇게 해서 새로 생성된 plan은 myapp/migrations 안에 xxxx_변경내용.py로 저장되게 되며 이런 파일을 마이그레이션 파일이라고 합니다.마이그레이션 파일은 현재 migrations에 저장되어 있는 파일들을 기반으로 models.py 파일의 변경사항들이 작성됩니다.코드로 예시를 들어보면,class Food(models..

django 2024.12.16

Python - yield

파이썬의 리스트는 힙 메모리 영역에 저장되어 있는 객체의 주소를 모아둔 하나의 객체이며 컬렉션(collection)입니다. 파이썬의 리스트는 동적 리스트이며 리스트를 추가하고 제거하는데 인덱스를 걱정할 필요가 없으며 여러 자료형들을 하나의 리스트에 담을 수 있다는 장점이 있습니다.하지만 이런 리스트는 메모리에 저장되기 때문에 메모리를 매우 많이 사용하게 됩니다. 이런 상황을 해결하기 위해서 yield를 사용할 수 있습니다. 1. yield파이썬에서 yield는 제너레이터 함수를 만드는 데 사용하는 키워드입니다.제너레이터는 이터레이터를 생성하는 함수입니다. 여기서 이터레이터는 iterable 한 객체를 __next__ 매직메서드를 사용해서 요소들을 순차적으로 반환시켜 주는 객체입니다.함수에서 yield 키..

python 2024.12.10

Django - Trailing Slash

장고는 path를 라우팅 할 때 urlpatterns을 사용해서 라우팅 합니다.그리고 정해진 패턴들은 기본적으로 마지막에 슬래시가 추가되어 있습니다. 이런 슬래시를 Trailing Slash라고 부릅니다.장고는 기본적으로 해당 방식을 사용합니다. 장고는 왜 이런 방식을 채택했을까요? 1. /board/ vs /boardhttps://www.google.com -> Ohttps://www.google.com/ -> X도메인 뒤에는 기본적으로 슬래시가 붙습니다.크롬 urls 창에서는 기본적으로 트레일링 슬래시가 안 보이게 되어있지만 실제로 요청이 보내질 때에는 슬래시가 붙여집니다.그 이유는 http header에 루트는 슬래시가 포함되기 때문입니다. 하지만 도메인 뒤에 붙는 슬래시가 아닌 path에 붙는 ..

django 2024.12.02