기본 콘텐츠로 건너뛰기

라벨이 ++인 게시물 표시

golang .protobuf go_package 오류 나는 문제.

1.golang용 protocol buffer 관련 모듈은 다운로드 받았음 go get -d -u google.golang.org/protobuf go install github.com/golang/protobuf/protoc-gen-go 2. pitaya 샘플 .proto 파일 생성을 시도 했으나, 아래 오류가 발생하면서 빌드 실패함 D:\pitaya>protoc --proto_path=examples\demo\worker\protos --go_out=plugins=grpc:. examples\demo\worker\protos\*.proto protoc-gen-go: unable to determine Go import path for "arg.proto" Please specify either:         • a "go_package" option in the .proto source file, or         • a "M" argument on the command line. See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information. --go_out: protoc-gen-go: Plugin failed with status code 1. D:\pitaya> stackoverflow 등 참고해도 비슷하지만 다른 내용들 뿐. .proto 파일내에 option go_package = "../protos_gen"; 내용 추가하여 빌드하니 잘됨. 3.기존 소스 -------------------------------- syntax = "proto3"; package protos; message Arg {   string msg = 1; } 4.신규 소스 -------------------------------- syntax ...

Concurrency in Go 책 읽고 대략 요약

원본은 https://laced-river-472.notion.site/Concurrency-in-Go-7f97812aee104adc8cc6d60591f01316 에 요약 해놓음. 2024년 3월 27일 ~ 2024년 3월 29일 Concurrency in go 책 검토 https://github.com/SK-Jin/concurrency-in-go-src 1장 동시성 소개 동시성이 어려운 이유 2장 코드 모델링: 순차적 프로세스간의 통신(CSP) 동시성과 병렬성의 차이 동시성을 지원하는 언어의 장점 Go의 동시성의 철학 3장 동시성 구성요소 goroutine Sync Package Channels select-statement defer-statment 4장 동시성 패턴 제한(Confinement) Ad-hoc 내부적인 규칙, 암묵적인 규칙 등 시간적인 문제로 깨트려지는 경우가 있을 수 있음. lexical 도구에서 문제 상황에 대해 통보, 이를 개선 하는 형태로 접근 동기화를 사용할 수 있다면, 제한을 추구해야 함. 성능을 향상시키고, 개발자의 인지 부하를 줄이기 위함 동기화에는 비용이 들며, 이를 피할 수 있으면, 임계 염역이 없기 때문에 동기화 비용을 지불할 필요가 없음. 동기화로 인해 발생 가능한 모든 문제도 막을 수 있음 for-select 루프 채널에서 반복 변수 보내기 멈추기를 기다리면서 무한히 대기 고루틴 누수 방지 고루틴 작지만 리소스를 필요로 함. 가비지 콜렉터에 의해 수집 되지 않음. -> 원인은 제각각 이겠지만, 여전히 활성화 되어 있을 것이므로 고루틴 종료 조건 작업 완료 복구할 수 없는 에러로 인해 더 이상 작업을 계속할 수 없을 때 작업을 중단하라는 요청을 받았을 떄 -> 네트워크 효과(연관된 고루틴 존제)가 있으므로 제일 중요 접근 1 Cancel chan 생성 하여 기존 for~r...

golang 소스에서 ClassDiagram UML 파일 생성

1. 전체적인 진행 목표는 아래와 같다. golang source 분석  -> .puml 파일 생성  -> 파일 내용을 plantuml.com (또는 local plautuml 서버) 에서 이미지 확인 -> 분석용 또는 문서화 용으로 사용. 2. 먼저 plautuml 웹 서비스 환경을 준비한다. plantuml 은 다양한 Uml 타입을 지원하는데, 텍스트를 입력하면 해당 내용을 UML 이미지로 생성해준다. 2.1. 기존 platuml 웹서비스 주소 접속 아래 도커 설치는 필요하지 않음. https://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 2.2. 또는 로컬에 docker 설치하여 http://localhost:8080/ 접속하기 위한 방법 은 다음 방법 참고 2.2.1. https://plantuml.com/ko/starting 에 가면 docker 에 설치하는 방법 있슴. 2.2.2 .도커가 이미 설치된 상태에서 콘솔창에서 다음을 입력함 docker run -d -p 8080:8080 plantuml/plantuml-server:jetty 3.  golang 용 폴더 생성 (참고링크: https://github.com/jfeliu007/goplantuml ) go mod init  go get github.com\jfeliu007\goplantuml\parser go install github.com\jfeliu007\goplantuml\cmd\goplantuml@latest goplantuml folder > folder.puml  4. 생성된 .puml 을 편집기에서 해당 내용을 읽어 plantuml.com 에 접속하여 편집기 화면에 붙여 넣기를 수행하면 우측 또는 하단에 해당 내용을 이용하여 Uml(여기서는 ClassDiagram) 이미지가 생성 됨. 5. 아래 링크는 java 파일을 이용하여 .puml을 png 형...

