728x90

보통 action 추가, resource 추가를 하면
templates 아래에 해당 폴더가 추가되는데

그냥 templates 아래에 components 라는 폴더를 만들었다.

그리고는 loading 표시는 하는 _loadingcontainer.html 을 추가하고
buffalo dev를 하자

buffalo: 2022/09/28 11:26:25 === Error! ===
buffalo: 2022/09/28 11:26:25 === exit status 1
templates/embed.go:10:12: pattern *: cannot embed directory components: contains no embeddable files

혹시 몰라서 component 아래에 list.plush.html 을 추가하니 오류가 사라진다.
partial로 쓰려고 _를 붙여 만들었는데....
뭔지는 모르겠지만 어쨌거나 해당 파일 추가로 오류는 해결

728x90
728x90

golang framework 중 하나인 buffalo에서

생성은 액션명만 주면 되는데
계층구조로 만들려면 이름을 계층을 줘서 만든다

1. action

추가는
buffalo g a aaa list

이렇게 하면 aaa는
app.go 에 app.GET("/aaa/list", AppList) 가 추가되고
aaa.go 파일, aaa_test.go 가 생성된다.
templates에 aaa 폴더 아래에 list.plush.html 이 추가된다.

buffalo g a bbb/bcd list
이렇게 하면 bcd 는
app.go 에 app.Get("bbb_bcd/list", BbbBcdList) 가 추가되고
actions/bbb 폴더 아래에 bcd.go, bcd_test.go 가 생성된다
templates/bbb/bcd 아래에 list.plush.html 가 추가된다.

삭제는
buffalo destroy action aaa 를 하면 생성됐던 파일 및 app.go의 설정이 지워진다.
그러나, 계층구조로 만든 경우에는
bbb/bcd 를 bbb_bcd 로 변환하기 때문에 파일을 찾지 못해 삭제가 되지 않는다.

삭제는 수동으로

ps : action 생성시 기본은 GET 인데 Post 로 만들 때에는 --method POST 를 추가하면 된다
ex) buffalo g a aaa list create --method POST 를 하면
app.go에 list는 get으로 create는 post로 설정된다.

 

2. resource

action은 만들고 싶은것들을 하나하나 설정할 때 사용하고
resource는 list,show,create,update,destroy를 한번에 생성하여 관리할 때 사용한다.
app.go 에서는 app.Resource("이름", xxxResource{}) 로 설정된다.
장점은 구조만 맞으면 작업량이 줄수 있지만 추가 설정을 하려면
조금 복잡하다.

추가는
buffalo generate resource "리소스이름"  "생성할 컬럼명"
ex) buffalo generate resource efg title desc 를 하면
efg 그룹에 crud가 생성되고 efg table에 column으로 id, title, desc 가 정의된다.

리소스는 그룹으로 만들 수 없다.
eee/efg 로 만들려고 해도 eee_efg로 변경하여 생성된다.
table의 경우 마지막 언더바(_) 이후에 s를 붙여서 생성한다.
eee/efg -> eee_efg -> efg -> efgs 로 table명이 정해진다.
create table efgs

삭제는
애초에 변환해여 생성하므로 삭제도 가능하다
buffalo destroy resource efg
buffalo destroy resource eee/efg   -> 생성할 때 eee/efg로 생성해도 eee_efg로 생성

리소스는 이름에 주의를 하면 된다. 언더바 사용하지 않는것이 좋고
즉 버팔로 가 정의한 구조에 딱맞으면 resource를 쓰고 안맞으면 actions로 일일이 설정

계층구조로 만들면 삭제는 수동으로 해야한다는 것.

 

728x90
728x90

bufallo 에서 action 생성명령은 g(generate) a(action) 이다.
buffalo g a 액션명
buffalo g action 액션명
buffalo g actions 액션명

하지만 그냥 액션명을 하면
actions 아래에 바로 생긴다.
로직이 많아지면 복잡해지므로 package를 추가하는 것이 좋다
buffalo g a te/tt show index create 를 하면
actions/te/ttt.go
actions/te/ttt_test.go 파일이 생성된다.

뒤에 show, index, create는 routing 과 template 파일을 생성하기 위한 것임.

추가한 action을 삭제하려면 d(destroy) 를 사용한다
buffalo d action 액션명

방금 추가한 te/ttt를 삭제
buffalo d action te/ttt
Want to remove actions? (y/N)y
INFO[0003] - Deleted actions/te_ttt.go                  
INFO[0003] - Deleted actions/te_ttt_test.go
INFO[0003] - Deleted References for te_ttt in actions/app.go

actions/app.go 에 가보면 route에 추가되어있던 te/ttt 관련사항이 삭제된 것을 확인할 수 있다.

728x90
728x90

golang 을 이용한 framework 로 buffalo 가 있다.

buffalo create <프로젝트명> 을 하면 프로젝트가 생성되는데
buffalo dev 를 하면 서버가 실행되어서 기본설정인 경우 localhost:3000으로 접속하면 똬란~ 하고 나와야 하는데

