vue_without_cli.zip
0.00MB

cli 설치하지 않고 기존 프로젝트에 script 파일만으로 동작

1. login 화면이므로 뒷단인 /loginproc는 구현해야 함.

2. go lang에서 사용을 위해 기본 delimiter인 {{ }} 를 [[ ]] 으로 변경 함.
화면에서 {{ abc }} 로 출력하려고할 때 go에서 먼저 abc라는 변수를 찾음
그래서 분리가 필요하여 Vue에서 사용하는 delimiter를 변경함

go에서는 {{ abc }}, vue에서는 [[ abc ]] 로 쓰면 됨.
각 vue component에 delimeters : ['[[', ']]'] 를 추가

3. component에서 binding 할 변수 형태 주의
(1) data : { pataTitle }

(2) data : function(){ return { pageTitle : "타이틀" } }

 - new Vue 에서는 (1)의 형태가 동작함
 - Vue.component 에서는 (2)의 형태가 동작함

4. 정의한 component 불러오기
cli가 설치된 경우 xxx.vue 파일이면 한방에 되지만 없이 하는 것이므로 import 구문이 먹지 않는다.
그래서 script 태그에 component 파일 위치를 추가한 다음
new View 의 components 안에 사용할 태그명 :  component 변수 명을 쓴다.

ex) var componentlogin = Vue.component("login", ...)

var app = new Vue({ ... , components : { 'login', componentlogin } })


5. html 태그의 경우 굳이 script 내에 template으로 추가할 필요가 있는지 검토할 것
왜냐하면 go lang의 경우 자체 template 기능이 있어 화면을 분할하여 html 태그가 정의 됨.
다시 script로 lendering할 필요가 굳이 있는가?

특정 요건( html + script)인 경우에는 template로 뺴고
아닌 경우에는 script 에 function으로 제어해도 될 듯.

-----

첨부된 파일 참조할 것.

728x90

기존 프로젝트에 Vue.js 를 적용하기 위한 방법이다.
.vue 파일로 되는지는 아직 안해보고
성공한 것까지

my-component.js
0.00MB

/views/index.html

/static/assets/js/vuecommon.js

/static/assets/js/components/my-component.js

component들을 먼저 선언아고 new Vue 는 가장 마지막에 선언한다.
vuecommon.js 안에 var child가 정의되어있으나 사용하지 않는데
components로 주석해 놓은부분 풀려 사용가능.

index.html
0.00MB
vuecommon.js
0.00MB

 

완전한 예제는 다음 링크 참조

github.com/sobpilot/vuespa/tree/master/src

 

sobpilot/vuespa

A SPA Vuejs Application with Vuejs Router without WebPack or Node. - sobpilot/vuespa

github.com

 

728x90

index.html 추가할 내용


 

script 파일 경로

vuecommon.js 에 들어갈 내용

