전체 글 101

안전하게 개발하기 레츠GO! #5 실전 테스트

실전 데이터 테스트많은 회사에서 Golang의 testing 패키지를 활용해 다양한 테스트를 수행하고 있습니다. 하지만 실제로는 간단한 Mock 테스트나 기본적인 유닛 테스트 수준에서 멈추는 경우가 대부분입니다. 물론 이러한 테스트 방식도 프로젝트 품질을 높이고 개발 속도를 향상하는데 충분히 의미가 있습니다. 하지만 개인적인 관점에서는, Mock 환경에만 의존한 테스트는 실제 운영 환경과의 갭을 줄이는 데 한계가 있다고 생각합니다. Mock 테스트는 안정적이고 빠르게 동작하지만, 실제 데이터 흐름·스키마 변화·외부 시스템과의 연동 문제 같은 현실적인 오류를 잡아내기 어렵기 때문입니다. 그래서 저는 개발 단계에서부터 Mock 테스트를 넘어, 실제 개발 환경에서 사용하는 Database 또는 Pipeline..

Go언어 2025.11.23

안전하게 개발하기 레츠GO! #4 graceful shutdown

Graceful Shutdown이란?Graceful Shutdown은 애플리케이션이 종료될 때, 현재 처리 중인 작업을 안전하게 마무리하고 사용 중인 리소스를 정리하며, 더 이상 새로운 요청을 받지 않도록 하는 프로세스를 의미합니다. 실제 서비스 운영 환경에서는 배포를 위해 서버를 재시작하거나, 장애 복구를 위해 프로세스를 종료해야 하는 상황이 자주 발생합니다. 이때 단순히 프로세스를 강제로 종료시키면 진행 중이던 요청이 끊기거나, 외부 시스템과의 연결이 비정상적으로 종료되며, 데이터 손실까지 발생할 수 있습니다. 이러한 문제를 방지하기 위해 Golang에서는 Graceful Shutdown 패턴을 활용하여 안전한 종료 절차를 구현할 수 있습니다. Graceful Shutdown의 필요성실제 서비스 운영..

Go언어 2025.11.21

안전하게 개발하기 레츠GO! #3 go benchmark

Benchmark 이해하기Golang의 benchmark(벤치마크)와 test(테스트)는 코드의 정확성과 성능을 보장하기 위한 핵심 도구입니다. 특히 대규모 트래픽을 처리하거나 고성능 연산이 필요한 애플리케이션을 개발할 때, 테스트와 벤치마크는 선택이 아닌 필수 요소입니다. 본 문서에서는 Golang의 벤치마크 개념과 그 중요성, 그리고 기본적인 사용 방법에 대해 자세히 설명합니다. Benchmark란?Golang에서 benchmark란 특정 코드, 함수, 알고리즘 또는 시스템의 성능을 측정하여 실행 속도, 처리량, 리소스 사용량(CPU, 메모리 등)을 분석하는 과정입니다. 이를 통해 코드의 최적화 가능성을 평가하고 여러 구현 방식 간의 성능 차이를 비교하며 병목 현상을 식별하여 효율적인 개선 방향을 찾..

Go언어 2025.11.20

안전하게 개발하기 레츠GO! #2 go testing

TDD란?유닛 테스트 작성법과 Go testing 패키지를 활용한 디버깅 방법을 설명하기 전에, 먼저 TDD(Test-Driven Development, 테스트 주도 개발) 개념을 간단히 짚고 넘어가겠습니다.TDD는 소프트웨어 개발 방법론 중 하나로, 실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 방식을 의미합니다. 즉, 먼저 실패하는 테스트를 만들고, 그 테스트를 통과시키기 위한 최소한의 코드를 작성한 뒤, 마지막으로 리팩토링을 진행하는 순서로 개발이 이루어집니다. 이러한 접근 방식은 코드 품질을 높이고, 기능 추가나 수정 시 발생할 수 있는 오류를 빠르게 발견하는 데 큰 도움을 줍니다.TDD에 대한 자세한 내용은 구글링을 통해 보다 더 좋은 자료를 참고할 수 있습니다. testing 패키지란..

Go언어 2025.11.19

안전하게 개발하기 레츠GO! #1 디버깅

제가 Golang을 개발한 지는 벌써 5년이 넘었고, 그동안 Golang을 사용하는 두 개의 회사에서 근무하며 많은 개발자들과 협업해 왔습니다. 여러 팀과 다양한 프로젝트를 경험하면서 가장 크게 느낀 점 중 하나는 생각보다 많은 Golang 개발자들이 디버깅 기능과 유닛 테스트를 충분히 활용하지 않고 있다는 것이었습니다. 특히 Println 디버깅에만 의존하거나, 테스트 코드를 ‘있으면 좋은 것’ 정도로만 생각하는 경우도 꽤 많았습니다. 하지만 규모가 커지는 서비스에서는 이런 방식이 유지보수성과 개발 효율을 크게 떨어뜨릴 수 있습니다.그래서 이번 포스팅에서는 Golang 개발자가 디버깅과 유닛 테스트를 어떻게 하면 보다 효과적으로 활용할 수 있을지, 실무 관점에서 구체적으로 이야기해보려고 합니다.이번 글..

