[작심삼주 오블완 챌린지] 21일간의 블로그 여정, 마지막 날
·
Notes
블로그 시작개발을 하다 보면 문제를 해결하기 위해 검색을 하는 것이 너무나 흔한 일이었다. 최근에는 생성형 AI 덕분에 검색 빈도가 줄어들긴 했지만, 여전히 구글에 많은 것을 물어보고 있다. 그만큼 블로그 글은 문제를 해결할 수 있는 중요한 자원으로 활용된다. 그런 글을 내가 작성해 광고 수익으로 돈도 벌고 누군가의 문제를 해결해 줄 수 있다면 좋겠다고 생각했지만 시작이 가장 어려운 법이었다. 블로그를 시작하는 일은 쉽지 않았다. 한 달 전쯤 정말 갑자기 블로그를 시작하게 되었다. 주제가 떠오를 때마다 꾸준히 글을 작성할 생각은 있었지만, 매번 주제를 정해가며 글을 올릴 생각이 없었다. 처음에는 그동안 머릿속에 있던 아이디어들을 주제로 글을 쓰기 시작했지만, 시간이 지나면서 소재가 고갈되고 글을 올리지 ..
[golang] fasthttp! 속도를 뒤집어 놓으셨다
·
Language/Go
서론Go 언어는 기본적으로 HTTP 구현이 net/http라는 표준 패키지로 제공된다. 표준 패키지는 언어와 함께 관리되어 보안 측면에서도 안정적이며 HTTP 표준을 잘 준수하고 있어 대부분의 상황에서 문제 없이 사용할 수 있다. 그러나 net/http 패키지를 사용해서 서버나 클라이언트가 많은 요청을 빠른 응답 시간으로 처리해야 할 때와 같이 성능이 중요한 상황에서는 외부 패키지인 fasthttp 사용을 고려할 수 있다. fasthttp는 이름 그대로 빠른 HTTP를 제공하는 패키지로 net/http와 비교했을 때 최대 10배 빠른 성능을 제공한다. 하지만 fasthttp는 net/http와 API가 호환되지 않기 때문에 기존 코드를 다시 작성하거나 사용법을 새로 익혀야 한다. 또한 net/http의 ..
[golang] 타입 스위치(type switch)로 interface{} 값 처리하기
·
Language/Go
서론Go 언어에서 interface{} 타입은 모든 타입을 담을 수 있어 매우 유연하게 사용된다. 그러나 interface{}에 담긴 값의 원래 타입을 알아내고 처리할 때는 주의가 필요하다. 잘못된 타입 변환 시 panic이 발생할 수 있기 때문에 안전하게 타입을 다루는 방법이 중요하다. Go 언어에서 interface{} 타입의 값을 다룰 때 타입 스위치(type switch)를 사용하면 다양한 타입을 안전하게 처리할 수 있다. 타입 스위치는 값이 어떤 타입인지를 확인하고 각 타입에 맞는 처리를 할 수 있게 도와준다. 타입 스위치 예제package mainimport "fmt"func do(i interface{}) { switch v := i.(type) { case int: ..
[golang] panic 없이 interface{} 타입 변환하기
·
Language/Go
서론Go 언어에서 interface{} 타입은 모든 타입을 담을 수 있어 매우 유연하게 사용 되는 타입이다. 주로 다양한 데이터 타입을 처리하거나 동적 데이터를 다룰 때 사용된다. 그러나 interface{} 타입으로 처리하다가 원래의 타입으로 변환할 때 잘못된 타입으로 변환을 시도하면 panic이 발생할 수 있다. 이 글에서는 interface{} 타입을 사용할 때 panic을 방지하고 안전하게 타입을 변환하는 방법을 다룬다. 잘못된 단언var gpa interface{} = 4.5// panic: interface conversion: interface {} is float64, not stringmsg := "GPA: " + gpa.(string)fmt.Println(msg)GPA는 float64 ..
[golang] Base64 인코딩과 디코딩 처리하기
·
Language/Go
서론Base64는 데이터를 바이너리에서 텍스트로 변환하는 데 널리 사용되는 방식이다. 주로 바이너리 데이터를 JSON과 XML과 같은 텍스트 기반 프로토콜로 전송할 때나 로그 파일에 기록할 때 사용된다. Go 언어는 Base64 인코딩과 디코딩 작업을 쉽게 처리할 수 있는 표준 패키지를 제공한다. 이 글에서는 encoding/base64 패키지를 사용하여 Base64 인코딩과 디코딩을 하는 방법을 다룬다. Base64 인코딩 / 디코딩 예제package mainimport ( "encoding/base64" "fmt")func main() { data := "Jae-Sung~" encoded := base64.StdEncoding.EncodeToString([]byte(data)) ..
[golang] 런타임에 콜 스택 출력하기
·
Language/Go
서론디버깅은 소프트웨어 개발 과정에서 중요한 부분을 차지한다. 코드가 예상대로 동작하지 않거나 오류가 발생했을 때, 문제의 원인을 추적하고 해결하는 데 많은 시간이 소요된다. 특히 함수 호출 순서나 실행 흐름을 파악하는 것이 어려울 때, 콜 스택을 출력하는 방법은 매우 유용한 도구가 된다. Go 언어는 runtime과 debug 패키지를 제공하여, 런타임 중 함수 호출 정보를 쉽게 출력하고 코드 흐름을 추적할 수 있게 한다. 이러한 콜 스택 출력 기능은 디버깅 과정에서 매우 유용하며, 예기치 않은 오류를 해결하는 데 큰 도움이 된다. STDERR에 콜 스택 출력package mainimport "runtime/debug"func subModule() { debug.PrintStack()}func M..
[golang] panic과 recover로 try-catch 따라 하기
·
Language/Go
서론많은 프로그래밍 언어에서 사용되는 try-catch는 개발자들에게 친숙한 예외 처리 방법이다. 하지만 Go 언어는 try-catch 구문을 제공하지 않고 error 타입을 반환하여 오류를 처리하도록 유도한다. Go는 panic과 recover를 제공하지만 공식 문서에서는 panic은 복구 불가능한 오류에서만 사용해야 하며 일반적인 오류 처리에는 사용하지 말라고 권장하고 있다. 이 글에서는 panic과 recover를 활용해 try-catch 스타일의 예외 처리 방식을 따라 해본다. 다만 이 방법은 권장되지 않으며 실제 개발에서는 사용을 피하고 재미로만 보는 것이 좋다. Don’t PanicDon’t use panic for normal error handling. Use error and multip..
[golang] path/filepath 패키지로 멀티 플랫폼에서 파일 경로 처리
·
Language/Go
서론현대의 애플리케이션은 다양한 플랫폼에서 동작해야 하는 경우가 많다. 특히 파일 경로를 다루는 작업은 운영 체제마다 파일 경로 구분자가 다르기 때문에 멀티 플랫폼 개발에서 흔히 마주치는 도전 과제 중 하나이다. Go 언어는 이러한 문제를 해결할 수 있는 표준 패키지를 제공한다. path/filepath 패키지는 각 플랫폼에서 사용하는 방식으로 파일 경로를 안전하게 처리할 수 있다. 파일 경로를 다루는 작업에서는 path/filepath 패키지를 사용해 처리하는 것이 플랫폼에 따른 코드 호환성을 보장하는 최선의 방법이다. 이 글에서는 간단한 예제를 통해 path/filepath 패키지의 사용법을 알아본다. path/filepath 패키지 사용하기package mainimport ( "fmt" ..
[golang] flag 패키지로 명령줄 옵션 처리하기
·
Language/Go
서론Go 언어는 간단하게 CLI(Command-Line Interface) 프로그램을 작성할 수 있는 표준 패키지를 제공한다. 명령줄에서 데이터를 입력받아 처리하거나 옵션을 지정하는 방식은 많은 개발자들에게 익숙한 방법이다. flag 패키지를 사용하면 명령줄 옵션을 간단하게 정의하고 파싱할 수 있으며, 기본값 설정과 도움말 출력 같은 기능까지 손쉽게 구현할 수 있다. 이번 글에서는 flag 패키지의 간단한 사용법을 CLI 프로그램 예제를 통해 소개한다. 명령줄 옵션 정의v := flag.Bool("v", false, "show version info")name := flag.String("name", "", "Your name")sleep := flag.Int("sleep", 1, "Sleep secon..
[golang] Go 언어 철학에서 switch문이 살아 남은 이유
·
Language/Go
서론Go 언어는 간결성, 명확성, 일관성을 중요시하는 철학을 바탕으로 설계되었다. 이러한 철학은 Go의 문법과 기능 설계에서 뚜렷하게 나타나며, 코드가 복잡해지지 않도록 돕고 간결하고 읽기 쉬운 코드를 작성할 수 있게 한다.Go에서 반복문이 while문이나 do-while문과 같은 반복문은 제공하지 않고 for문만을 제공하는 것을 보면 이러한 철학을 느낄 수 있다. 이는 Go 언어가 코드의 복잡성을 줄이고 개발자가 한 가지 방법으로 문제를 해결하도록 유도하는 설계 방식이라고 생각한다.반복문과 다르게 조건문에서는 if문과 switch문이 공존한다. switch문은 여러 조건을 한 번에 처리할 수 있는 강력한 도구이지만 대부분의 경우 if문으로도 대체할 수 있다. 하지만 switch문에서 fallthroug..