제품의 요구사항은 자주 바뀔 수 있지만, 그 근본적인 아이디어는 보통 천천히 변합니다. 이는 흥미로운 통찰로 이어집니다. 만약 우리가 제품의 근본적인 아이디어와 일치하는 코드를 작성한다면, 그 코드는 미래의 제품 변경에도 살아남을 가능성이 더 높습니다.
TotT: SMURF - 테스트 피라미드를 넘어서
테스트 피라미드는 테스트 스위트의 발전을 안내하는 정석적인 경험 법칙(heuristic)입니다. 이는 단순한 메시지를 전달합니다. 통합 테스트보다 더 많은 단위 테스트를 선호하고, 엔드 투 엔드(end-to-end) 테스트보다 더 많은 통합 테스트를 선호하라는 것입니다.
TotT: Else 문의 미묘한 차이
함수가 if 문에서 일찍 종료(return)되는 경우, else 절을 사용하는 것과 사용하지 않는 것은 동작상으로는 동일합니다. 하지만 else 절과 가드 절(guard clause, else 가 없는 형태)을 적절히 사용하면 코드를 읽는 사람에게 의도를 더 명확하게 전달할 수 있습니다.
Go 웹 애플리케이션에서 static contents를 서빙하는 표준 패턴
복잡한 nginx 설정 파일, CDN 연동, 그리고 정적 파일 경로 문제로 골머리를 앓으신 적 있으신가요? Go 표준 라이브러리만으로도 정적 파일(CSS, JavaScript, 이미지 등)을 우아하게 서빙할 수 있습니다. 이번 글에서는 Go 웹 애플리케이션에서 static contents를 서빙하는 표준 패턴을 알아보겠습니다. http.FileServer, http.Dir, 그리고 http.StripPrefix의 조합만으로 프로덕션 레벨의 static file serving을 구현할 수 있습니다.
Go 웹 개발의 새로운 파도: GOTH 스택 (Go, Templ, HTMX) 시작하기
복잡한 리액트(React) 상태 관리, 비대해진 node_modules, 그리고 끝없는 JSON 직렬화/역직렬화에 지치셨나요? 백엔드 개발자에게 가장 편안한 언어인 Go 를 사용하면서도, 현대적인 SPA(Single Page Application) 같은 사용자 경험을 제공하는 GOTH 스택을 소개합니다.
Go: net/http vs. chi
Go 언어의 웹 생태계에서 net/http 와 chi 는 가장 ‘Go스러운(Idiomatic)’’ 선택지로 꼽힙니다. Gin이나 Echo 같은 ‘웹 프레임워크’와 달리, chi는 표준 라이브러리의 인터페이스를 그대로 따르면서 부족한 라우팅 기능을 보강해주는 ‘라우터’이기 때문입니다. 특히 Go 1.22 버전부터 net/http 의 라우팅 기능이 대폭 강화되었기 때문에, 이 둘의 차이를 명확히 이해하는 것이 중요합니다.
TotT: 함수 가독성 향상을 위해 추상화를 활용하세요
단위 테스트를 작성할 때, 테스트 대상 코드가 의존하는 타입을 목(mock) 처리하는 것은 일반적인 관행입니다. 하지만, 당신이 소유하지 않은 타입(types you don’t own)을 목 처리하는 것은 거의 항상 피해야 합니다.
온라인 포커의 먹이사슬: NLH vs PLO 피시(Fish) 공략 가이드
온라인 포커에서 수익을 내는 가장 확실한 방법은 무엇일까요? GTO(Game Theory Optimal)를 마스터하는 것도 중요하지만, 가장 빠른 길은 ‘나보다 못하는 플레이어(Fish)‘를 찾아내어 그들의 실수를 내 수익으로 치환하는 것입니다.
블러프 캐치 전략: 당신은 언제 콜하고 언제 폴드해야 하는가?
텍사스 홀덤에서 가장 짜릿하면서도 어려운 결정은 바로 ‘히어로 콜(Hero Call)‘입니다. 상대방의 마지막 베팅이 강한 핸드인지, 아니면 노골적인 블러프인지 판단하고 콜을 할 때, 당신의 포커 실력은 수익과 직결됩니다.
NLH: 프리미엄 핸드와 ‘지옥의 플랍’ 대응 전략
강력한 프리플랍 베팅 레인지(AA, KK, AK, QQ)를 가진 플레이어가 불리한 플랍을 만났을 때, 어떻게 대처해야 스택을 보존하고 에퀴티(Equity)를 지켜낼 수 있을까요? 이 글은 GTO 원칙과 실제 플레이의 절충점을 기반으로 포지션별, 스트리트별 행동 전략을 심층 분석합니다.