Go언어 2025.11.18

Go언어의 benchmark와 test

benchmark와 testGolang에서 benchmark와 test는 코드의 정확성과 성능을 보장하는 핵심 요소입니다. 특히, 대규모 시스템이나 고성능이 중요한 애플리케이션을 개발하는데 매우 중요한 기능입니다. 이번 문서에서는 benchmark와 test에 대한 사용법을 알아보겠습니다.benchmark란Golang에서 benchmark란 특정 코드, 함수, 알고리즘 또는 시스템의 성능을 측정하여 실행 속도, 처리량, 리소스 사용량(CPU, 메모리 등)을 분석하는 과정입니다. 이를 통해 코드의 최적화 가능성을 평가하고 여러 구현 방식 간의 성능 차이를 비교하며 병목 현상을 식별하여 효율적인 개선 방향을 찾을 수 있습니다. 특히 Golang에서는 go test -bench 명령어를 활용하여 특정 함수의 ..

Go언어 2025.11.18

direnv를 이용하여 디렉토리에 환경변수 자동 관리하기

direnv는 개발 과정에서 특정 환경변수를 팀원과 쉽게 공유하거나, 반대로 중요한 정보를 .gitignore파일에 .envrc 파일을 추가하여 나는 편하게 사용할 수 있지만 다른 사람에게 노출하지 않도록 하기 위해 많이 사용되는 도구입니다..envrc 파일을 이용하여 디렉토리에 진입할 때 자동으로 환경변수를 로드하고, 디렉토리를 벗어나면 자동으로 해제되기 때문에 프로젝트별 환경 분리에 매우 유용합니다. macOs에서 direnv 설치하기macOS에서는 Homebrew로 간단하게 설치할 수 있습니다.brew updatebrew install direnv direnv는 사용 중인 쉘에 “hook”을 등록해야 동작합니다. zsh 사용 중일 때 다음과 같이 설정할 수 있습니다.echo 'eval "$(dire..

DevOps 2025.11.16

왜 우리는 타인을 쉽게 비난할까?

상대방을 비난하는 행위는 단순히 감정의 표출이라기보다, 종종 자기 자신을 보호하기 위한 심리적 방어기제의 일환일 수 있습니다. 누군가를 비난함으로써 자신의 실수나 부족함을 가리거나, 불안을 줄이려는 무의식적인 행동인 것이죠. 하지만 이런 행동은 개인의 불안은 잠시 완화할 수 있어도, 팀 전체의 분위기와 협업 문화에는 부정적인 영향을 남깁니다.특히 개발자 조직에서는 협력과 소통이 매우 중요합니다. 코드를 함께 리뷰하고, 장애를 해결하며, 새로운 기능을 논의하는 과정에서 서로의 실수를 비난하는 문화가 자리 잡는다면 팀의 신뢰는 쉽게 무너집니다. 물론, 동료의 행동이 명백히 문제를 일으키는 경우에는 비판은 필요합니다. 하지만 ‘비판’과 ‘비난’은 전혀 다른 개념입니다. 비판은 문제의 원인을 함께 찾고 개선을 ..

나의생각 2025.11.11

GitHub Actions 로컬 테스트 방법 (with act)

GitHub Actions 로컬 테스트 방법 (with act)GitHub Actions를 사용하다 보면, 매번 Commit하고 Push하지 않고도 로컬 환경에서 워크플로우가 정상적으로 동작하는지 간단하게 확인하고 싶을 때가 있습니다. 이런 경우 act라는 도구를 활용하면 로컬에서 GitHub Actions 워크플로우를 직접 실행해볼 수 있습니다. 이번 글에서는 act를 사용하여 로컬 환경에서 GitHub Actions 워크플로우를 테스트하는 방법에 대해 소개하겠습니다.단, act는 간단한 구조의 워크플로우 테스트에 적합하며, 복잡한 조건 분기나 다양한 OS 환경, self-hosted runner, 외부 서비스와의 연동 등 복잡한 구성에서는 한계가 있을 수 있습니다. 따라서 기본적인 기능 확인이나 단순..

git & github 2025.07.15

Ubuntu 24.04 LTS에서 윈도우 정렬 그룹화 비활성

Ubuntu 24.04 LTS에서 윈도우 정렬 그룹화 비활성화Ubuntu 24.04 LTS의 GUI 환경을 회사 업무용으로 사용하면서 가장 불편하게 느꼈던 점 중 하나는 윈도우 창 정렬(타일링) 기능이었습니다. 특히, 하나의 창을 화면 좌측이나 우측으로 정렬했을 때, 자동으로 반대편 공간에 다른 창이 고정되어 그룹화되는 동작이 개인적인 작업 방식과 맞지 않아 불편함을 자주 겪었습니다.예를 들어, 코드 편집기 창을 좌측에 고정하고, 브라우저나 터미널 창을 자유롭게 배치하려고 하면, 우측 공간이 자동으로 다른 창으로 채워지거나, 창 간 간격이 자동 조정되어 의도치 않게 창 배치가 고정되는 문제가 발생하곤 했습니다. 이러한 설정은 일부 사용자에게는 멀티태스킹에 도움이 될 수 있으나, 자유로운 창 배치를 선호하..

ETC 2025.07.10