Error: you need to be inside your buffalo project path to run this command

저게 뭐냐...ㅡㅡ;

프로젝트 생성한 뒤에 생성한 프로젝트에서 실행시켜야 하는데 바로 buffalo dev를 해서 그렇다 ㅋㅋㅋ

cd <프로젝트명> 을 해서 생성한 프로젝트 안으로 들어가서 하면 됨.

ㅡㅡ.

728x90
728x90

분명히 터미널에서 git version으로 확인했을 때 git이 설치되어 있는 것이 확인되는데

"Git이 설치되지 않았습니다.
 Git 프로세스가 1 코드와 함께 종료되었습니다." 하고 다운로드 및 설치가 나오는데

다운로드 설치누르면 윈도우에 설치하려고 한다. ㅡㅡ;

 

설정 법은 다음과 같다.
터밀널에서 git 설치 경로를 확인한다 : which git
/usr/bin/git

Settings  > Version Control > Git 에서 Git 실행파일 경로를 설정하게 하면 된다.
(한글일때 : 설정 > 버전관리 > Git)

wsl 안의 경로이므로 \\wsl 로 찾아가야 한다.
\\wsl$\Ubuntu-20.04\usr\bin\git

(폴더에서 경로 찾기)


경로설정을 하고 "테스트" 버튼으로 적용을 테스트 한다.

728x90
728x90

Goorm 에서 이미지 팩으로 샘플프로젝트를 제공한다.
react랑 spring 환경구성이 되어있어 바로 시작하기 좋은데

해당 컨테이너를 생성해서 start.sh 를 실행시켜봤는데
spring 프로젝트는 run이 되는데 react는 안된다.

생성된 spring 프로젝트라도 접속해보려고 하면 접속이 되지 않는다

왜냐? 설정이 쪼~~금 더 필요하다.

프로젝트에 보면 readme.md 파일이 있는데 여기에 몇가지 추가설정이 필요하다고 설명이 친절하게 되어있다
그러나 우리는 읽어보지 않고 안될 때 검색을 통해 해결하지 ㅋㅋㅋ

우선 react project로 가서 추가모듈이 있는지 설정확인을 해야한다.
cd front
npm install

그 다음 주요한 거!!! port forwarding 작업이다. 이거 안하면 외부에서 접속 안됨 ㅎㅎ
상단메뉴의 [프로젝트] - [실행url 과 포트] 를 클릭
현재 80만 잡혀있으면 스프링(8080), 리액트(3000) 포트를 추가해야한다.
추가할 때 도메인 이름을 입력하면 됨.
예) front-react , 3000 을 주면 :  https://front-react.run.goorm.io 과  같이 접속할 수 있게 된다.

마지막으로 이 세팅을 빠뜨리면 제대로 동작하지 않을 수 있다.
cd front 에 가면 .env.developement 파일이 있다.
여기에 위에서 접속할 주소로 변경 해야 한다.
REACT_APP_SERVER_URI=

다 끝났으면 접속해 보자

우선 리액트는 3000번이므로
portforwarding에 설정한 도메인으로 입력하면 "currentTime= 어쩌구"하는 결과가 나온다.

그 다음 스프링 8080번이므로 마찬가지로 입력하보면
조금 당황스럽다.

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Jul 31 01:45:28 UTC 2022
There was an unexpected error (type=Not Found, status=404).


포트를 입력해야하나? 했는데 필요없다.
사실 스프링 예제는 /hello 만 설정되어있기 때문이다.

 


READ.ME를 잘 읽어보자 ㅎㅎ

 

728x90
728x90

https://www.bezkoder.com/react-jwt-auth/

여러 예제가 있는 좋은 곳이다.

그런데.... 똑같이해도 실행이 되지 않는다.

ConnectionError [SequelizeConnectionError] : connect ETIMEDOUT

내용이야 뭐 연결시간 초과인데

원인은 해당 소스가 조금 오래되어서 약간의 변경이 필요하다.

Sequelize 설정에서

operatorsAliases : true 또는 false 로 되어있는것이 1 또는 0으로 바뀌어야 한다.
operatorsAliases :1

그리고 mysql 의 기본포트인 3306을 사용하면 문제가 없는데
다른 포트를 사용하는 경우에는 port정보를 넣어줘야 한다.
(근데 다들 포트를 변경안하는지 다른 예제에도 port 설정이 안보인다 ㅠ.ㅠ)
아래와 같이 포트정보를 추가하면 됨.

const config = require("../config/db.config.js");

const Sequelize = require("sequelize");
const sequelize = new Sequelize(
  config.DB,
  config.USER,
  config.PASSWORD,
  {
    host: config.HOST,
port: config.PORT,
    dialect: config.dialect,
    operatorsAliases: 1,

    pool: {
      max: config.pool.max,
      min: config.pool.min,
      acquire: config.pool.acquire,
      idle: config.pool.idle
    }
  }
);

 

