ChatGPT 도전

2023. 2. 23. 00:48
728x90

작년 12월 중순 즈음 아는분이 chatGPT 이야기를 한 적이 있다.
당시에는 AI가 얼마나 똑똑하겠냐하며 흘려들었었는데 최근 돌풍이라

나도 도전~~~

우선 가입부터 해야한다.

https://chat.openai.com/chat 로 접속하면 아래와 같은 화면이 나온다.

영어로 나오니 파파고를 불렀다.

뭔가 이상하다...
Google 번역을 불렀다.

ChatGPT 상태에 대한 두 가지 진실과 거짓을 작성하십시오.
1. ChatGPT는 현재 높은 트래픽을 경험하고 있습니다.
2. 개발자는 모든 사용자를 수용하기 위해 열심히 노력하고 있습니다.
3. ChatGPT는 100% 정확도로 미래를 예측할 수 있습니다.

결론. 현재 용량이 가득찼으니 나중에 다시 시도하라는 뜻. ㅠㅠ

링크가 걸려있는 "Get noticed when we're back' 를 클릭하면
notice받을 email을 입력하라고 한다.

 

결국 다시 공지가 열릴때까지 기다려야 한다.
1차 시도 실패!!!!

728x90
728x90

엣씨디? ETCD 라는 key/value 형태의 database(?) 가 있다.

우선 설치되어있는 서버에서
export ETCDCTL_API=3

으로 버전을 지정한다음
etcdctl get --prefix / 를 하면 모든 keyvalue 가 나온다.
나의 경우 너무 많아서

etcdctl get --prefix / >> etcddata.txt 로 파일로 바꾸어서 확인했다.

추가 명령들

export ETCDCTL_API=3
etcdctl get / --prefix --keys-only
etcdctl get "/" --prefix --keys-only
ETCD_CTL=3 etcdctl get / --prefix --keys-only
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get / --prefix --keys-only
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get  --prefix --keys-only
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get --prefix --keys-only
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get --prefix --keys-only --sort
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get --prefix="" --keys-only --sort
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get --keys-only --sort
ETCD_CTL=3 etcdctl --endpoints=http://localhost:2379 get --keys-only

 

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

사이트나 어플개발할 때 메일 전송기능이 필요한데

SMTP 서버를 돌리지 않고 사용하는 방법이다.

MailTrap에 가입한 뒤에 로그인하여
Email Testing 아래에 Inboxes 를 클릭한 다음
inbox목록에서 My Inbox를 선택한다.

그 다음 SMTP Settings 에서
보내려는 방식(언어)를 선택한다. python, nodejs ... 등을 고르면 알맞은 코드가 나옴.
여기에서 user 와 pass 항목을 사용하거나 나타나는 코드 그대로 쓰거나 하면 됨

 

telnet이라고 했을 때
해당 코드를 command 창에 입력하면 됨.
정상적으로 전송을 하면

mailtrap의 inboxes 에 해당 메일이 들어온다.
보낸 내용이 맞는지 확인한다.

실제 메일로 전송은 돈을 내야 한다네
상단 우측에 mail 주소 입력항목이 있어서 입력 후 "send"를 누르면 날아가는데
free 계정은 안날아감.

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

AWS의 RDS로 postgresql을 선택하여 생성한 후에 접속을 하면 바로 안된다. ㅡㅡ;

외부접속이 막혀있을 수 있음.
-> security group에 들어가서 사용하는 포트(5432)가 인바운드에 열려있는지 확인

그냥 Db를 만들면 기본DB만 있음
connection에는 필수로 db명을 적어야 함.
따라서 최초 접속시에는 db명을 postgres 로 해야 함.
(아래 그림과 같이 db생성 전에는 구성에 DB 이름이 '-'임)

최초가 아니라 db를 생성했으면 해당 db명을 입력하면 됨.

728x90

GCP Mysql로 옮기기

2022. 12. 29. 16:19
728x90

1. DB서비스부터

 

mysql 선택

db설정

728x90
728x90

1. 현재 운영중인 mysql을 백업받는다.
xxx.sql 인경우도 있고, dump일 수도 있고

2. AWS 에서 Mysql 서비스를 생성한다.
생성 후 확인할 내용은
- 퍼블릭 액세스 가능 : 예 로 되어있어야 한다.
- 아니오로 되어있으면 같은 vpc 내에서만 접속되고 외부에서 접근 안됨.

 

그리고 security group에서 inboud에 포트(3306)이 열려있어야 한다.
열려있지 않으면 추가 필요

3. Mysql Workbench에서 connection을 추가한다.
 ( mysql 접속 명령이 가능하면 바로 접속해도 된다. )
- 엔드포인트가 접속주소(host)

3-1 접속이 되면 왼쪽메뉴에서 "MANAGEMENT > Data Import/Restore" 를 선택한다.
 - dump 인 경우 : Import from Dump Project Folder
 - sql 파일인 경우 Import Self-Contained File 을 선택하고
 Default Target Scheme 에 원하는 DB를 선택한다.(없으면 New버튼으로 생성한다)

"Start Import" 버튼으로 임포트 하면 끝~~~

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
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 :