본문 바로가기

분류 전체보기62

FCO 수수료 계산 코드 FC온라인 수수료 계산 로직 Python 코드def calculate_final_amount( original_amount, pc_room=False, top_class=False, coupon_discount=0 ): """ FCO 수수료를 계산하는 함수입니다. Parameters: original_amount: 거래 금액 pc_room: 피시방 여부 (Bool) top_class: 탑클 여부 (Bool) coupon_discount: 수수료 쿠폰 할인률 (Int) Returns: final_amout: 최종 계산값 (Int) 기본 수수료율은 60%이며,..
코드 품질, 기술 부채 코드 퀄리티가 왜 중요한지 말해도 그에 대한 가시화 되어있는 데이터가 없었기 때문에 건강한 코드베이스의 중요성이 비즈니스단에서 중요도를 두지 않고 있습니다. 최근에 발표된 새로운 연구에서 고품질 코드의 비즈니스 이점을 처음으로 측정해본 결과가 있었습니다. 완성도 높은 소프트웨어는 큰 이점이 있습니다. 이미 검증이 끝난 코드들을 재활용 하여 더욱 빠른 개발을 할 수 있게 해주고 긍정적인 사용자 경험을 유지할 수 있게 됩니다. 연구 결과를 보면, 개발자들의 시간의 23~42%가 기술 부채와 안티 패턴 때문에 낭비되고 있습니다. 코드 퀄리티는 비 기술 직군에겐 보이지 않기 때문에 코드 퀄리티를 높이는 것이 어떤 비즈니스 가치를 창출하는지 알기 직관적으로 어렵습니다. 고품질 코드는 버그가 15배 적고, 개발 속..
Django 시그널 매커니즘 장고에서 시그널은 앱 간 통신 및 특정 이벤트에 대한 통지를 가능하게 하는 중요한 매커니즘입니다. 구조 Sender (송신자) Sender는 시그널을 발생시키는 주체로, 어떤 동작이나 이벤트가 일어났을 때 이를 알리는 역할을 합니다. 일반적으로 이는 특정 앱 또는 모듈에서 발생하는데, 예를 들면 유저가 생성되었을 때(user creation) 또는 모델의 저장(save) 등이 될 수 있습니다. Signal (신호) Signal은 발생한 이벤트를 표현하는 객체입니다. 이 객체에는 이벤트에 대한 정보와 추가 데이터가 담겨져 있습니다. Sender에서 발생한 특정 동작을 나타내며, Receiver가 이를 이해하고 적절히 처리할 수 있도록 정보를 제공합니다. Receiver (수신자) Receiver는..
Django 5.0 버전 출시 전 살펴보기 Django는 과거부터 지속적으로 유지보수되는 프레임워크로, 끊임없는 업데이트를 통해 많은 개발자들에게 선호되어 왔습니다. 3년에 한 번씩 메이저 버전을 업데이트하고, 8개월에 한 번씩 마이너 버전을 릴리스하는 등의 전략을 채택하고 있습니다. 현재(2023년 11월 23일)에는 Django 4.x 시리즈가 주로 사용되고 있습니다. 그러나 다가올 12월에는 Django 5.0 버전이 새롭게 릴리즈 될 예정입니다. 이번 글에서는 이 곧 출시될 5.0 버전의 주요 변경 사항에 대해 미리 알아보도록 하겠습니다. Django 5.0이 기존 버전 대비 어떠한 혁신과 개선을 가져올지, 개발자들에게 어떠한 새로운 기회를 제공할지에 대해 살펴보겠습니다. Python Version Django 5.0에서는 개발의 기본 요..
[HTML] a 태그를 이용한 다운로드 기능 HTML에는 a태그라는 하이퍼링크를 걸어주는 태그가 존재합니다. 주로 href, target, onclick과 같은 속성을 사용하였는데 a태그에 download 속성을 이용하면 href에 지정한 파일을 다운로드 할 수 있다는 글을 읽고 블로그에 공유하게 되었습니다. 이미지 다운로드 같은 경우에 일반적으로 이미지에 우클릭하여 다운로드 하는게 익숙하지만 이 기능은 이미지 뿐만 아니라 다양한 파일에 대해서 [다운로드] 버튼을 눌렀을때 다운로드가 가능하기 때문에 확정성 측면에서 상위 호환하는 기능이라 생각되어 공유하게 되었습니다. 예시) 파일 다운로드 위 코드대로 구현하여 파일 다운로드 버튼을 클릭하면 텍스트_파일.txt가 다운로드 되게 됩니다. 어떤 원리인지 짚어보면 href에 들어가는 값은 다운로드될 파일의..
Django JSONField (Postgresql) JSON은 소프트웨어 플랫폼에서 쉽게 접할 수 있는 데이터 유형입니다. JSONField의 유연성은 데이터를 쉽게 가져오고 사용하는 데 도움이 되며, JSONField를 사용하여 복잡하게 처리해야할 데이터도 간단하게 처리할 수 있습니다. Django가 지원하는 대부분의 DATABASE 역시 JSON을 지원하고 Django 버전에 따라 JSONField를 사용하는 방법이 조금 다릅니다. 1. JSONField 생성하기 from django.db import models class Sample(models.Model): ... datas = models.JSONField('json', default=dict) JSONField는 models에 내장되어 있는 필드로 JSON 인코딩 데이터를 저장하기 위해 존재..
Django bulk_create/bulk_update 한번에 여러개의 객체를 생성해야 하거나 업데이트해야 할 경우가 작업을 하다 보면 생기게 됩니다. 이때 생성/수정 때마다 save() 메서드를 사용하게 되면 DB에 쿼리가 save() 메서드를 사용한 횟수 만큼 쿼리가 발생하여 DB에 부담이 됩니다. Django에는 이와 같은 문제를 해결하기 위해 bulk_create, bulk_update 기능이 있습니다. 이를 사용하게 되면 한번에 여러개의 객체를 저장할 수 있어 쿼리가 단 1번만 발생합니다. 사용할 때 주의할 점으로는 기본 메서드 들을 오버라이드 하여 사용하는 경우에 동작이 재대로 되지 않는다는 점입니다. 이 점을 유의하여 사용하셔야 합니다. 예제) class Sample(models.Model): name = models.CharField('이름',..
Django sitemap 분할 관리하기 Django 웹 프로젝트를 운영하게 되면 검색엔진 최적화(SEO, Search Engine Optimization)를 위해서 sitemap.xml 파일을 만들어 robot.txt에 올려야 하는 일이 발생하게 됩니다. 구글 검색 센터에서는 sitemap의 규칙으로 아래와 같이 설명하고 있습니다. 형식과 관계없이 사이트맵은 1개당 50MB(압축하지 않은 파일 기준)와 URL 50,000개로 제한됩니다. 파일이 더 크거나 URL이 더 많은 경우, 목록을 여러 개의 사이트맵으로 나눠야 합니다. 색인 파일(사이트맵 목록과 연결된 파일)을 만들어 Google에 색인 파일 하나만 제출하는 방법도 있습니다(선택사항). 즉, Google에 여러 개의 사이트맵을 제출하거나 사이트맵 색인 파일을 제출하면 됩니다. 일반 적인..
Django annotate management Django 프로젝트를 개발하다보면 동일한 annotate를 각기 다른 view에서 호출하는 경우가 생기게 됩니다. 이럴 경우 유지보수가 어려워 지는 이슈가 발생하여 나중에 고생하게 될 수도 있습니다. 그래서 이런 이슈를 방지하고자 annotate를 관리하는 방법 중 하나를 소개하고자 합니다. annotate필드를 model.py의 class내에 class method로 관리하는 방법입니다. class Sample(models.model): first_name = models.CharField('이름', max_length=24) last_name = models.CharField('성', max_length=12) @classmethod def get_annotated_field(cls): return..