본문 바로가기

Debug

[Golang] errors.Is와 As를 활용한 에러 핸들링 Go 언어에서 에러는 단순한 문자열이 아닌 인터페이스로 구성되어 있습니다.그래서 단순히 에러의 유무만을 판단하는 단계를 넘어,에러의 타입이나 정보들을 확인하고 값을 직접 꺼내서 사용하는 방법을 알아보겠습니다. 1. Sentinel Error "Sentinel Error" 는 특정 상태를 나타내기 위해 미리 정의해둔 고정 에러 변수이며 ,뜻에서 알 수 있듯 '파수꾼'이라는 이름처럼 코드 곳곳에 발생하는 에러들과 비교하는 기준점이 됩니다. 특징으로는 패키지 레벨 전역 변수로 선언되며, 주로 에러의 상세 내용보다는 어떤 에러가 발생했는지, 그 종류를 구분할 때 사용합니다.특징전역변수 선언에러 종류 구분에 사용됨// Examplevar ErrInvalidInput = errors.New("invalid inpu.. 더보기
[Golang] Slog를 활용한 로그 샘플링 구현하기 지난 포스팅에서는 "slog"를 활용한 민감 정보를 가리는 마스킹 핸들러를 알아보았습니다.이번에는 보안만큼 중요한 운영 비용과 시스템 과부화 관리에 대해서 함께 알아보겠습니다.초당 수만 건씩 발생하는 단순 상태 로그들을 전부 저장하면 로그 서버(ELK,CloudWatch)의 비용이 계속 증가하게 됩니다.중요한 에러 로그를 찾고, 검색하는 것에 방해가 되는 경우가 많습니다. 이때 필요한 방법이 "로그 샘플링" 입니다. 1. 작동 원리특정 범위의 로그는 설정한 비율로만 남기고 중요한 로그는 유실 없이 기록하는 전략입니다.특정 범위 로그 : 로그 레벨 (debug,info,warn.... 등)설정한 비율 : N회당 1개 (10번 중 1번 출력하기) 2. 전체 코드slog.handler 인터페이스를 구현합니다.. 더보기
[Golang] Slog를 활용한 마스킹 핸들러 구현 로깅은 장애 추적에 필수적이지만, 보안사항에 대해서 고민하지 않을 수 없다.실수로 사용자의 이메일이나 비밀번호, 토큰과 같은 민감 정보가 로그 서버(ELK, CloudWatch)에 평문으로 남게되면 보안 사고로 이어질 수 있다.Go에서 Slog는 Custom Handler를 통해 로그를 출력하기 직전 데이터를 마스킹하는 기능을 구현할 수 있다. 1. 작동 원리"slog.Handler" 인터페이스를 구현하는 커스텀 구조체를 만들어, 실제 로그 기록하는 Handle() 메서드 내부에서 로직을 수행합니다.작동 순서로그 레코드의 모든 속성을 순회합니다.마스킹 대상 키가 발견되면 값을 마스킹 합니다.마스킹 된 데이터를 다음 핸들러로 넘겨 최종 출력합니다. (Json or Text) 2. 전체 코드JSONHandl.. 더보기
[Golang] 표준 로깅 라이브러리 Slog Go 1.21 버전부터 표준 라이브러리에 "log/slog" 가 추가 되었습니다.기존 log 패키지는 단순 문자열 기반 로깅이었지만 slog는 key-value 기반의 구조화 로그를 지원함으로써기존의 "logrus", "zap" 같은 외부 라이브러리 없이도 구조화된 로깅을 사용할 수 있게 되었습니다. 1. slog란?slog는 Structured Logging의 약자로, 로그를 단순한 텍스트가 아닌 Key-Value 쌍의 구조화된 데이터로 관리하는 라이브러리입니다. - 특징표준 라이브러리 : 외부 의존성 없이 프로젝트 유지보수가 가능합니다.구조화된 데이터 : Json 형태로 로그를 출력해 ELK 스택이나 CloudWatch 등 로그 분석 솔루션의 연동하기 좋습니다. 2. 사용 방법 2-1. 기본 사용 .. 더보기
[Golang] logrus로 구조화된 로깅 구현 Go 프로젝트에서는 표준 출력 fmt,log 패키지만으로는 로그를 관리하는 것에는 한계가 있습니다.로그 레벨을 구분하고, 상황에 따라 메타데이터를 포함하는 구조화된 로깅이 반드시 필요합니다.여러 로깅 라이브러리 중에서 "logrus"에 대해서 알아보겠습니다. 1. Logrus란?logrus는 Go언어에서 가장 많이 사용되는 로깅 라이브러리 중 하나이며, 단순 텍스트를 넘어 JSON과 같은 구조화된 로그를 생성하는 것에 최적화되어 있어 ,ELK 스택(Elasticsearch, Logstash, Kibana)이나 CloudWatch 같은 로그 수집 솔루션과 연동하기가 아주 좋습니다. 2. 사용 방법 2-1 ) 설치go get github.com/sirupsen/logrus 2-2 ) 예제package m.. 더보기