netjs sample 불완전한 상태? 어디에서 다운로드 받을 수 있나?

1.회사에서 소스 분석할 일이 생겨서 확인중인데, nestjs 를 사용함. 2.nestjs 구조를 알아야 할 것만 같아서 가이드 를 찾아다니며 소스를 입력해서 돌아다니고 있었음. 3.nestjs sample 소스가 불 완전한 상태로 돌아다님. 전체 샘플 소스 없이 샘플 설명하는 경우가 있음. 이로인해 샘플 입력하고 동작 확인 불가함. 특히, 아래 소스가 없는 경우가 많음. create-cat.dto.ts, update-cat.dto.ts 4.무엇이든 다 있는 git hub 에 이것과 관련한 소스가 올라와 있음. 참고하시길... https://github.com/jmcdo29/testing-nestjs - 전체 소스 https://github.com/jmcdo29/testing-nestjs/tree/main/apps/http-sample - 이게 cats controller 를 인용한 소스 샘플

[minikube] kubunetics 를 클라우드가 아닌 local 로 돌려보기 위한 도구

https://minikube.sigs.k8s.io/docs/start/ 조건.윈도우 docker desktop 최신 버전이 설치 되어 있어야 함. 윈도우 PowerShell 에서 아래 동작으로 설치 winget install minikube 윈도우 cmd 쉘에서 다음 수행 C:\Program Files\Kubernetes\Minikube> minikube start 이후 docker에서 콘테이너 minikube 실행되고 있는 것을 확인할 수 있음. 그러나, kubenetic 내 image, container 는 별도로 동작함.  아래 명령으로 설치된 container 확인 가능 kubectl get services

[golang] getFunName

 import ( "fmt" "log" "runtime" ) // Debug prints a debug information to the log with file and line. func DebugFunInfo(format string, a ...interface{}) { funName := "" pc, file, line, ok := runtime.Caller(1) info := fmt.Sprintf(format, a...) // https://stackoverflow.com/questions/35212985/is-it-possible-get-information-about-caller-function-in-golang details := runtime.FuncForPC(pc) if ok && details != nil { funName = details.Name() //fmt.Printf("called from %s\n", details.Name()) } log.Println("debug", funName, "file:", file, "(", line, ") ", info) } func main() { DebugFunInfo ("start") }

[golang] gameframework nano ChatServer

 golang  nano 채팅서버 + WebClient https://github.com/lonng/nano/tree/master/examples/cluster start cluster master start cluster chat --listen "127.0.0.1:34580" start cluster gate --listen "127.0.0.1:34570" --gate-address "127.0.0.1:34590" rem start explorer microsoft-edge:http://127.0.0.1:12345/web/

[golang/websocket] websocket sample

0.소스 올린 이유. 샘플이라고 올라와 있지만, 실제로는  접속 실패 오류가 떠서 한참 구글링 했습니다. server1.go 실행하고 client1.go 로 동작 확인하고, 웹 동작은 크롬 브라우저에서 websocket_client1.html 동작 확인 했습니다. 아래는 WebSocket 동작 샘플 소스 이며, 아래 링크에 있는 샘플들을 참고 했습니다. https://github.com/gorilla/websocket https://github.com/gorilla/websocket/tree/main/examples/chat https://stackoverflow.com/questions/4361173/http-headers-in-websockets-client-api https://www.golinuxcloud.com/golang-websocket/ https://www.tutorialspoint.com/webrtc/webrtc_rtcpeerconnection_apis.htm server1.go package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) // var upgrader = websocket.Upgrader{} var upgrader = websocket.Upgrader{ ReadBufferSize:  1024, WriteBufferSize: 1024,          // 아래 CheckOrigin 항목이 없으면, 크롬에서 클라이언트 올렸을때 접속 안됨. CheckOrigin: func(r *http.Request) bool {         return true     }, } func main() { http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Reques...

