golang - 05) TCP Server 만들기

출처 Graceful Shutdown main.go package main import ( "context" "log" "os" "os/signal" "syscall" "github.com/dmmlabo/tcpserver_go/tcp5/server" ) func main() { chSig := make(chan os.Signal, 1) // Ignore all signals signal.Ignore() signal.Notify(chSig, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGHUP) host := loadConf() svr := server.NewServer(context.Background(), host)...
더 읽기

golang - 04) TCP Server 만들기

출처 비동기 Write main.go package main import ( "context" "log" "os" "os/signal" "syscall" "github.com/dmmlabo/tcpserver_go/tcp4/server" ) func main() { sigChan := make(chan os.Signal, 1) // Ignore all signals signal.Ignore() signal.Notify(sigChan, syscall.SIGINT) svr := server.NewServer(context.Background(), "127.0.0.1:12345") err := svr.Listen() if err !=...
더 읽기

golang - 03) TCP Server 만들기

출처 server 패키지 만들기 struct를 이용한다. handleConnection에서 사용하는 속성을 Server 구조체, handleConnection에서 사용하는 속성을 Conn 구조체에 정리한다. main.go package main import ( "context" "log" "os" "os/signal" "syscall" "github.com/dmmlabo/tcpserver_go/tcp3/server" ) func main() { sigChan := make(chan os.Signal, 1) // Ignore all...
더 읽기

golang - 02) TCP Server 만들기

출처 서버 종료하기 package main import ( "context" "log" "net" "os" "os/signal" "strings" "sync" "syscall" ) const ( listenerCloseMatcher = "use of closed network connection" ) func handleConnection(conn *net.TCPConn, serverCtx context.Context, wg *sync.WaitGroup) { defer func() { conn.Close() wg.Done() }()...
더 읽기

golang - 01) TCP Server 만들기

출처 Echo Server 예제 코드 package main import ( "log" "net" ) func handleConnection(conn *net.TCPConn) { defer conn.Close() buf := make([]byte, 4*1024) for { n, err := conn.Read(buf) if err != nil { if ne, ok := err.(net.Error); ok {...
더 읽기

C++ - 헤더 파일로 만드는 actor 모델 라이브러리

원문 C++의 표준 라이브러리로만 구현(thread, chrono, mutex, atomic, queue) 성능보다 구성 요소의 작음을 우선 소스 actor 모델? actor 모델은 병렬 계산의 수학적 모델의 일종이다. 병렬 처리 지향이라는 Erlang과 함수형 언어 Scala에서도 사용되고 있다. 어떤 actor 객체는 동시에 하나의(스레드, 프로세스, PC)상에서...
더 읽기

Redis 서비스 전에 조사할 것들

Redis 서버의 흔한 실수 법 Redis 서버가 떨어지거나 APP서버가 떨어질지는 상황에 따른다. KEYS 명령과 ZRANGE 명령으로 수만건 이상에 접근하여 I/O대기로 죽는다 데이터 설계를 실패하여 메모리 부족으로 쓸 수 없게 되어 죽는다 Redis 서버에서 장애 발생 시의 기본 대응 우선 메모리...
더 읽기

좋은 에러 메시지 쓰는 법

원문 에러 메시지를 2가지로 분류한다 우선, 에러 메세지라고 해도 다음의 2가지 패턴에서 크게 달라진다. (1) 이용자가 보는 에러 메세지 (2) 개발자가 보는 에러 메시지 (1) 이용자가 보는 에러 메세지 내부 구현에 대해서는 적지 않는다 | | | |–|–| |NG |...
더 읽기

로그 설계 지침

원문 개요 이 문서는 효율적이고 안정된 시스템 개발/운용을 하기 위한 로그 설계 지침이다. 정확하면서 낭비 없는 로그 출력을 목표로 한다. 로그 수준 로그의 긴급도나 용도에 따라서 다음처럼 로그 수준을 설정한다. Log4j의 로그 수준을 따라하고 있어서 운용 상황에 따라서는 Critical 등...
더 읽기

Visual Studio - 설치 중인 확장 프로그램

viasfora url: https://viasfora.com/ 여러 기능이 있지만 가장 큰 기능은 ‘Rainbow Braces’ 이다. 이 기능을 사용하면 괄호를 중첩할 때 색을 다르게 표시하므로 중첩된 괄호를 구분하기 쉽다. 동작을 보고 싶다면 여기를 본다 CodeMaid url: https://marketplace.visualstudio.com/items?itemName=SteveCadwallader.CodeMaid 코드를 정리해 준다. 설명(일어) http://moriblog.kit-eng.com/?p=1199 Code alignment...
더 읽기