본문 바로가기

전체 글161

validation => insert V.S. insert => catch (2020-01-19에 작성된 글입니다.) 최근 다른 팀원이 기능을 구현한 코드를 보면서 기존에 내가 하던 방식과 차이가 있어, 팀원들과 이에 대해 같이 얘기를 나누면서 알아본 것들과 나의 생각을 정리해본다. 상황 다음과 같은 사용자 Entity가 있고 사용자의 화면에 보이는 이름(displayName)과 계좌(account)는 다른 사용자와 중복되지 않는 unique한 값이어야한다 라는 도메인 규칙이 있다고 하자. 그러면 TypeORM을 사용할 경우 아래와 같이 User Entity를 만들 수 있을 것이다. @Entity() export class User extends BaseEntity { @PrimaryGeneratedColumn() private id: number; @Column({ uniqu.. 2020. 12. 28.
Model Bakery 사용 시 주의점 Django application 테스트 시 Django Model에 대한 Test fixture를 일일이 만들기 번거로울 때 주로 Model Bakery를 사용하여 model fixture를 만든다. 이 포스팅은 Model Bakery를 사용하면서 부딪힌 겪은 문제를 통해 알게 된 것들을 정리한 것이다. (포스팅에 나오는 코드는 여기에서 확인 가능하다.) 다음과 같은 단순한 형태의 Board, Reply Django model을 기반으로 진행하도록 하겠다. from django.db import models as m class Board(m.Model): content = m.CharField(null=False, max_length=100) class Reply(m.Model): board = m.F.. 2020. 12. 28.
== 와 is 비교 값이 같은지를 확인할 때 == 를 주로 사용한다. 그리고 값이 None 인지를 확인할 때는 is 를 사용한다. 그럼 == 와 is 의 차이는 무엇일까? == : value equality, 값이 같은지를 확인한다. is : reference equality, 참조가 같은지를 확인한다. l1 = [] l2 = [] print(l1 == l2) # True print(l1 is l2) # False 위 결과 l1 == l2 는 True이고 l1 is l2 는 False이다. 리스트를 선언하여 변수에 할당할 때, 새로운 list object가 생성되어 변수에 할당되기 때문에 l1과 l2는 서로 다른 list object를 참조하게된다. 그렇기 때문에 l1, l2 모두 빈 list이기 때문에 값은 같지만 (==.. 2020. 12. 28.
function의 default parameter 사용 시 주의점 파이썬은 함수를 정의할 때 default parameter(기본값)을 같이 정의할 수 있다. 편리한 기능이지만 아래와 같이 list나 dictionary와 같은 object를 사용할 경우 버그가 날 확률이 높다. (물론 의도적이라면 예외이다.) def list_func(li=[]): li.append('test') print('li:', li) print('#############') list_func() # li: ['test'] list_func() # li: ['test', 'test'] list_func() # li: ['test', 'test', 'test'] list_func() # li: ['test', 'test', 'test', 'test'] 아무 parameter도 전달하지 않았을 경우.. 2020. 12. 28.
*args, **kwargs에 대해서 우선 _args와 *_kwargs에 대해 알아보기 전에, python에는 Packing과 Unpacking이라는 것이 있다. Packing 여러개의 데이터를 list, tuple 등의 컬렉션으로 감싸는 것 (묶는 것) greetings = ('hello', 'konnichiwa', 'annyneong',) Unpacking 컬렉션의 element들을 여러 변수에 푸는 것 en, jp, ko = greetings 이제 함수를 보자 def args_func(*args): print(args) print(type(args)) # args_func(1, 2, 3) # (1, 2, 3) args_func((1, 2, 3)) # ((1, 2, 3),) # (1, 2, 3) 이 tuple의 element로 들어간다... 2020. 12. 28.