[Docker] Docker 사용법

 https://sddev.tistory.com/124 위 링크 내용을 가져와서 내용 습득을 위해 다시 한번 정리한 것입니다. Docker 사용법  # Docker 개요 개발 환경 구성에 대한 문서를 계속 업데이트한다면 이런 문제가 최소화되겠지만,  상상하는 것만으로도 진이 빠지는 일인 건 분명 # Docker 적용하기 1. local에서 프로젝트 폴더를 생성하고자 하는 경로에서, git clone해오거나, usb에서 프로젝트 폴더를 복사 2. 프로젝트 루트 디렉토리에서 도커 이미지 빌드 및 생성 [cmd] cd 프로젝트폴더경로  [cmd] docker build -t (도커_이미지_이름) (ex) docker build -t sdweb-docker-img // sdweb-docker-img라는 도커 이미지가 생성됨 // 아래의 명령어로 생성된 docker 조회 가능 [cmd] docker image ls | grep (검색어) (ex) docker image ls | grep sdweb-docker-img 3. 프로젝트 앱 컨테이너 실행 (2번의 이미지를 컨테이너로 실행) [cmd] docker run -it --rm -p 8000:8000 sdweb-docker-img ./실행파일..? // 데이터 베이스가 연결되어 있지 않기 때문에 에러남 4. 데이터베이스 컨테이너 실행 [cmd] docker run -it --rm (db도커이미지명) (ex) docker run -it --rm protgres // 기본적으로 도커 컨테이너들은 각각 격리된 환경에서 실행 // 다시 말해, 별도의 옵션을 지정하지 않으면 다른 컨테이너의 존재를 알 수 없음. 각각 실행만 시키면 무의미 5. 데이터베이스 컨테이너 연결 - 데이터베이스 컨테이너를 실행하면서 컨테이너 이름을 붙이고(db라고 하죠), - 앱 컨테이너를 실행할 때 db 컨테이너를 연결해 줍니다. docker run --rm(-it 노테이션 삭제함으로써 데몬 형태로 컨테이너 실행)\ ...

[Docker ] Docker 실습

 https://sddev.tistory.com/218 위 링크 내용을 가져와서 내용 습득을 위해 다시 한번 정리한 것입니다. [Docker ] Docker 실습 Docker 설치 공식 사이트 주소 : https://www.docker.com/get-started Desktop 버전 설치, Community로도 왠만한 기능은 사용 가능   # Dockerfile 작성하기 @ Dockerfile 만드는 순서 1.베이스 이미지를 명시하기(파일 스냅샷에 해당) 2.추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어를 명시 3.컨테이너 시작시 실행 될 명령어를 명시 - FROM     생성할 이미지의 베이스가 될 이미지를 뜻합니다.      FROM 명령어는 Dockerfile을 작성할 때 반드시 한 번 이상 입력해야 합니다. - MAINTAINER     이미지를 생성한 개발자 정보를 나타냅니다. - RUN     이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다.     RUN 명령어에 ["/bin/bash", "echo hello" >> test.html"] 같이 입력하면      /bin/bash 셸을 이용해 'echo hello >> test2.html'을 실행한다는 뜻입니다. - ADD     파일을 이미지에 추가합니다.     Dockerfile이 위치한 디렉터리에서 파일을 가져옵니다.     ADD <DockerFile 경로 기준 파일 상대경로> <컨테이너 내 폴더 경로>     ex) ADD test.html /var/www/html 이라면 Dockerfile과 같은 디렉토리에 있는 test.html 파일을          이미지 내부의 /va...

