728x90

한번 migration up으로 반영한 뒤에는 다시 반영할 수 없다.
수정을 하려면 down으로 반영 취소한 다음에 다시 up으로 반영해야하는데

권장하지는 않는다.
보통 create에 대한 down은 drop table이므로 data가 다 날아간다.

따라서 alter table을 하는 경우는 추가로 fizz파일을 생성하도록 한다.

1. Model 생성

명령어 : buffalo pop g model "모델명"
여기에서 모델명은 단수로 적는다.
실제 db에 생성되는 table명은 복수로 's'가 붙는다.
예) buffalo pop g model region
이러면 /models/region.go 가 생성되고
DB에는 regions 라는 table이 생성된다.
table에는 id, created_at, updated_at 세 칼럼이 기본으로 추가된다.

2. table 변경

명령어 : buffalo pop g fizz "작업구분_테이블명"
구분을 하기위한 이름이고 해당 이름기준으로 순번_이름_up.fizz 와 _down.fizz 파일이 생성된다.
예) 테이블명이 regions 이고 columng을 추가할 것임
buffalo pop g fizz update_regions
명령을 실행하면 20230101_update_regions_down.fizz 와 20230101_update_regions_down.fizz 두 개의 빈 파일이 생성된다.
각 파일을 수정한다

20230101_update_regions_down.fizz 에는
drop_column("regions", "test")

20230101_update_regions_up.fizz 에는
add_column("regions", "test", "string", {} )

저장 한 뒤에 적용
buffalo pop migrate up

테이블을 확인해보면 regions 테이블에 test라는 칼럼이 추가된 것이 확인된다.

변경사항은 다음 내용을 따른다.

