프로그래밍(Web)

    [바미] Typescript-restful-starter 코드 분석해보기 !

    본 글은 github.com/camesine/Typescript-restful-starter camesine/Typescript-restful-starter Node.js + ExpressJS + Joi + Typeorm + Typescript + JWT + ES2015 + Clustering + Tslint + Mocha + Chai - camesine/Typescript-restful-starter github.com 의 코드를 가지고 TypeScript를 처음 공부 하였을 때 정리 해놓은 것을 써놓은 글입니다. 혹여나 코드의 해석이 틀릴 수 있으므로, 유의 하시기 바랍니다. app/controllers 코드 분석 ContController.ts req, res 설정 부분 import * as exp..

    [바미] Go - Websocket

    WebSocket? Web에서 할 수 있는 Socket 프로그래밍이라는 뜻인데, HTML5에 들어간 표준에 하나로, 지난번에 다루었던 Event소스라는 것과 더불어서 동적인 웹을 만드는데 사용되는 도구입니다. 이것을 사용하여 채팅 서비스 앱을 구현 해봅시다! 우선 EventSource에서 불필요한 부분들을 지운 코드를 가져왔습니다. main.go package main import ( "net/http" "github.com/gorilla/pat" "github.com/urfave/negroni" ) func main() { mux := pat.New() n := negroni.Classic() n.UseHandler(mux) http.ListenAndServe(":3000", n) } 기본 mux에 기..

    [바미] Go - PostgreDB(2) feat. 드디어 풀린 에러

    위와 같은 에러는 main함수의 os.Getenv()에서 발생하여 m := app.MakeHandler("발급받은 Postgre URL") 이런식으로 해결했습니다. 그 후 git add, commit, push 후 heroku -logs --tail을 사용하여 정상적으로 작동하는지 로그를 확인해 줍니다. postgre에서는 '?'를 지원하지 않는다는 의미인데, postgre ?가 아닌 $와 숫자를 사용해야 합니다. func (s *pqHandler) GetTodos(sessionId string) []*Todo { todos := []*Todo{} rows, err := s.db.Query("SELECT id, name, completed, createdAt FROM todos sessionId=$1",..

    [바미] Go - PostgreDB

    지금까지 Todos를 Heroku에 배포를 했습니다. heroku에서는 dyno라는 컨테이너를 쓰는데, 이것이 statelss라 fileDB를 사용할 수 없게 되어 실제 DB를 사용해야 하는데 heroku가 클라우드 서비스이기 때문에 PostgreDB라는 DB서비스를 10000레코드까지만 무료로 제공하고 있습니다. 우선 커맨드 창을 띄운 뒤에 Heroku 로그인을 해줍니다. 그 후 해당 명령어를 입력합니다. heroku addons:create heroku-postgresql:hobby-dev 이렇게 하면 현재 앱에 postgresqlDB가 추가가 되고, 티어는 hobby-dev인 무료티어로 추가가 됩니다. Created postgresql-round-47123 as DATABASE_URL 라는 의미는 ..

    [바미] Go - todos 배포

    우선 기존에 만들었었던 todos 파일을 사용자 계정 폴더에 빼내어 줍니다. 여기에 Go 모듈을 만들어 줍니다. 명령 프롬프트 창을 키고 방금 옮겼던 폴더로 이동 합니다. 그 다음 go mod init changbeomWeb/todos를 입력해 줍니다. go mod init하면 mod가 initialize하게 되는데 그 때 뒷부분에 만들려는 모듈의 이름을 적어준다. 되도록 겹치지 않게 해줍니다. 이렇게 하면 MOD파일이 생성된 것을 확인할 수 있습니다. 그 후 git init를 사용하여 git을 initialize하게 해줍니다. 그 후 해당 폴더를 열어서 import 부분들을 mod init했던 부분과 맞추어 수정해 줍니다. app/app_test.go import ( "encoding/json" "fm..

    [바미] Go - HEROKU를 사용한 웹 호스팅

    HEROKU를 들어가 회원가입 후 로그인을 해줍니다. 그 후 Documentation에 들어가서 Get Started를 클릭 후 Go언어를 선택해 줍니다. 그러면 Go언어를 올릴 수 있는 튜토리얼이 진행이 되는데, Start를 클릭 합니다. 그러면 설치하는 화면이 나오는데, Git을 먼저 설치 한 뒤, 각 운영체제에 맞게 HEROKU Tool을 설치해 줍니다. 설치가 완료 되었다면, 명령프롬프트 창을 열고, heroku login 을 입력해주면 이러한 문구가 뜨는데 아무키나 눌러 줍니다. 그러면 새 창이 뜨면서 로그인 창이 뜨게 되는데요. 그 후 로그인을 하고 브라우저를 닫아주면 로그인이 완료 되어 있는 것을 확인 할 수 있습니다. 다음 단계로 넘어가 봅시다. 그러면 App을 Prepare 하는 페이지가..

    [바미] Go - 세션별 데이터 저장

    다른 아이디로 로그인해도 똑같은 Todo가 나오는게 문제 였었는데 각 세션별로 따로 데이터를 저장해서 각 세션에 해당하는 데이터만 보여주도록 수정 할 것입니다. 먼저 model/sqliteHandler.go에 세션 아이디도 저장할 수 있도록 CREATE TABLE 쿼리문을 수정 해줍니다. func (s *sqliteHandler) GetTodos(sessionId string) []*Todo { todos := []*Todo{} rows, err := s.db.Query("SELECT id, name, completed, createdAt FROM todos WHERE sessionId=?", sessionId) if err != nil { panic(err) } defer rows.Close() for..

    [바미] Go - Login Page

    지난번에 만들었던 Todos에 Login 화면을 추가 해봅시다! 풀소스 부분에 public/signin.css와 public/signin.html파일이 있습니다. 이것을 열어보면 아래와 같이 단순하게 구글 로그인과 페이스북 로그인을 지원하는 Page인데요. 이번에는 지난 번에 했었던 Google OAuth를 가지고 구글 로그인을 할 수 있도록 구현해봅시다. 먼저 app폴더에 signin.go 라는 파일을 추가해서 지난번에 했었던 OAuth 코드를 main()을 가져옵니다. app/signin.go package app import ( "context" "crypto/rand" "encoding/base64" "fmt" "io/ioutil" "log" "net/http" "os" "time" "github..

    [바미] Go - sqlite3

    SQLite 설치 Go에서 SQLite를 사용하기 위해서 mattn/go-sqlite3를 사용할 것인데요. 이 패키지가 사용하는 것이 CGO라는 것을 사용합니다. CGO는 C언어 라이브러리를 사용 할 수 있게 해주는 것인데, 문제는 이 C언어를 컴파일 할 수 있어야 합니다. 이 C언어가 표준 C언어인데, 표준 C언어를 컴파일 하기 위해서는 표준 컴파일러가 필요 합니다. MAC이나 리눅스는 기본적으로 표준 C컴파일러가 깔려있는데 MS-Window는 표준 컴파일러인 gcc가 깔려있지 않습니다. Go에서는 gcc를 기본적으로 사용하는데 윈도우에서는 제공을 하고 있지 않아서 'MinGW'라는 표준 컴파일러가 돌아가는 환경을 만들었습니다. 그래서 MinGW에서 gcc를 돌려야하는 복잡한 문제가 생겼습니다. MS가..