var app = new Vue({
  el: '#app',
  delimiters: ['[[', ']]'],
  data: { // 상태 message: '안녕하세요 Vue!', liked: false, },
  template: ` // 뷰
      [[ message ]]

  `,
  methods: {
      // 액션
      onClickButton() { this.liked = true; }
  }
})

Vue.component('my-component', { template: '[[ message ]]', data: { message: 'hello' } })

728x90

can't load package: import cycle not allowed 오류는

go 에서 동일한 package인 경우에는 import 필요없이 바로 해당 method를 호출 할 수 있다.

따라서 import 구문에 해당 package가 있는 경우에 나타난다.

dbHander.go 파일에 Put(name, value string) 이 정의되어 있고
같은 폴더에 user.go 파일이 있어을 때

user.go 에서
import ( db "abc/databases" ) 로 정의한 뒤에 
db.Put("aaa", "bbb") 를 쓰면 안된다는 얘기다.

그냥 import, alias 없이 바로 PUT("aaa", "bbb") 를 쓰면 된다.

또한
databases/dbHandler.go 가 있고
databases/store/user.go 가 있는 경우에는 같은 폴더에 있지 않으므로

import 구문을 써서 사용한다.

728x90

Nutsdb with golang

2021. 2. 9. 09:03

Go lang에서 Nuts라는 key-pair 방식의 db를 쓸 때가 있다.
참고 : https://github.com/xujiajun/nutsdb#getting-started

1. 다운받기

go get -u github.com/xujiajun/nutsdb

이 때 
package golang.org/x/sys/unix: golang.org/x/sys is a custom import path for https://go.googlesource.com/sys, but /home/ubuntu/go/src/golang.org/x/sys is checked out from https://github.com/golang/sys.git

위와 같은 메세지가 나타날 수 있는데

package의 출처가 다르다는 메세지다.

각각의 폴더에 들어가서 파일들이 제대로 들어가 있으면 문제 없는 듯.
cd src/github.com/xujiajun/netsdb 
cd src/golang.org/x/sys

github의 example 아래 basic/main.go 를 참고하여
(https://github.com/xujiajun/nutsdb/tree/master/examples/basic)
NutsDbHndler.go 를 만듬. package는 databases
참고1 : init() method는 인자가 없는 func로 생성하면 자동으로 처리 됨. 따로 호출할 필요 없음.
참고2 : nuts db의 method 선언 형태는 if err := func(); err != nil {     } 형태임
  err := func();
  if err != nil {}
위 형태의 변형임.
참고3 : fileDir 은 현재경로 기준으로 하려면 "./aaa" 등으로 하고
그 외에는 절대 경로임
참고4 : init() 함수 내에 os.RemoveAll 이 있으므로 자칫하면 해당 폴더의 Data가 모두 지워질 수 있으므로 "./data" 등의 해당 db파일만 저장되는 경로를 따로 마련할 것.

databases/NutsDbHandler.go

package databases

import (
    "fmt"
    "io/ioutil"
    "log"
    "os"

    "github.com/xujiajun/nutsdb"
)

var (
    db     *nutsdb.DB
    bucket string
)

func init() {
    log.Println("NutsDbHandler init start")
    opt := nutsdb.DefaultOptions
    fileDir := "./databases"

    files_ := ioutil.ReadDir(fileDir)
    for _f := range files {
        name := f.Name()
        if name != "" {
            fmt.Println(fileDir + "/" + name)
            err := os.RemoveAll(fileDir + "/" + name)
            if err != nil {
                panic(err)
            }
        }
    }
    opt.Dir = fileDir
    opt.SegmentSize = 1024 * 1024 // 1MB
    db_ = nutsdb.Open(opt)
    bucket = "bucket"
    log.Println("NutsDbHandler init end")
}

func delete(keyName string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            return tx.Delete(bucket, key)
        }); err != nil {
        log.Fatal(err)
    }
}

func put(keyName, keyValue string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            val := []byte(keyValue)
            return tx.Put(bucket, key, val, 0)
        }); err != nil {
        log.Fatal(err)
    }
}

func put2(keyName, keyValue string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            val := []byte(keyValue)
            return tx.Put(bucket, key, val, 0)
        }); err != nil {
        log.Fatal(err)
    }
}

func read(keyName string) {
    if err := db.View(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            eerr := tx.Get(bucket, key)
            if err != nil {
                return err
            }
            fmt.Println("val:"string(e.Value))
            return nil
        }); err != nil {
        log.Println(err)
    }
}

// 사용방법 ex
// import( db "src/databases")

// func main() {
//  //insert
//  db.put("name1", "value1")

//  //read
//  db.read("name1")

//  //delete
//  db.delete("name1")

//  //read
//  db.read("name1")

//  //insert
//  db.put("name1", "value1")

//  //read
//  db.read("name1")

//  //update
//  db.put2("name1", "value2")

//  //read
//  db.read("name1")

// }

 

 

 

