본문 바로가기

GO lang/web

(11)
[GO] Todo list - postgresql DB를 sqlite 에서 postgresql 로 변경하는 방법입니다. 최종소스는 여기서 참고하세요 ==> [heroku 배포용 최종소스] 여기서 다루는 내용은 postgresql - heroku 에 postgresql 설치하는 방법 postgresql - 패키지 설치 postgresql 핸들러 만들기 model.go, main.go - 핸들러 및 DB 변경 코드 수정 1. heroku 에 postgresql 설치하는 방법 heroku_todos>heroku addons:create heroku-postgresql:hobby-dev » Warning: heroku update available from 7.53.0 to 7.59.2. Creating heroku-postgresql:hobby-dev on ..
[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] 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..