언어
-
[Django] orm으로 가장 최근 pk값 구하기언어/파이썬 & 장고 2017. 2. 1. 14:19
db를 사용할 때 사용자가 insert를 한 다음, 바로 insert가 된 key의 값을 궁금해할 때가 있습니다. 이럴 때 Django에서는 두 가지 방법으로 구할 수 있습니다.예시# 방법 1 key = ModelObj.objects.order_by('-pk')[0].구하고자하는컬럼명 # 방법 2 추천 key = ModelObj.objects.latest('구하고자하는컬럼명')방법 1의 경우 제약이 있는데 pk라고 지정해놓은 부분이 자동으로 증가하는 함수여야만 사용이 가능합니다.따라서 Django에서 제시하는 방법 2를 사용할 것을 추천합니다. orm으로 다른 기능을 사용하고 싶으면 아래 문서를 확인하여 사용하면 됩니다.https://docs.djangoproject.com/en/dev/ref/model..
-
[Django] static 파일언어/파이썬 & 장고 2017. 1. 26. 17:19
Django 정적 파일Django는 실 서비스 환경에서 사용할 정적 파일을 제공하는 기능을 제공하지 않습니다. 서버에 저장된 정적 파일을 읽어들여서 그대로 웹 클라이언트에 보내기만 하면 그만인 단순한 기능인데도 Django는 그런 기능을 제공하지 않습니다. 왜냐하면 그럴 필요가 없기 때문인데, 앞서 설명한 바와 같이 그런 작업에 대해서는 웹 서버가 전문가이기 때문입니다. 게다가 웹 애플리케이션은 웹 서버와 연결하는 중간 인터페이스를 거치므로 효율이 더 떨어집니다. 하지만, 개발 상황인 경우는 효율보다는 기능(역할)이 중요한 경우가 많습니다. 정적 파일이 제대로 제공되는지 확인하려고 항상 웹 서버를 구동할 필요는 없습니다. Django는 개발 단계에서 쓸 정적 파일 제공 기능을 제공합니다. 성능은 웹 서버..
-
[Golang] 파라미터 ... 의미언어/Golang 2017. 1. 18. 18:05
Go 패키지를 볼 때, 아래와 같은 문법을 사용한 함수를 심심찮게 볼 수 있습니다.func GetCommandLineMultiArgs(args ... string) { arguments := make(map[string]*string) for _, arg := range args { tempVar := flag.String(arg, "", arg) arguments[arg] = tempVar } flag.Parse() } ...의 의미는 파이썬의 *args와 유사합니다. 파라미터로 입력된 타입의 데이터를 몇 개 받을지 확실하지 않을 때 사용합니다.아래는 String 타입의 데이터를 받는 예제입니다.package main import "fmt" func main() { test("111") test("11..
-
[Golang] init() 함수 호출 시점언어/Golang 2017. 1. 18. 18:00
var WhatIsThe = AnswerToLife() func AnswerToLife() int { return 42 } func init() { WhatIsThe = 0 } func main() { if WhatIsThe == 0 { fmt.Println("It's all a lie.") } }AnswerToLife()함수는 init()함수가 호출되기 이전에 호출이 됩니다. 그리고 init() 함수는 main() 함수가 호출되기 이전에 호출이 됩니다.명심해야 할 것은 main()이 있던 없던 init()함수는 항상 호출됩니다. 따라서 init()함수를 가지고 있는 패키지를 import할 경우 init()함수가 실행됩니다. 또한, 패키지 당 여러 init () 함수를 가질 수 있으며, 모든 변수가 초기..
-
[Python] 스코프 규칙언어/파이썬 & 장고 2017. 1. 18. 14:47
파이썬에는 지역, 전역, 내장 스코프를 지원합니다.지역 스코프: 함수 내부에서 생성되는 스코프전역 스코프: 모듈(파이썬 파일) 스코프내장 스코프: 파이썬 자체 내장 영역 스코프각각의 스코프 특성 때문에 변수의 트성도 지역과 전역으로 나뉘어 집니다. 파이썬이 지역과 전역을 선언할 때 전역변수를 선언하거나 명시할 때 global 키워드를 사용해야 합니다. def func_scope(): print(a) a = 100 func_scope() # 결과 # 100위의 예제와 같이 전역변수를 참조만 하여 사용할 때 (전역변수의 수정이 일어나지 않을 때)는 global 키워드 없이 그대로 사용할 수 있습니다. def func_scope(): print(a) a = 200 print(a) a = 100 func_sco..
-
[Golang]슬라이스 용량 주의사항언어/Golang 2017. 1. 18. 09:44
슬라이스는 가변적으로 변하기 때문에 연속된 메모리 공간을 활용합니다. 따라서 용량에 제한이 있습니다.만약 슬라이스를 make([]int, 5)와 같이 선언하면 용량도 5가 됩니다. 여기에 임의의 정수값 하나를 덧붙인다면 용량이 부족하므로 현재 상주하고 있는 메모리 공간이 아닌 더 넓은 메모리 공간으로 이사를 가게 됩니다.이러한 작업이 빈번하게 일어나면 당연히 성능이 저하됩니다. make([]int, 5, 10)과 같이 가능하면 슬라이스를 사용할 때 최대로 사용할 메모리 공간을 미리 설정하는 것이 성능에 도움이 됩니다.
-
[Golang] 현재 폴더 경로 확인언어/Golang 2017. 1. 17. 17:13
import ( "os" ) func main() { path, _ := os.Getwd() )
-
[Python] Tip - tracemalloc으로 메모리 사용 현황과 누수를 파악언어/파이썬 & 장고 2017. 1. 15. 20:19
파이썬, 즉 CPython의 기본 구현은 참조 카운팅(reference counting)으로 메모리를 관리합니다. 참조 카운팅은 객체의 참조가 모두 해제되면 참조된 객체 역시 정리됨을 보장합니다. CPython은 자기 참조 객체가 결국 가비지 컬렉션되는 것을 보장하는 사이클 디텍터(cycle detector)도 갖추고 있습니다.이론적으로는 대부분의 파이썬 프로그래머가 프로그램에서 일어나는 메모리 할당과 해제를 걱정할 필요가 없다는 의미입니다. 즉, 언어와 CPython 런타임이 자동으로 처리합니다. 그러나 실제로 프로그램은 결국 참조 때문에 메모리 부족에 처합니다. 파이썬 프로그램이 어디서 메모리를 사용하거나 누수를 일으키는지 알아내는 건 힘든 도전과제입니다.메모리 사용을 디버깅하는 첫 번째 방법은 내장..
-
[Python] Tip - 최적화하기 전에 프로파일언어/파이썬 & 장고 2017. 1. 15. 20:00
파이썬의 동적 특징은 런타임 성능에서 놀랄 만한 동작을 보여줍니다. 느릴 것이라고 예상한 연산이 실제로는 엄청나게 빠릅니다(문자열 처리, 제너레이터). 빠를 것이라고 예상한 언어늬 특성은 실제로 매우 느립니다(속성 접근, 함수 호출). 파이썬 프로그램을 느리게 만드는 요인이 불분명할 수도 있습니다.가장 좋은 방법은 최적화하기 전에 직관을 무시하고 직접 프로그램의 성능을 측정해보는 것입니다. 파이썬은 프로그램의 어느 부분이 실행 시간을 소비하는지 파악할 수 있도록 내장 프로파일러(profiler)를 제공합니다. 프로파일러를 이용하면 문제의 가장 큰 원인에 최적화 노력을 최대한 집중할 수 있고, 속도에 영향을 주지 않는 부분은 무시할 수 있습니다.예를 들어 프로그램의 알고리즘이 느린 이유를 알고 싶다고 가정..
-
[Python] Tip - 루트 Exception을 정의해서 API로부터 호출자를 보호언어/파이썬 & 장고 2017. 1. 15. 19:22
모듈의 API를 정의할 때 사용자가 던지는 예외는 인터페이스의 일부로 정의한 함수와 클래스 만입니다.파이썬은 언어와 표준 라이브러리용 내장 예외 계층을 갖추고 있습니다. 오류를 보고할 때 자신만의 새 타입을 정의하는 대신 내장 예외 타입을 사용할 가능성이 큽니다. 예를 들어 함수에 올바르지 않은 파라미터가 넘어오면 valueError예외를 일으 킬 수 있습니다.def determine_weight(volume, density): if density