전체 글

전체 글

    [Python]파이썬 정렬 알고리즘, Timsort

    파이썬은 sort(), sorted() 메서드를 통해 정말 간편하게 정렬된 값을 얻을 수 있습니다. 사용하는 방법도 매우 쉽기에 내부 동작 원리에 대해서는 깊게 생각해본 적이 없었습니다. 이번 포스팅에서는 파이썬이 어떤 정렬 알고리즘을 사용하는지 알아보도록 하겠습니다. Timsort 파이썬은 Tim sort라는 정렬 알고리즘 표준으로 채택되어 사용 중입니다. Timsort는 삽입정렬과 병합정렬을 합친 알고리즘입니다. 2001년도에 고안되었으며, 창시자인 Tim Peters의 이름을 따왔습니다. 또한, 이 알고리즘은 파이썬 뿐만 아니라 Java SE7, Android, 구글 크롬 엔진등 다양한 곳에서 채택되어 사용중입니다. Timsort 특징 현실 세계의 데이터들은 완전 무작위가 아니라 어느정도는 정렬이..

    [Python]네임스페이스란(Namespace) ?

    지난번 Zen of Python에 잠깐 언급된 파이썬의 네임스페이스에 대해 알아보는 포스팅을 써보려고 합니다. 지난 포스팅 -> Zen of Python https://leffept.tistory.com/396 [Python]The Zen of Python - 파이써닉한 코드 파이썬에서의 디자인 원칙을 잘 나타내는 The Zen of Python이라는 것이 존재한다. 여기에 존재하는 원칙들을 바탕으로 자신이 작성한 코드가 파이써닉한 코드인지 아닌지에 대해서도 생각해볼 수 leffept.tistory.com 네임스페이스란 ? 네임스페이스란 특정한 객체를 이름에 따라 구분할 수 있는 범위를 말합니다. 파이썬 내부의 모든 것들은 전부 객체로 구성되어 있고, 이들은 특정 이름들과의 매핑 관계를 가지고 있습니다...

    [Django]SetUpTestData의 격리 지원 (feat. Django > 3.2)

    지난번 Side effect를 방지하는 테스트 코드 작성법에서 언급했던 내용이 Django 3.2 버전 업그레이드를 통해 변경된 것이 있어 포스팅을 추가적으로 작성하게 되었습니다. 지난 포스팅 https://leffept.tistory.com/415 [Django]Side effect 를 방지하는 테스트 코드 작성법 Side effect 를 방지하는 테스트 코드 작성 테스트 코드 작성의 중요성을 깨닫고 난 후부터 신경을 써서 테스트를 작성하고 있습니다. 오늘은 Django로 테스트를 작성하면서 Side effect가 발생했던 경 leffept.tistory.com SetUpTestData 의 격리 지원 기존에는 SetUpTestData에 선언한 클래스 프로퍼티의 경우 테스트 메소드간의 격리를 지원하지 않..

    [Django]get_or_create() 란?

    이번 포스팅에서는 Django QuerySet API 중 하나인 get_or_create에 대해서 알아보겠습니다. get_or_create() 란? get_or_create는 모델 객체를 생성할 때 이미 있는 객체라면 가져오고 없으면 생성하는 QuerySet API 중 하나입니다. 간단하게 사용법을 알아보겠습니다. 기본 사용법 class Leffe(models.Model): name = models.CharField(max_length=30) ... obj, created = Leffe.objects.get_or_create(name='leffe') 위 코드는 leffe 라는 이름을 가진 객체가 있다면 가져오고 없다면 객체를 생성하여 줍니다. 또한, created 라는 값을 통해 객체의 생성 여부도 파악..

    [Django]DateField의 auto_now_add 옵션, 정확히 알아보기

    이번 포스팅에서는 DateField의 auto_now_add 옵션을 사용하다가 이슈를 겪었던 경험과, 잘 모르고 있던 내용에 대해서 정리해보겠습니다. auto_now_add 옵션을 True로 설정하면 얻게되는 효과는 너무 간단합니다. 현재 시간을 기준으로 값이 설정되도록 하는 것입니다. 따라서 보통은 created_at 처럼 객체가 생성된 시각을 기록하는 필드에 사용합니다. 너무 단순하게 생각했던 나머지 세부적인 사항에 대해서는 잘 알지 못했습니다. 코드를 통해 자세히 알아보겠습니다. 문제가 생겼던 코드 Event 모델이 존재하고, 속성으로 이벤트가 시작하는 시간과 종료되는 시간이 있다고 가정하겠습니다. class Event(models.Model): name = models.CharField(max_l..

    사이드 프로젝트, 어플리케이션 출시 회고

    지난번 어플 출시 소개에 이어 오늘은 출시까지의 과정, 경험에 대한 리뷰입니다. 약 4개월간 회사일과 병행하면서 느꼈던 점들을 주로 적었습니다! 사이드 프로젝트 기획 & 시작 🚀 배달비가 나날이 비싸지는 와중에, 절약하기 위한 방법이 뭐가 있을까 하면서 생각났던 아이디어로 어플을 출시하는 것을 기획하게 되었습니다. 바로 근처의 사람들과 파티를 만들어 공동 주문을 통해 배달비를 1/N 하는 것입니다. 처음에는 친구와 2인으로 시작하였지만, 사정상 혼자하게 되었습니다. 어플 출시 목표 ✨ 처음에는 스토어에 출시하는 것 자체에만 목표를 두었습니다. 출시 프로세스를 경험해본 적이 없었기에 좋은 경험이 될 것 이라고 생각했습니다. 기술 스택은..? ⚒️ 사이드 프로젝트이기 때문에 많은 시간을 할애할 수는 없었습니..

    [SQLAlchemy]dict 타입의 값 변경을 감지하지 못하는 이슈, 트러블 슈팅

    안녕하세요, 오늘은 SQLAlchemy에서 지원하는 Mutation Tracking을 사용하던 중 겪었던 이슈에 대한 해결 과정을 공유하려고 합니다. 설명하기 앞서, Mutation Tracking이란 무엇인지 알아보겠습니다. https://docs.sqlalchemy.org/en/14/orm/extensions/mutable.html#module-sqlalchemy.ext.mutable Mutation Tracking — SQLAlchemy 1.4 Documentation Mutation Tracking Provide support for tracking of in-place changes to scalar values, which are propagated into ORM change events o..