[Docker] Docker 명령어 핵심만 이해하기

 https://sddev.tistory.com/126 위 링크 내용을 가져와서 내용 습득을 위해 다시 한번 정리한 것입니다. Docker 명령어 핵심만 이해하기 추가 Windows docker desktop 에서 해당 콘테이너 실행하고 Container 탭에서 이름을 선택하면  Logs, Inspect, Terminal, Files, Stats 등 하부 항목 등이 추가로 확인 가능하니 참고. docker images docker 내에 이미지 목록 조회 docker ps -a docker 내에 콘테이너 목록 조회 # 개요 기본적인 docker에 대한 동작 방식은 알고 있는 상태에서 명령어만 정리하겠다. 1. docker hub에서 이미지를 받을때는 pull 명령을 사용한다.  예를 들어 wildfly의 최신버전(latest)를 받을 경우 다음과 같이 한다. docker pull jboss/wildfly:latest docker pull <이미지명> docker 내에 docker-hub로부터 이미지를 다운로드 하라.  2. 내가 받은 모든 이미지들(예전에 ISO파일과 비슷하다고 보면 될 듯)의 목록을 볼 경우 다음과 같이 한다 docker images docker 내에 지금까지 설치된 모든 이미지를 조회하라. 3. 이미지 세부 정보를 확인할 때는 inspect 명령어를 사용한다. docker inspect jboss/wildfly:latest docker inspect <이미지명> 해당 이미지의 상세 정보를 조회하라.(os, cpu 등등이 표시된다.) 세부 정보는 json 문자열 형태로 보여지며 주요 정보로는 이미지 ID, 생성일, Docker 버전, 이미지 생성자, CPU 등을  제공한다 정보가 json 문자열 형태로 길게 나오기때문에 만약 특정 정보를 보고자 할때는 다음과 같이 format 옵션을  주어 보고자 하는 항목을 지정하면 그 항목에 대해서만 볼 수 있다. 예를 들어 docke...

[Docker] Docker 이론

원본링크: https://sddev.tistory.com/118 위 링크 내용을 가져와서 내용 습득을 위해 다시 한번 정리한 것입니다. [Docker] Docker 이론 # Docker란? Linux Container 기반의 가상화 플랫폼이다. Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.  Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다.  Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. # Docker의 작동 방식 Docker는 코드를 실행하는 표준 방식을 제공합니다.  Docker는 컨테이너를 위한 운영 체제입니다.  가상 머신[VM]이 서버 하드웨어를 가상화하는 방식과 비슷하게(직접 관리해야 하는 필요성 제거)  컨테이너[Container]는 서버 운영 체제를 가상화합니다. Docker는 각 서버에 설치되며 컨테이너를 구축, 시작 또는 중단하는 데 사용할 수 있는 간단한 명령을 제공합니다. # Docker를 사용하는 이유 Docker를 사용하지 않고, 개별 local에 Redis, Mysql과 같은 프로그램을 설치하려면,  환경별로 설치 중에 다양한 에러가 발생한다. Docker를 설치하면, Docker Engine 상에서 어느 환경에서나 명령어 하나만으로 동일한 서비스를 설치하고, 쉽게 접근이 가능하다. # Docker Container와 기존 VmWare VM 기술의 공통점 & 차이점 둘 다 격리된 리소스를 가진 실행 환경을 제공하지만, VM은 HostOS와 별개인 GuestOS를 설치하여 동작하여 무겁고, Docker Container는 별도의 OS 없이 HostOS의 커널을 공유하므로 실행이 가볍다. ...

