언어
-
[Python] tip - 속성을 리팩토링하는 대신 @property를 고려언어/파이썬 & 장고 2017. 10. 21. 15:24
내장 @property 데코레이터를 이용하면 더 간결한 방식으로 인스턴스의 속성에 접근하게 할 수 있습니다. 고급 기법이지만 흔히 사용하는 @property 사용법 중 하나는 단순 숫자 속성을 즉석에서 계산하는 방식으로 변경하는 것입니다. 호출하는 쪽을 변경하지 않고도 기존에 클래스를 사용한 곳이 새로운 동작을 하게 해주므로 매우 유용한 기법입니다. 또한 시간이 지나면서 인터페이스를 개선할 때 중요한 임시방편이 됩니다. 예를 들어 구멍 난 양동이의 할당량을 일반 파이썬 객체로 구현하려 한다고 가정합니다. 다음 Bucket 클래스는 남은 할당량과 이 할당량을 이용할 수 있는 기간을 표현합니다. import datetime class Bucket: def __init__(self, period): self...
-
[Python] datetime timezone 변경방법언어/파이썬 & 장고 2017. 10. 16. 19:13
python 3.6 이하 버전에서는 datetime을 생성하면 timezone 정보가 없어 astimezone 같은 메소드를 실행하면 에러가 발생합니다. 지금부터 삽질해서 찾은 방법을 설명합니다. python 3.6은 datetime을 생성할 때 timezone을 지정하지 않아도 기본으로 내장으로 설정이 되어 있어 astimezone()를 실행해도 에러가 발생하지 않습니다. 하지만 3.6이하 버전은 datetime을 생성할 때 timezone을 지정하지 않으면 timezone이 None이므로 astimezone()을 실행하면 에러가 발생합니다. 따라서 결론은 datetime을 생성할 때 timezone을 지정하는 것입니다. 하지만 이미 생성된 datetime이라면 어떨까..여기서 방법은 2가지로 나뉩니다..
-
[Python] Tip - 커스텀 컨테이너 타입은 collections.abc의 클래스를 상속받아 만들기언어/파이썬 & 장고 2017. 10. 15. 18:09
파이썬 프로그래밍의 대부분은 데이터를 담은 클래스들을 정의하고 이 객체들이 연계되는 방법을 명시하는 일입니다. 모든 파이썬 클래스는 일종의 컨테이너로, 속성과 기능을 함께 캡슐화합니다. 파이썬은 데이터 관리용 내장 컨테이너 타입(리스트, 튜플, 세트, 딕셔너리)도 제공합니다.시퀀스처럼 쓰임새가 간단한 클래스를 설계할 때는 파이썬의 내장 list 타입에서 상속받으려고 하는 게 당연합니다. 예를 들어 멤버의 빈도를 세는 메서드를 추가로 갖춘 커스텀 리스트 타입을 생성한다고 가정합니다.class FrequencyList(list): def __init__(self, members): super().__init__(members) def frequency(self): counts = {} for item in ..
-
[Django] 존재하는 테이블 스키마 Django로 복사 방법언어/파이썬 & 장고 2017. 5. 11. 15:24
사전작업virtualenv로 django를 설치한 경우Pycharm 내의 터미널을 사용하실 경우 선택된 interpreter에 따라 자동으로 변경되므로 아래와 같은 작업을 할 필요가 없습니다.예시) djangoDjango라는 virtualenv를 생성한 경우$ cd virtualenv $ source bin/activate (virtualDjango) $ # virtualDjango라는 virtualenv 터미널에 접속한 상태 # virtualenv 접속해제는 deactivate $ 프로젝트로 이동터미널settings 파일이 쪼개져 있지 않은 경우$ python3 manage.py inspectdb > models.py (아무이름이나 가능)settings 파일이 쪼개져 있는 경우$ python3 mana..
-
[Golang] golang에서는 WSGI를 사용하지 않은 이유언어/Golang 2017. 4. 19. 16:20
일단 WSGI는 파이썬에만 해당이 됩니다. Go에는 3가지 옵션이 있습니다. (실제로는 4가지지만 일반적으로 CGI는 높은 부하로 인해 뺐습니다.)Go의 표준 라이브러리에 내장 된 HTTP 서비스 기능.이 경우 앱은 독립 실행형 서버입니다. 가장 간단한 설정 일 수도 있지만 다음과 같은 문제가 있을 수 있습니다. 다운그레이드 권한으로 권한이 부여된 포트(1024 아래의 포트, 예를들어 80포트)를 가진 앱을 실행하려면, 특별한 wrapper나 POSIX 기능을 사용해야합니다.연결을 끊지 않고 재배포를 하려면 goagain과 같은 다른 wrapper가 필요합니다.웹 서버 형태의 reverse HTTP proxy 문제가 존재대부분 독립 실행형의 다양한 문제를 해결하지만, 그래도 전체 HTTP 트래픽을 이리저..
-
[Python] len()과 sys.getsizeof() 차이점언어/파이썬 & 장고 2017. 3. 27. 19:55
len()은 컨테이너에 포함된 항목의 수를 계산합니다. 다시 말해 문자열일 경우 문자의 길이를 반환하고 컨테이너타입인 튜플, 딕셔너리, 리스트의 경우는 속해있는 값의 개수를 반환합니다.반면 sys.getsizeof()는 객체의 메모리 사이즈를 바이트 단위로 반환합니다. 객체는 모든 유형이 될 수 있습니다.파이썬 문자열 객체는 문자 당 1바이트의 간단한 문자 시퀀스가 아닙니다. 특히, sys.getsizeof()함수에는 가비지 컬렉터의 오버헤드(아마 1바이트)가 포함되어 출력됩니다. getsizeof()는 object의 __sizeof__ 메서드를 호출하고 object가 가비지 컬렉터에서 관리되는 경우에는 가비지 컬렉터의 오버 헤드를 추가합니다.예시# python 3.4 import sys en = 'a'..
-
[Golang] gin-gonic 헤더 Access-Control-Allow-Origin 여러개 추가 방법언어/Golang 2017. 3. 20. 13:49
CORS 정책상 Access-Control-Allow-Origin은 1개만 등록이 가능합니다. Origin을 *로 할 경우 전 URL에 대해 허용이 가능하지만 아래와 같은 경우면 특정 URL을 지정해야 합니다.c.Header("Access-Control-Allow-Credentials", "true") c.Header("Access-Control-Allow-Origin", "*") // 에러 - Credentials이 true일 경우 특정 URL 1개만 허용 필자가 사용한 방법은 허용할 URL 리스트를 만든 다음, 요청된 URL이 해당 리스트에 맞는지 체크하는 형식으로 문제를 해결했습니다.allowUrlList := []string{"http://foo.com", "http://bar.com", "htt..
-
[Golang] gin-gonic DELETE 메소드 데이터 호출방법언어/Golang 2017. 3. 17. 17:56
간단한 문젠대..GET gin-gonic 웹 프레임워크에서 GET은 .Query()함수로 query parameter로 넘어온 데이터를 받습니다.http://foo.com?id=1234 ... a := c.Query(id)POSTPOST의 경우 body로 넘어온 데이터를 받습니다.http://foo.com # body 부분 {id:1234} ... a := c.PostForm("id")DELETEgin-gonic에서 DELETE 메소드는 무조건 query parameter로 데이터를 넘겨야합니다. body로 데이터를 넘겨줄 경우 이를 인식하지 못합니다.http://foo.com # body 부분 {id:1234} ... a := c.PostForm("id") // nil http://foo.com?id=..