SW개발
[프로그래머스]모의고사 - 완전탐색
https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr def solution(answers): # 수포자가 정답을 찍는 패턴을 미리 지정해둠 person1 = [1, 2, 3, 4, 5] person2 = [2, 1, 2, 3, 2, 4, 2, 5] person3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] # 각 수포자 별로 맞춘 정답수를 리스트화 score = [0, 0, 0] # enumerat..
[Django]검색 퍼포먼스를 향상하기까지의 과정 2
4. Full Text Search 적용 (GIN Index) 검색을 하면서 SearchVector를 활용하면 LIKE가 포함된 SQL에 굉장히 효과적이라는 글을 여럿 찾을 수 있었습니다. Django 공식 문서에서도 나와있는 만큼 Full Text Search를 적용해보기로 합니다. https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/ Full text search | Django documentation | Django Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues Abo..
[Django]검색 퍼포먼스를 향상하기까지의 과정
어느 서비스든 마찬가지로 운영됨에 따라 누적으로 쌓이는 데이터들이 존재합니다. 저의 경우에는 메시지 테이블이 그러하였는데, 총 row가 약 50m을 넘었습니다. 따라서, 메시지의 검색 날짜기간을 길게 해둔다면 결과가 나오는데까지 15초 이상이 걸리기도 하였습니다. (첫 검색 이후에는 약 2초 내외로 걸렸습니다.) 실제로 검색 기능은 자주 이용되기 때문에 개선이 필요하다고 생각되어 Django에서 퍼포먼스를 향상시켜보기로 하였습니다. 1. 프로파일링이 먼저 테이블의 row수가 절대적으로 많기 때문에 당연히 검색은 느릴 것이라고 생각되었습니다. 하지만, 생각하는 것과는 다른 곳이 문제였던 일이 종종 있었기에 프로파일링을 앞서 진행하였습니다. Query Inspector, silk, cProfile, Debu..
[Python]테스트코드 커버리지 측정 - coverage
파이썬에서 작성한 테스트 코드의 커버리지를 측정하는 도구가 있다. https://github.com/nedbat/coveragepy GitHub - nedbat/coveragepy: Code coverage measurement for Python Code coverage measurement for Python. Contribute to nedbat/coveragepy development by creating an account on GitHub. github.com Coverage 설치 pip install coverage 먼저 측정을 위해 coverage라는 도구를 설치한다. .coveragerc 설정파일 추가 [run] include = /커버리지를 측정할 디렉토리명/* omit = *migra..
[Javascript]Javascript 멋지게 쓰기, 프로처럼 쓰기
저번 포스팅에 이어서 Javascirpt를 멋지게, 그리고 프로답게 쓰는 법에 대해서 알아보도록 하겠습니다. 이번 포스팅도 대부분 가독성에 중점을 두었습니다. 1. Nullish Coalescing Operator ( ?? ) - Null 병합 연산자 // ❌ bad 💥 function printName(text) { let message = text; if (text === null || text === undefined) { message = "No Message"; } console.log(message); } 전달받은 텍스트가 null 이거나 undefined인 경우에 No Message를, 텍스트가 있는 경우라면 message를 출력하는 함수입니다. 위처럼 작성하게 되면 간단한 역할을 하는 함수..
[Django]silk로 프로파일링 하기
개발을 진행하다보면 어느 순간에는 성능 문제를 겪기 마련입니다. 이전까지 잘 작동하던 코드가 트래픽이 많아짐에 따라서 문제가 될 수도 있고, 쌓이는 데이터의 양이 많아짐에 따라 문제가 될 수도 있습니다. 이 때 Django의 silk 프로파일러를 활용한다면 좀 더 쉽게 병목 구간을 찾을 수 있습니다. https://github.com/jazzband/django-silk GitHub - jazzband/django-silk: Silky smooth profiling for Django Silky smooth profiling for Django. Contribute to jazzband/django-silk development by creating an account on GitHub. github.c..
[Python]예외처리 - try, except, else, finally (raise) 사용하기
if, else 문으로만 모든 에러를 처리한다면 indent가 늘어남에 따라 가독성이 떨어지는 코드가 되기 마련입니다. 따라서, 예외처리 구문을 사용하여 코드를 깔끔하게 작성하도록 하여야 합니다. 이번 포스팅에서는 Python의 예외처리 방법에 대해서 간단하게 알아보겠습니다. Python의 예외처리의 기본 흐름은 try -> except -> else -> finally 순으로 진행됩니다. 모든 단계를 사용할 필요는 없고 필요에 따라 적절히 골라서 사용하면 됩니다. 하나씩 설명해보겠습니다. try & except try: # 에외처리할 코드 print(10/0) except ZeroDivisionError: # 발생하는 에러에 대한 처리 print("zero division error") 가장 기본적으로..
[Javascript]if, else 문 최소화하기
Javascript를 이용하여 개발을 하다보면 if, else문이 많아짐에 따라 가독성을 상당히 해치는 코드를 종종 볼 수 있습니다. 특히나 프론트 UI에서 조건에 따라 렌더링 및 데이터를 보여주는 로직이 존재하기때문에 이런 경우가 더 많은 것 같습니다. 저는 backends 언어로 Python을 사용하고 있는데 이때도 마찬가지로 if로 인한 indent가 많아지는 코드를 그다지 선호하지 않습니다. 가장 큰 이유는 가독성이 저하되어 정확히 어떤 기능을 하는 코드인지 파악하기가 힘들어지기 때문입니다. 이러던 도중 좋은 자료를 발견하게 되어 번역하면서 공부해보기로 하였습니다. https://betterprogramming.pub/stop-putting-so-many-if-statements-in-your-j..
[Django]setUp() vs setUpTestData() 차이점
Django에서 unittest를 진행할 때 초기 데이터들을 설정하기 위해서는 다음과 같은 메소드가 사용될 수 있다. setUp() setUpTestData() https://docs.djangoproject.com/en/3.1/topics/testing/tools/#testcase Testing tools | Django documentation | Django Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate docs.djangoproject.com 겉으로 보기에 두 함수는 동일한 역할을 한다. 하지만 동작하는 원..
[Django]get_object() 란?
get_object() 란? 간단하게 get_object()는 pk로 queryset을 필터링 하고, queryset 결과에서 object를 뽑아서 return 시켜주는 함수이다. 실제 코드는 class SingleObjectMixin(ContentMixin) 내에서 확인할 수 있다. https://docs.djangoproject.com/en/3.2/ref/class-based-views/mixins-single-object/#singleobjectmixin Single object mixins | Django documentation | Django Django The web framework for perfectionists with deadlines. Overview Download Documen..