728x90
go: cloud.google.com/go/pubsub@v1.2.0: Get "https://proxy.golang.org/cloud.google.com/go/pubsub/@v/v1.2.0.mod": net/http: TLS handshake timeout 갑자기 위와 같은 에러로 실행이 안되는 경우가 있다. 내용은 TLS handshake timeout 즉 연결이 안되었다는 뜻으로 잠시 해 보거나 다른 네트워크로 붙어서 해 볼 것. go 프로젝트 처음 가동할 때 다운로드 받는 것들이 있는데 그 때 접속이 잘 안되면 위와같은 에러가 나기도 함.
728x90

가이드 문서링크 : docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/codecommit-user.pdf

github은 가입하게 되면 1개의 private repository를 생성할 수 있다.
그외에는 모두 public 으로 공개해야한다.
물론 내 프로젝트에 누가 신경을 쓰겠냐마는 그래도 

지금은 바뀌었네

  • Unlimited public/private repositories
  • Unlimited collaborators
  • 2,000 Actions minutes/monthFree for public repositories
  • 500MB of GitHub Packages storageFree for public repositories
  • Community Support

용량이 500MB, 2000 Actions

우선 aws에 회원가입을 하게되면 1년동안 아주 제한적인 기능들을 무료로 사용할 수 있다.
(프리티어가 아닌것들은 돈이 나가니 반드시 주의 해야한다)

AWS에 github과 같은 서비스로 Codecommit이 있다.

aws.amazon.com/ko/codecommit/pricing/

 

AWS CodeCommit 요금 | Amazon Web Services

달리 명시하지 않는 한 요금에는 VAT, GST, 해당 판매세를 포함한 관련 조세 공과가 포함되지 않습니다. * 활성 사용자는 해당 달에 Git 요청을 통하거나 AWS Management Console, AWS CLI 또는 AWS SDK를 사용

aws.amazon.com

일단 무기한으로 무료인데 자세히보면
1. 최초!!! 5명의 사용자
2. 매달 50G
3. 매달 1만건의 Git요청
4. 무제한 리포지토리!!!

기본적으로 private인거다 

code commit을 이용하기 위해서는 

1. 회원가입
2. IAM 생성(추천)
3. 해당 유저(IAM)에 codecommit 권한주기
위 작업들을 선행으로 작업해야하고

그다음 codecommit에 와서 repository 생성하면
접속 id/pw를 생성할 수 있다.(2개까지)
(엑셀로도 다운받을 수 있다)
비번을 까먹으면 기존에 있는거 삭제또는 비활성하고 추가해야 한다
비번 변경은 안됨.

이후는 다음 링크 참조

https://docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/getting-started.html

728x90

처음 Table 생성도 하지 않고 select 등을 날리면

no such table: user

최소한 table 한개는 생성한다.

CREATE TABLE user (
        id integer primary key autoincrement,
        username varchar(100),
        password varchar(1000),
        email varchar(100)
    );

그런데 해당 table에 Data 가 없이 조회를 할 때 적절한 처리를 하지 않으면 index out of range가 날 수 있다.

2021/02/03 09:20:23 http: panic serving [::1]:58206: runtime error: index out of range [0] with length 0

data insert

INSERT INTO "user" VALUES(1,'ab','cd','ab@cd.com');

이후 실행해보면 정상적으로 쿼리가 날아감.

소스코드에 문제가 없는데 오류가 나는경우 체크해 볼 것.

 

참고 : sqlite 콘솔에 접속했다가 종료할 때 quit 등의 다른 명령어가 있는 것은 아니고

ctrl + D  

728x90

sql 을 사용할 때 run을 해 보면

exec: "gcc": executable file not found in $PATH

위와 같이 exec 오류가 나는 경우가 있다.

sudo apt-get install g++

설치하고 하면 됨.

728x90

네이버에서 클라우드 서비스를 한다.

GitHub - NaverCloudPlatform/ncloud-sdk-go-v2

여기에서 시작을 하려고 하면 매우 불친절한 설명으로 제대로 실행이 되지 않는다.

AWS의 경우에는 간단한 예제파일도 있는데...