정상적으로 설정이 되고 DB 접속에도 문제가 없으면

init에 의해 Create Table users, user_roles  및 select 쿼리가 로그로 찍힘.
user table 생성, role table 생성, role_user table 생성
role.id, user.id 를 참조하는 fk가 role_user table에 추가

 

ps : backend 를 spring으로 추가로 테스트하면
nodejs실행시키면서 자동으로 table 생성이 되었기 때문에
run하면 제약조건 생성 등 오류가 나지만
서버는 정상 가동 됨.
(table 모두 drop하고 가동 시키면 정상으로 될 것임)

node로 생성했을 때 table 설정에서 몇가지 빠지는게 있다.
encoding이 latin으로 되고
id 가 int 형인데 auto inc 가 꺼진채로 생성된다.
그리고 날짜도 default=now()로 넣어줘야한다.
user_role table에 제약조건이 걸려서 role table의 id를 auto inc 하려고 했더니 안되네...
user_role table 삭제 -> role table에 auto inc 추가 -> user_role table 추가로 재설정 함.

728x90

Docker 실행 오류

2022. 7. 26. 15:14
728x90

첫번째.

docker ps 를 했더니 "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?" 라고 나옴.

sudo systemctl status docker 를 했더니
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

sudo systemctl enable docker 를 했더니
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker

해결방법은 바로 윗줄에 있다.

sudo /lib/systemd/systemd-sysv-install enable docker

sudo /etc/init.d/docker start

( docker의 실행경로가 다름 )
이번에는 error가 없어서  test로
sudo docker run hello-world 했더니 잘 받아오네 ㅎ

 

 

 

728x90
728x90

구름 ide로 컨테이너 생성할 때 추가 옵션으로 mysql을 설치할 수 있다.

완전 편한데

테미널 들어가서 바로 mysql -u 로 접속하면

can't connect to local mysql server through socket 라고 에러가 나는데

mysql 설치가 안되어있나 하고

sudo mysql install mysql-server 했더니 최신버전이 이미 깔려있다고 나온다.

해결방법은 간단.

서비스가 아직 가동안된것이다
service mysql start

끝.

728x90
728x90

GCP Console에서

워크로드로 이동(검색) 또는  Kubernetes Engine > Workloads

최초인 경우 Deploy버튼 클릭
이미 Workload가 존재하면 + 배포 클릭

 

Step1 : Container
 . Existing container image를 선택 하면 Image path* 로 배포할 이미지를 선택(SELECT) 하라고 함.
   SELECT를 누르면 우측에 Container Registry Tab과 Artifact Registry Tab 에서 기존에 push한 이미지를 선택


  (참고) Artifact Registry가 비활성 되어 있으면 다음과 같이 나온다

  . 하단에 continue 버튼을 눌러 다음단계를 진행한다.

Step2 : Configuration
  - Application name : hellobro
  - Namespace : default
  . Labels
      Key: app, value: hellobro
   . Configuration YAML 에 VIEW YAML 버튼을 누르면 정의된 내용의  yaml 파일을 볼 수 있다.

  . Cluster
      Zone : aisia-south1-a (싱가폴), asia-northeast-2-a( 서울)
       (Zone의 끝자리는 a,b,c 무엇이듯 상관없음. 해당 region에 여러개의 zone이 있는것임)

  . Deploy 버튼을 누르면 K8S Cluster에 배포 시작
      K8s cluster생성, 배포 생성, Pod에 배포

Step3 : 외부에 공개. 포트를 매핑하는 서비스를 추가해야한다.
  . 배포가 정상적으로 되면 Kubernetes Engine > Clusters 에서도 확인가능하다.
  . Kubernetes Engine > Workloads에 배포한 app을 클릭하여 상세화면으로 이동한다.
  . 상단메뉴의 Actions > Expose를 클릭 한다( 해당메뉴는 화면이 좁을 때 세로로 점3개에 숨어있을 수 있음)
     = To let othere access your deployment, expose it to create service 라고 표시된 곳이 "EXPOSE" 버튼을 눌러도 됨.


  . Port mapping
     . port1 : from port는 80으로 설정되어 있다. sample application에서는 8080 포트를 쓰므로 Target port를 8080 으로 설정
     . Service type : Load balancer
     . Service name : hellobro-service
   . EXPOSE 버튼 클릭

  . 생성이 완료되면 좌측메뉴에 Services * Ingress로 이동하고 External endpoints에 링크가 있다. 클릭해보면 hello화면이 나온다.
    (Expose 이전에는 브라우저에서 접속이 안됐음)


Step4: 삭제
   . 서비스 삭제 : Services & Ingress 에서 해당 서비스 선택 후 "DELETE"버튼 클릭
   . 클러스터 삭제 : Clusters 에서 해당 클러스터 삭제
   . 컨테이너 이미지 삭제 :

 

참조 : Deploying a containerized web application
https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app

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

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (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 :