본문 바로가기

전체 글156

Make practicable daily routine 나는 스스로를 잘 제어하지 못하는 사람이다. 그걸 알기에 나는 나를 움직이지 않으면 안될 상황을 만들어 나를 억지로라도 움직이게 만들었다. 예전에는 나를 억지로라도 움직이기 위해서 회사 근처 영어 학원에서 오전반을 다녔고 재밌어서 스터디 리더도 했었다. 주말에는 스터디를 했었고 휴일에 너무 늘어져있으면 근처 카페라도 가서 일단 차 한잔 시켜놓고 차 값이 아까워 적어도 한 시간은 공부를 하든 독서를 하든 뭔갈 하곤했었다. 그런데 지금은 집 외에 실내를 들어가질 못하고 집 안에 쳐박혀 있어야하니 나를 움직이게 만드는 것들이 아예 사라졌다. 스스로 규칙이 없다보니 그때그때 주어진대로 생각하게 되고 할 것을 그냥 잡히는데로 정하게되더라. 몇 개월의 바보같은 시행착오 끝에 스스로 지켜야할 루틴의 필요성을 느꼈다... 2020. 12. 28.
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.