정규식 관련 온라인 테스트 사이트

  RegExr: Untitled 6dm2n  에서 테스트 해봄 검색용 정규식 (SetEffective)[\(\t\n\r]+(EFST_NOACTION_WAIT) 테스트 텍스트 SetEffective(EFST_NOACTION_WAIT, 0); SetEffective( EFST_NOACTION_WAIT, 0); SetEffective( EFST_NOACTION_WAIT, 0); ResetEffective(EFST_NOACTION_WAIT, 0); ResetEffective( EFST_NOACTION_WAIT, 0) 참고1.  정규표현식(Regular Expression) 사이트 및 팁 (tistory.com) 참고2.  정규표현식 (Regex) 정리 (tistory.com)

VS 2017:C++에서 timeGetTime() 과 GetTickCount() 결과값 비교(DWORD 로 같은 내용 반환)

// timeGetTime() 과 GetTickCount() 다른 내용인 것 처럼 표시되어 있으나, // 적어도, VS2017 에서는 같은 결과를 반납함.  // 혹시, 다른 버전에서는 다른 결과를 반납하는지 확인 필요. #include <iostream> #include <string> #include <windows.h> // GetTickCount() #pragma comment(lib, "winmm.lib") // timeGetTime() using DWORD = unsigned long; int main() { const DWORD curTime2 = timeGetTime(); std::cout << "timeGetTime(): " << curTime2 << std::endl; const DWORD curTime = GetTickCount(); //49.5일에 초기화문제 있슴. ULONGLONG GetTickCount64() 를 쓰는 것도 검토 해볼만함 std::cout << "GetTickCount(): " << curTime << std::endl; std::cout << "Press enter a key." << std::endl; std::getchar(); return 0; } 실행 결과 timeGetTime(): 15419953 GetTickCount(): 15419953 Press enter a key.

엑셀 특정 탭 남기고 다 닫기 .vbs

 엑셀 시작후 0. 작업할 시트를 염 1. alt + F11 누름 2. 왼쪽 트리에서 통합시트 를 선택 후 우클릭 3. 메뉴에서 삽입 > 모듈 선택 4. 아래 모듈 붙여 넣기 후 남겨놓을 시트 이름으로 변경후 실행 Sub DeleteSheets1()     Dim xWs As Worksheet     Application.ScreenUpdating = False     Application.DisplayAlerts = False     For Each xWs In Application.ActiveWorkbook.Worksheets         If xWs.Name <> "Sheet8" Then             xWs.Delete         End If     Next     Application.DisplayAlerts = True     Application.ScreenUpdating = True End Sub

Notepad++ 를 이용 WebPage 샘플 소스에서 html 태그 제거하기.

크롬을 이용하여 웹페이지에서 해당 소스를 찾았는데, 복사 금지이면, f12 를 눌러 개발자 도구창(?)을 선택하고, 영역 선택 버턴을 눌러서 원하는 소스가 있는 부분에서 가능하면 해당 영역을 전부 포함되는 가장작은  영역을 선택함. 우측 html 에서 html 수정 내용을 왕창 가져와서 notepad++에 붙여넣기를 시전한다. <notepad++ 에 정규식을 이용한 내용 일괄 변경 기능 사용> notepad++ 에서 ctrl + h  를 눌러 replace 창에서 검색항목에 아래 항목을 입력하고 "<[^>]+>" <- 옆에 "는 제거 해야함 정규식 옵션 항목 선택 후 replace all 버턴을 선택하면 거의 대부분의 html 태그 깔끔하게 제거 됨

[linux] start faied ssh server service

$ sudo service ssh start  * Starting OpenBSD Secure Shell server sshd sshd: no hostkeys available -- exiting. /etc/ssh 폴더 아래에 ssh_host_* 파일이 없어서 발생하는 문제 $ ls /etc/ssh total 552 moduli        ssh_config            ssh_config.d              ssh_import_id sshd_config   sshd_config.d $ $ sudo ssh-keygen -A ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 $ ls /etc/ssh/ moduli        ssh_host_dsa_key      ssh_host_ecdsa_key.pub    ssh_host_rsa_key      sshd_config ssh_config    ssh_host_dsa_key.pub  ssh_host_ed25519_key      ssh_host_rsa_key.pub  sshd_config.d ssh_config.d  ssh_host_ecdsa_key    ssh_host_ed25519_key.pub  ssh_import_id $

vcpkg - VisualC 용 package manager

 node.js 의 npm 처럼 c는 왜 간편한 패키지 설치 관리자 같은게 없나 늘 의문 이었슴. c#(.net)을 위한 nuget 이 있기는 했지만, 이건 c++ 용이 아니라 여러가지가 혼재 되어 있어서 사용하기 애매 하단 느낌이었는데, 자료 검색 중 발견 !!!!!!! 이미 많은 분들이 사용하고 있을 듯, 사용법은 기존 pkg manager 와 비슷 https://github.com/microsoft/vcpkg 위 git 웹이지 설명에는 라고 되어 있었슴. C++ Library Manager for Windows, Linux, and MacOS 해당 페이지에 설치 방법에 대해 설명이 있으니, 가능한 자세히 읽어볼 것. VisualStudio 2019 community 설치(또는 다른 VisualStudio 버전중 택 1) git 프로그램을 통해 해당 주소에서 소스 다운로드하고 윈도우 도스명령창(cmd.exe) 창에서 'bootstrap-vcpkg.bat' 입력후 <enter> 하면 vcpkg.exe 가 생생됨. 아래와 같이 명령을 사용할 수 있으며 >vcpkg version    <- 버젼 확인 >vcpkg list          <- 설치된 패키지 목록 조회 >vcpkg search <pkgname> <- 설치하고픈 이름의 패키지 찾기 >vcpkg install <pkgname>  <- 패키지 설치 >vcpkg remove <pkgname> <- 패키지 삭제 ex) mysql 검색시 G:\vcpkg>vcpkg search mysql gdal[mysql-libmariadb]                Add mysql support using libmariadb libmariadb    ...