초보자에게 환경이 제대로 되었는지 확인하려고 문의해봐도... 대답은 그닥..

어쨌거나 제공된 샘플을 실행해보기 위한 과정이다.

1. go get github.com/NaverCloudPlatform/ncloud-sdk-go-v2

이거 실행하면 package github.com/NaverCloudPlatform/ncloud-sdk-go-v2: no Go files in ... 으로 재대로 설치가 되지 않는다.

github에도 관련 issue가 있는데 오늘로 4일째 답변이 없네...

설치는 포기하고 clone로 소스를 다운받는다.

해당 프로젝트에서 샘플 소스를 실행하면 $HOME/.ncloud/configure 파일이 없다고 나온다.
github 설명에 해당 내용이 있다.

그래서 해당 경로에가서 파일을 강제로 생성한다.

이제 샘플코드를 실행해보면

인증정보가 없다고 나온다.

로그를 찍어보면

로그에서 apiKeys가 비어있는것을 확인할 수 있다.

ncloud.Keys() 에서 값이 없다는 것인데 ncloud-sdk-go-v2/ncloud/configuration.go 에 Keys() 라는 func가 있다.

들어가서 확인해보니...

case문으로 "ncloud_access_key_id"를 비교한다... 설명에는 NCLOUD_ACCESS_KEY_ID (or NCLOUD_ACCESS_KEY) 로 해놓고... 그래서 아까 생성한 configure 파일에 해당 내용을 추가했다.

왜 대문자로 된 KEY를 그냥 놔두었느냐

env_provider.go 에보면 대문자로 된 KEY를 사용한다..

어쨌거나 다시 go run을 해 보면

err Status: 401 Unauthorized, Body: {"error":{"errorCode":"200","message":"Authentication Failed","details":"This account is not allowed."}}
2021/01/19 23:37:01 Status: 401 Unauthorized, Body: {"error":{"errorCode":"200","message":"Authentication Failed","details":"This account is not allowed."}}

허용되지 않았다(This account is not allowed)로 나온다.

configure key의 값을 aaa, bbb 로 해놔서 그렇다

네이버 클라우드 플랫폼에 로그인하여 계정관리에서 해당 Key정보를 찾아 입력하면 (없으면 생성해야 함)

에러없이 호출되지만... 결과는 알 수 없는 듯 했는데..
sample code 를 보면

req := server.CreateServerInstancesRequest

server Instance를 생성하는 것이다.... console에 가봤더니.... 서버가 여러개 생성되어 있다. ㅜ.ㅜ
급하게 종료 시킨 뒤. 반납한다. 헐... 그와중에 부팅중이 또 있네..

이것으로 호출이 되는것은 확인 함.
모두 반납한다.

환경설정이 정상적으로 되었으면 (configure 파일에 키정보 정상적인지 확인)
Region 목록을 조회하는것으로 변경해본다.
TestCloud.go
(참고 : git clone으로 받은 ncloud-sdk-go-v2 폴더에 생성했다)

package main

import (
    "log"
    "github.com/NaverCloudPlatform/ncloud-sdk-go-v2/ncloud"
   "github.com/NaverCloudPlatform/ncloud-sdk-go-v2/services/server"
    "fmt"
)

func main() {

    apiKeys := ncloud.Keys()
    fmt.Println("apiKeys", apiKeys)// log1
    client := server.NewAPIClient(server.NewConfiguration(apiKeys))
    fmt.Println("client", client)// log2

    req := server.GetRegionListRequest{
        // parameter가 없으므로 빈 {}가 된다.
    }

    if r, err := client.V2Api.GetRegionList(&req); err != nil {
        fmt.Println("err", err)// log4
        log.Println(err)
    } else {
        fmt.Println("r", r)// log5
        rList := r.RegionList
        log.Println(ncloud.StringValue(rList[0].RegionNo))
        log.Println(ncloud.StringValue(rList[0].RegionCode))
        log.Println(ncloud.StringValue(rList[0].RegionName))

    }
}

 

 

728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1933)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (162)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :