티스토리 뷰
google hackfair 2015 를 준비하면서 겪었던 것들을 잊기 전에 정리해본다. 아쉽게도 전시회 명단에는 들지 못했지만 ㅠㅜ
go 로 만든다고 매우 큰 속도 향상은 없었다. 연산을 많이 하는 작업은 빨라질 거라 예상하는데, 단순한 request~response 의 경우 속도가 그렇게 빠르다는 느낌은 없다. (내가 아직 잘 몰라서겠지만)오히려 단순한 작업의 경우 1,2초의 응답 속도를 보일 때가 있다. 왜 그런지는 좀 더 파악해봐야 할듯.
appengine 에서 datastore 를 사용할 때 로컬에서는 문제가 없었는데 실제 서버에서 "" 이런 오류가 날 경우가 있다. 해당 쿼리문의 조합을 지원하는 복합 인덱스가 있어야 한다는 것인데, 로컬 서버에서는 문제가 없었기 때문에 좀 난감했다. 로컬 서버를 띄울 때 'devappserver.py --require_indexes yes .' 형태로 띄우면 로컬 서버에서도 해당 문제가 재현이 된다. 원인은 index.yaml 에 복합 인덱스를 실수로 수동으로 지웠기 때문이었다. require indexes 옵션없이 로컬에서 서버를 동작시키면 index.yaml 파일을 갱신해주는데 이 파일을 수동으로 편집하고 서버에 올렸기 때문에 발생한 문제였다. 이것도 나중에 자세히 살펴봐야할듯. 여튼 중요한 건, 쿼리문에서 2개 이상의 필드를 함께 사용하면 그 필드들이 묶인 복합 인덱스가 필요하다. filter("A").order("B") 이면 A+B 의 복합 인덱스가 필요.
datastore 에서 1500자 넘는 문자열은 string 으로 저장이 안되는 것으로 나오는데, 좀 더 살펴보니 index 를 걸지 않으면 사용할 수 있다. 자동으로 index 가 걸려서 사용 못하나 싶었지만, `datastore:",noindex"` 를 구조체 필드에 붙여주면 index 를 걸지 않게 된다.
일반 go 언어에서는 http.Get 으로 다른 웹페이지를 가져오지만, appengine 에서는 "appengine/urlfetch" 를 사용해야 한다
index.yaml 에서 특정 디렉토리 전체를 업로드/노출시킬 수 있다. static_dir 구문을 사용하면 쉽게 가능하다.
- Total
- Today
- Yesterday