본문 바로가기

GO lang

(26)
[GO] Google Oauth 샘플 코드 필요한 패키지 go get golang.org/x/oauth2 go get cloud.google.com/go index.html Google Login main.go package main import ( "context" "crypto/rand" "encoding/base64" "fmt" "io/ioutil" "log" "net/http" "os" "time" "github.com/gorilla/pat" "github.com/urfave/negroni" "golang.org/x/oauth2" "golang.org/x/oauth2/google" ) const portNumber = ":3000" var googleOauthConfig = oauth2.Config{ RedirectURL: "http://..
[GO] Google Oauth 설정 Google Oauth 설정을 하기위해서는 2가지 설정이 필요합니다. 1. Oauth 동의 화면 2. 사용자 인증정보 1. Oauth 동의 화면 - 간략한 설명은 아래와 같음. API 및 서비스 > Oauth 동의 화면 > 유저타입에서는 외부만 선택가능(내부는 구글 워크스페이스 사용자만 사용가능) > 만들기 클릭. 1 OAuth 동의 화면 앱이름은 GoWeb-Oauth 사용자 지원이메일은 본인정보로 설정. 개발자 연락처 정보는 본인정보로 설정. > 저장 후 계속 2 범위 입력안함. > 저장 후 계속 3 테스트 사용자 입력안함. > 저장 후 계속 4 요약 요략만 보여줌. 나중에 테스트사용자 등 정보변경 가능 2. 사용자 인증정보. ID와 KEY를 기억하지 못한다면, 아래의 다운로드 버튼을 통해서 확인가능하..
[GO] Todo list - sqlite 기본 구조는 아래와 같습니다. 이번에는 sqlliteHandler.go 파일을 마무리하고 디비파일 위치와 이름을 파라미터로 처리하게 변경하였음. 그래서 테스트시에는 test.db 를 사용하고 실제 운영시에는 todo.db 를 사용하게 처리 가능하였음. ./model/sqlliteHandler.go - 완료 package model import ( "database/sql" "time" _ "github.com/mattn/go-sqlite3" ) type sqliteHandler struct { db *sql.DB } func (s *sqliteHandler) GetTodos() []*Todo { todos := []*Todo{} sql_string := "SELECT id, name, completed,..
[GO] Todo list - interface 구현2 sqllite 로 변경하는 중간과정으로 interface 구조를 구현하던중, DB 의 Close 기능은 main.go 까지 전달해야해서 변경사항이 예상보다 많았습니다. 1. 기존에 model 에서 처리하던 interface 이름을 공개하여 app.go -> main.go 까지 전달함. 2. 해당 interface 이름을 공개하며 인터페이스 및 매소드명을 대문자로 모두 변경함. 기본 구조는 아래와 같음. model.go package model import ( "time" ) type Todo struct { ID int `json:"id"` Name string `json:"name"` Completed bool `json:"completed"` CreatedAt time.Time `json:"creat..
[GO] Todo list - interface 구현1 다음 단계는 map 방식의 구조에서 sqlite DB 형식으로 todo list 저장방식을 변경할 예정입니다. 그래서 구조변경을 쉽게할수 있는 interface 방식으로 구조를 변경하는 샘플입니다. interface 의 장점은 특정 기능을 변경시, 간결하여 유지보수가 쉬운 장점이 있다. 예를 들면, todo lists 를 저장하는 방식을 메모리방식에서 DB 방식으로 변경시 수정사항을 최소화 할 수 있다. 코딩량이 줄어 든다는 의미는 아니고, 변경사항을 최소화하여 오류 발생 가능성을 최소화 할 수 있다. 기본 구조는 아래와 같다. ./model/model.go 변경 사항 1. interface 에 실제 함수 기능 선언 package model import ( "time" ) type Todo struct ..
[GO] Todo list - refactoring(구조변경) 지난 게시글에서 만든 todo list 를 refactoring 하였습니다. refactoring 을 쉽게 하기 위해서 테스트 코드를 먼저 작성하여 현재의 기능을 검증하고 코드를 수정하면 refactoring 으로 인한 오류를 쉽게 검증할 수 있습니다. 기본구조는 아래와 같다. 1. 테스트 코드를 먼저 만들어서 기존 기능을 검증하겠습니다 ./myapp/app_test.go package myapp import ( // 모델은 검증코드 이후, refactoring 에서 추가한 부분입니다 "GO/tuckersGo/goWeb/web16-todo_refactoring/model" "encoding/json" "log" "net/http" "net/http/httptest" "net/url" "strconv" "..
[GO] Todo list - map 자료구조 참고자료인 bootstrap template 은 todo list 를 html 화면에 직접 추가/제거하는 방식입니다. 기본 템플릿을 수정하여 데이터를 서버의 메모리, map에 저장하는 방식입니다. 서버를 새로 시작하면 이전 데이터는 지워지고 기본 데이터에서 시작합니다. 초기화면 기본 폴더 구조는 아래와 같습니다. ./main.go package main import ( "GO/tuckersGo/goWeb/web16-todo/myapp" "log" "net/http" "github.com/urfave/negroni" ) const portNumber = ":3000" func main() { mux := myapp.MakeNewHandler() ng := negroni.Classic() ng.UseHand..
[GO] Decorator - 심화(log pattern) main.go package main import ( "GO/tuckersGo/goWeb/web10/decoHandler" "GO/tuckersGo/goWeb/web10/myapp" "log" "net/http" "time" ) const portNumber = ":3000" func logger1(w http.ResponseWriter, r *http.Request, h http.Handler) { start := time.Now() log.Printf("[LOGGER1] Started\n") h.ServeHTTP(w, r) log.Printf("[LOGGER1] Completed, time: %v ms\n", time.Since(start).Milliseconds()) } func logger2(w ..