분류 전체보기

    [Python]staticmethod vs classmethod (feat. 언제 사용할까?)

    최근에 개발을 하다가 파이썬의 정적 메소드와 클래스 메소드를 언제 사용해야 하는지에 대한 기준이 궁금해졌습니다. 단순하게 눈에 보이는 차이로는 self 와 cls의 차이였는데요. 이 둘을 주로 어떤 상황에서, 어떤 용도로 나누어 사용하는지 알아보려고 합니다. 이와 관련한 유명 아티클이 있어 해당 글의 일부를 차용하였고, 개인적으로 이해한 것을 바탕으로 정리했습니다. https://julien.danjou.info/guide-python-static-class-abstract-methods/ The definitive guide on how to use static, class or abstract methods in Python Doing code reviews is a great way to disco..

    [Python]partial 란? (feat. functools)

    partial() 란? positional parameter인 args와 keyword parameter인 keywords로 호출된 함수처럼 동작하는 새 partial 객체를 반환하는 역할을 합니다. 쉽게 말하자면 함수 인자의 값이 미리 채워진 상태로 동작하는 함수(partial 객체)가 반환되는 것입니다. partial 파이썬 공식 Document functools — 고차 함수와 콜러블 객체에 대한 연산 — Python 3.10.8 문서 functools — 고차 함수와 콜러블 객체에 대한 연산 소스 코드: Lib/functools.py functools 모듈은 고차 함수를 위한 것입니다: 다른 함수에 작용하거나 다른 함수를 반환하는 함수. 일반적으로, 모든 콜러 docs.python.org 언제 사..

    오픈소스 기여하기 회고 3

    이번 포스팅을 마지막으로 오픈소스 기여하기 시리즈는 끝입니다. 마지막인만큼 오픈소스 컨트리뷰터로서 활동하는 것에 대한 느낀점을 쭈욱 나열하는 형식으로 적어보려고 합니다. 오픈소스를 왜 시작했어요 ? "유명한 오픈소스에 내 코드를 남겨보자" 시작하자고 마음을 먹은 이유자체는 정말 순수했습니다. 물론 앞선 포스팅에서 다양한 이유들도 적어두긴 했습니다만, 위와 같은 이유가 제일 컸습니다. 자랑하거나 유명해지고 싶었다고 할까요? 쉽지 않은 길이라는 것을 미리 알고는 있었지만, 때로는 이런 무모하고 단순한 이유들이 가장 큰 원동력이 되기도 합니다. 어렵거나 큰일을 이루어 내기 위해서는 해내야하는 수많은 일들이 있는데 이런 순수한 감정들은 정말 큰 도움이 됩니다. 패치할만한 버그를 찾는 과정은 고달프다 오픈소스를 ..

    오픈소스 기여하기 회고 2 (feat. Regression Test)

    안녕하세요, 이번 포스팅에서는 코드 관점에서 Django 버그 패치 과정을 다뤄보려고 합니다. 문제를 접근하는 방식, 해결 과정, 느낀점 등의 내용이 담겨 있습니다. 버그 재현하기 (Reproduce bug) 우선 해당 이슈를 패치하기로 결정했다면 가장 먼저 해야할 일은 버그를 재현하는 것입니다. 대부분의 이슈들은 자세한 설명과 재현 방법이 나와있어 그대로 따라하면 됩니다. 만약 그렇지 않다면 이슈 리포터에게 조금 더 상세한 내용이나 샘플 코드를 부탁하면 됩니다. 제가 할당했던 티켓의 경우에는 명확한 재현 방법, version등이 나와 있어 재현에 어려움을 겪지는 않았습니다. https://code.djangoproject.com/ticket/34052 #34052 (migrate --check stil..

    오픈소스 기여하기 회고 1 (feat. Django Contributor)

    안녕하세요, 오랜만에 블로그 포스팅으로 찾아왔습니다. 회사에서도 바쁜 시간을 보냈고 여러 오픈소스에 관심을 가지면서 시간을 보냈던 것 같습니다. 오늘은 틈나는대로 관심을 가지고 있던 오픈소스 생태계에서 Django Contributor가 된 경험을 공유하려고 합니다. 바로 시작하겠습니다! 오픈소스 Contributor 되기로 마음 먹기 시작하기 전 오픈소스와 관련된 여러 글들을 읽어 보았는데 공통적으로 하는 말이 꽤나 고되며, 시간이 많이 소요된다라는 말들을 종종 볼 수 있었습니다. 하지만 그럼에도 불구하고 장점이 더 많았고 무엇보다 너무 해보고 싶었던 일이었기에 올해 안에는 오픈소스에 기여를 무조건 해보자 라는 마음가짐으로 시작했습니다. 제가 오픈소스를 시작하면서 기대했던 효과는 다음과 같습니다. 각국..

    [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..