[Go] cookie에 object 저장하기.

gorilla 웹 툴킷이라는 Go의 서드파티 라이브러리가 있습니다. 그 중에 session 이라는 패키지는 쿠키, 세션등을 편리하게 이용할 수 있는 기능을 제공합니다. 이 글에는 session 패키지를 이용해서 사용자 정보를 쿠키에 저장하다가 알게 된 것을 기록해 두려고 합니다. 구현하려던 기능은 이렇습니다. 사용자가 접속하면 로그인 정보를 확인합니다. 로그인 되지 않은 경우, 로그인을 요청합니다. 로그인 후 사용자 정보를 쿠키에 저장합니다. 일정 시간동안은 브라우져를 종료하더라도 쿠키에서 사용자 정보를 읽어 로그인하지 않도록 합니다. 그렇게 하기위해 다음과 같은 사용자 정보를 보관할 구조체를 선언합니다. type User struct { Name string Email string } 그리고 main...

왜 http.handleFunc가 두번 호출될까?

Go로 간단한 테스트 페이지를 만들었는데, http.HandleFunc가 두번 호출되는 현상을 발견했습니다. 전부가 그런건 아니었고, 한 개의 핸들러만 두 번씩 호출되었는데, 그 원인은 의외로 간단했습니다. 먼저 코드는 대충 이렇게 생겼습니다. func main() { http.HandleFunc("/", RenderMainView) log.Fatal(http.ListenAndServe(":8000", nil)) } func RenderTemplate(w http.ResponseWriter, name string, data interface{}) { tmpl, _ := template.ParseFiles(name) tmpl.Execute(w, data) } func RenderMainView(w http..

내가 만든 주식 전략의 검증하기( 영웅문 )

저는 HTS를 사용한 경험은 거의 없습니다. 그 이유는 간단합니다. 장이 열리고, 장이 마감되는 시간에는 회사에서 일을 하기 때문입니다. 그리고 제가 일하는 회사는 증권사 접속이 차단되어 있습니다. 그래서 거래도 조회도 모두 MTS를 이용합니다. 그리고 굳이 HTS를 이용해야 되? 라는 생각을 가지고 있었는데, 최근에 HTS를 사용해야 할 이유가 생겼습니다. 주식 투자를 할 때, 소문에 사고 기사에 팔라는 말이 있습니다. 항상 시장이 돌아가는 상황에 귀를 기울이고 대응하라는 의미로 해석할 수도 있는데, 회사원 입장에서 하루종일 그렇게 할 수는 없습니다. 그랬다가는 가장 안정적인 수익율을 보장해주는 노동 수익을 잃어버릴 수도 있으니까요. 그래서 저는 얼마 전부터 저평가 되어 있다고 판단되는 종목을 사서, ..

윈도우10 클립보드

MacOS에서 가장 많이 쓰는 앱 중하나는 Clipy(https://github.com/Clipy/Clipy) 가 아닐까 싶습니다. 아마 MacOS를 쓰시는 분이라면, 클립보드 확장 앱인 Clipy는 알고 계시거나 써보셨을 것 같습니다. 아직 안써보셨다면 꼭 써보세요. 후회하지 않으실 겁니다. 무엇보다 좋은 점 중 하나는 한번 복사한 것은 이력이 남기 때문에 다시 불러오기 쉽고, 단축키를 지원하기 때문에 마우스를 사용하지 않아도 된다는 점이 작업 능률을 많이 높혀 줍니다. 저는 요새 윈도우를 많이 사용하면서, 저거는 참 아쉬웠는데, 최근에 윈도우에도 비슷한 기능이 있다는 걸 알게되어 잘 쓰고 있습니다. 바로 윈도우10의 클립보드 기능인데요. Ctrl + C로 복사한 후, Ctrl + v 대신 윈도우+v를..

GitHub OAuth 구현하기 (2)

2020/07/04 - GitHub OAuth 구현하기 (1) 에서 이어집니다. GitHub OAuth의 인증을 진행하기 위해, 3가지 파일을 만들었습니다. main.go : 앱의 라우팅 및 OAuth 인증을 진행하기 위한 코드 login.html : "GitHub으로 로그인하기" 버튼을 보여주며, 인증 되지 않은 사용자가 처음 접하는 화면입니다. main.html : GitHub으로부터 인증 받은 이후 처음 보여질 화면입니다. main.go에서 정의한 라우팅은 http.HandleFunc("/", MainHandler) http.HandleFunc("/auth", AuthHandler) http.HandleFunc("/auth/callback", CallbackHandler) log.Fatal(http..