테이블 삭제 drop_table("테이블명") drop_table("regions")
테이블명 변경 rename_table("테이블명", "바꿀 테이블 명") rename_table("regions", "new_regions")
칼럼 추가 add_column("테이블명", "칼럼명", "data타입", {}) add_column("regions", "desc", "int", {} )
칼럼 변경 change_column("테이블명", "칼럼명", "data타입", {}) change_column("regions", "desc", "string", {} )
칼럼 삭제 drop_column("테이블명", "칼럼명" ) drop_column("regions", "desc" )
인덱스 추가
(단일칼럼)
add_index("테이블명", "칼럼명", {} )
-> index명 : 테이블명_칼럼명_idx
add_index("regions", "abc", {} )
-> regions_abc_idx
인덱스 추가
(복수칼럼)
add_index("테이블명", ["칼럼1", "칼럼2"], {} ) add_index("regions", ["abc", "def"], {} )
unique 인덱스 add_index("테이블명", "칼럼명", {"unique":true} ) add_index("regions", "abc", {"unique" : true } )
인덱스 이름지정 add_index("테이블명", "칼럼명", {} ) -> 기본이름
add_index("테이블명", "칼럼명", { "name" : "인덱스이름"} ) -> 인덱스 이름으로 생성
add_index("regions", "abc", { "name" : "i_abc" } )
-> i_abc
(이름 지정 안했으면 : regions_abc_idx )
인덱스 이름 변경 rename_index("테이블명", "인덱스명", "바꿀인덱스명") rename_index("regions", "i_abc", "idx_abc")
인덱스 삭제 drop_index("테이블명", "인덱스명") drop_index("regions", "i_abc")
fk 추가 add_foreign_key("테이블명", "칼럼으로 쓸 이름", {"참조 테이블명" | ["참조칼럼명"]}, { "name" : fk이름" }) add_foreign_key("regions", "parent_id", { "csp" : "id"]}, "name" : "fk_regions_csp_id"} )
fk 삭제 drop_foreign_key("테이블명", "칼럼명", {"if_exists":true}) drop_foreign_key("regions", "fk_regions_csp_id", {"if_exists": true})

3. model 변경

model은 처음 생성할 때 빼고는 변경되지 않음 따라서 변경내용을 직접 변경해야함.

최초 생성시
type Region struct {
    ID         uuid.UUID      `json:"id" db:"id"`
    CreatedAt  time.Time      `json:"created_at" db:"created_at"`
    UpdatedAt  time.Time      `json:"updated_at" db:"updated_at"`
}
변경내용 반영
type Region struct {
    ID         uuid.UUID      `json:"id" db:"id"`
    ParentID uuid.UUID      `json:"parent_id" db:"parent_id"`
    CSP   *CSP `belongs_to:"csp"`
    CreatedAt  time.Time      `json:"created_at" db:"created_at"`
    UpdatedAt  time.Time      `json:"updated_at" db:"updated_at"`
}

 

참고1 : 최초 모델 생성 시 db에 반영은 되나 migration up 은 안되어 있는 상태임.
필요내용을 직접 수정 한 다음 migration up을 하면 1번은 반영이 됨.
참고2 : generate model로 여러 model을 생성부터 먼저하고 migration up을 하면 한번에 적용 됨.
migration up으로 한번 반영이 되면 down으로 내리거나 새로운 파일을 생성하여 적용해야 함.

 

결론
변경내용 기록을 위해서도 변경내용은 매번 buffalo pop g fizz "작업구분_테이블명" 으로 추가한다.
기존내역은 재반영 되지 않는다.

728x90
728x90

Jitsi 라는 무료 화상회의 프로젝트가 있다.

그냥 설치고 뭐고 그냥 화상회의 만들려고 할 때

https://meet.jit.si/ 로 접속하면 방을 만들수 있고
해당 주소로 접속하면 됨.

내가 회상회의 서버를 운영하려면 self-hosting-guide를 따라서 VM에 설치를 하면
내 주소로 접속해서 화상회의 만들고 사용하면 됨.

그래서 설치 해 봤다.
방법은 3가지.
1. Debian/Ubuntu server guide
2. Docker guide
3. Manual installation guide

1번으로 ubuntu server 에 설치함.
권장사양 
. RAM : 8GB. 소규모면 4G, 테스트용은 2G
. CPU : 기본은 4개의 전용코어
. DISK : 20GB의 표준하드디스크. 빠르면 빠를 수록 좋음

그래서 설치한 사양
Ubuntu 22.04
t2.micro
rootdisk size : 30G로 변경(공간 부족할까봐 늘림)

#0. 시작전 : port open
security group에서 아래 포트를 allow 해야 함.
해놓았으면 sudo ufw status verbose 에서 Status: inactive 여도 상관없음
아래 명령으로 추가하거나 security group 가서 추가(security group에 추가 함)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 22/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable


sudo ufw status verbose 로 포트정보 확인

----
#0. 설정 정보
생성된 VM의 IP : 52.79.228.172
도메인은 임시로 : mydomain.abc.org 로 지정( 실제 도메인이 있으면 실제도메인을 넣으면 됨)

1. lsb_release -a
  : ubuntu 버전 확인
2 sudo apt-get update -y
3 sudo apt-get install gnupg2 -y
4 sudo apt install nginx -y
  : 웹서버 설치

5 sudo apt-get install openjdk-11-jdk -y
  : java 설치

6 sudo -- sh -c "echo 52.79.228.172 mylocaldomain.abc.org >> /etc/hosts"; sudo hostnamectl set-hostname mydomain.abc.org; hostname -f
  hosts 파일에 ip및 도메인정보 추가. hostname -f 로 설정정보 확인

7 ping "$(hostname)"
  통신이 되는지 확인. 위 명령 그대로 치면 됨. hostname을 안바꿔줘도 됨.
8 sudo apt install apt-transport-https
9 sudo apt-add-repository universe
   뭔가 물어보는데 그냥 엔터 ㅎ
    . 엔터
10 sudo apt update
11 echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
12 wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
13 sudo apt install lua5.2
14 curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
15 echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null
16 sudo apt update
17 sudo apt install jitsi-meet -y
  → domain 입력에서 도메인 대신 ip입력해도 됨.(aws 임시도메인은 안됨)
  .52.79.228.172 입력
  .Letscer 선택
  .메일주소 입력
  .telephony 는 No 선택-- 여기까지 설치완료

브라우저에서 ip로 접속 52.79.228.172 해 보면 경고화면이 나타남.
세팅할 때 도메인이 있으면 인증서 설정에 문제가 없으나
IP로 대신했기 때문에인증서에 문제가 있다고 하는건지
아무튼 "고급"을 눌러 사이트로 이동하면

방을 생성 할 것인지 물어 봄. ㅎㅎ
2명이서 해보니 됨.
요구사항에 있듯이 Test용으로 만든것이라 동작하는데 의의를 둠.

다음 사이트를 참고
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart

728x90
728x90

보통은 go get 으로 다운로드 되는데

했음에도 불구하고 Cannot Resolve file 이 나올 때는( aws-sdk-go 를 왜 못 읽느냐고...)

File > Repair IDE 를 시킨다.

그러면 오른쪽 아래에 뭔가 뜨는데 첫번 째 스텝에서 'Rescan Project Indexes' 를 클릭한다.

그다음 step 2 에서 'Reopen Project' 를 누른다.

그래도 똑같이 나오면 세번째 step으로 'Drop Shared Indexes'를 선택한다.

그래도 똑같이 나오면 'Reindex Project'를 선택한다.

ReIndexing 까지 했는데도 안나온다면
'Actions' 에서 'Invalidate Caches and Restart'를 선택한다.

그러면 삭제할 항목들이 나오는데

모두 체크하고 'Invalidate and Restart' 를 누른다.


한방에 Invalidate Caches and Restart 로 갈 수도 있다.
File > Invalidate Cashes ... 을 누르면 위와 같은 메뉴 나옴.

728x90
728x90

wsl 에 ubuntu를 사용하고 있고

vscode와 golang 에서 github 의 프로젝트를 clone 받았다.

그런데...
쉘파일 실행을 하니 $'\r': command not found  라는 오류와 함께 실행이 되지 않는다.

원인은 window에서 작업한 것을 linux에서 작업할 때 개행문자오류라고 한다.

확인하는 방법은 vi -b 파일명 해서 열어보면 끝에 ^M 이 붙어있다.

파일이 1개면
sed -i -e 's/\r$//' [대상 파일]

여러개면
sed -i -e 's/\r$//' *.*

하위 폴더는
sed -i -e 's/\r$//' ./*.*

더 아래는
sed -i -e 's/\r$//' ./*/*/*.*

계속 내려간다. ㅎㅎ
이후로는 실행이 잘 되네

 

-----
우선 위에서 변경해서 문제가 없는데
근본적인 문제는 git에 있는 것 같다.

git config --list

결과에서
core.autocrlf=true 로 되어 있으면

git config --global core.autocrlf false

위 명령으로 false로 바꿔준다.

728x90
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

환경구성중에 마지막 단계인
docker push에서 401 에러가 난다... 해결이 되지 않네.. 쩝.

 

작업단계 1. aws에 iam 계정 생성
권한은 S3FullAcess 로 추가하고
access key id와 secret access key 를 복사 해 둔다.

작업단계 2. aws에 s3 bucket을 생성한다
 추후 물어보기 때문에 region정보를 기록해 둔다 : ap-northeast-2    (아시아 태평양-서울)

작업단계 3. docker 계정정보 확인
id, access token 확인
(docker홈페이지  Account Settings > Security 에서 access token 생성)

작업단계 4. github 에 repository 생성 및 설정
 . Settings > secrets > actions에 사용할 값들 추가

작업단계 5. github repository에 파일 생성
 . main.go, Dockerfile 등

작업단계 6. actions 에 yaml 파일 생성
 . 작업단계 4에서 생성한 KEY를 이용하여 yaml파일 생성
 . commit 하면 자동으로 action이 실행 됨.
 . build fail이 401이 계속남.... 쩝.

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)
Cloud (26)
Go lang (30)
Front-end (27)
Device (3)
MAC (1)
Spring framework (49)
Java (13)
English (39)
SOA (0)
Idioms (7)
모르는거 (5)
WriteEnglish (10)
Android (56)
속지말자 (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 :