왜 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..

윈도우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..

[번역글] How I write HTTP services after eight years.

원문 : How I write HTTP services after eight years. ( https://pace.dev/blog/2018/05/09/how-I-write-http-services-after-eight-years.html ) 관련 동영상 : GopherCon 2019: Mat Ryer - How I Write HTTP Web Services after Eight Years 전체 내용은 원문에서 확인하실 수 있으며, 또 내용 중 일부 오역이 포함되어 있을 수 있으니, 가능하면 원문을 참조하시는 걸 추천드립니다. 서비스를 만드는 방법은 시간이 지남에 따라 바뀌어왔습니다. 그래서 지금은 서비스를 어떻게 만들고 있는지 각각의 경우에 따라 유용한 패턴을 예로 들어 공유하고 싶습니다. 서버 구조체..

GitHub OAuth 구현하기 (1)

앞으로 몇개 글을 통해서 Go로 OAuth 인증을 구현하는 것을 해보려고 합니다. 오늘 글은 그 첫번째로 OAuth인증 방식과 GitHub에서 OAuth앱을 등록하는 방법을 간략히 설명합니다. 아마도 "Login with Google" 또는 "Sign in with GitHub" 이라는 버튼은 이제 익숙하게 봐왔을 것입니다. 사용자에게는 편리한 기능이지만, 기능을 개발하는 개발자는 개발하기가 좀 까다로운 기능입니다. ( 물론 이미 훌륭하게 구현해 놓은 소스코드들이 있기 때문에 반드시 까다롭다고 말할 수는 없습니다. ) 바로 OAuth 라는 규약의 인증과정을 이해해야 하고, 그 규약에 맞추어 메시지를 주고 받을 수 있어야 하기 때문이기도 하고, 테스트를 하려면, 직접 해당하는 서비스와 연결해야 할 필요가 ..