분류 전체보기 (657) 썸네일형 리스트형 [GO] Todo list - 배포(heroku) 이전 블로그[[GO] Todo list - session 별 데이터 관리] 소스를 이용하여 heroku.com 에서 배포하는 방법입니다. 최종소스는 여기서 참고하세요 ==> [heroku 배포용 최종소스], 변경된 DB까지 반영된 버전. 1. 기존 소스 코드를 모두 복사하여 자신이 원하는 폴더를 만든다. heroku_todos> 2. mod, sum 파일 삭제 후 mod 초기화. go mod tidy heroku_todos>go mod init heroku/todos go: creating new go.mod: module heroku/todos go: to add module requirements and sums: go mod tidy heroku_todos>go mod tidy go: finding.. [GO] Todo list - session 별 데이터 관리 이전 블로그에서는 session 정보를 이용하여 로그인 여부만 확인하여 다른 사람의 리스트도 볼 수 있는 구조임. 이번에는 session 정보를 이용하여 자신의 todo list만 볼수 있도록 샘플 코드를 수정합니다. ./model/model.go 수정 사항 // 수정전 type DBHandler interface { // private 처리함 GetTodos() []*Todo AddTodo(name string) *Todo RemoveTodo(id int) bool CompleteTodo(id int, complete bool) bool Close() } // 수정후 type DBHandler interface { // private 처리함 GetTodos(sessionId string) []*Todo.. [GO] Todo list - Google Oauth2 Google Oauth 관련 참고 자료 [https://unsungit.tistory.com/98?category=1060987] [https://unsungit.tistory.com/99?category=1060987] session 관련 패키지 go get github.com/gorilla/sessions 환경변수에 "SESSION_KEY" 추가할것. 키는 임의의 값으로 입력하면 됨. 이 키값으로 session 정보를 암호화하는 키로 사용된며, 차후에 변경가능. 기본구조 "/" 로 접속하면 session 정보가 없으므로 singin.html 로 이동 이후 부터는 "http://localhost:3000/todo.html" 페이지로 자동 이동한다. 특이사항) 로그인시 "/auth/google/login.. [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 .. 이전 1 ··· 68 69 70 71 72 73 74 ··· 83 다음