전체 글163 Optional Boolean은 무조건 안티패턴이다 무조건 이라는 표현은 항상 위험하지만, 이례적으로 Optional Boolean은 예외 없이 안티패턴이라고 생각합니다.왜 문제인가?Boolean은 참 또는 거짓입니다. 그런데 Optional로 만드는 순간 세 번째 상태가 생깁니다.val isEnabled: Boolean? = null // 이게 대체... 뭘 의미하는 거임?null이 "아직 설정 안됨"인지, "적용되지 않음"인지, "알 수 없음"인지 모호합니다.코드를 읽을 때마다 머리가 아프고, 미숙하게 만들어진 API와 연동할 때 Boolean 프로퍼티가 optional하게 내려오면, 사실 좀 짜증까지 납니다.. ㅋㅋ;(null이면 무조건 false로 처리하자니 어떤 의미를 가질까 찝찝하기도 하구요.)그럼 어떻게 해야 하나?간단합니다. Boolean.. 2025. 7. 11. 배휘동 연사님의 디버깅 마인드셋으로 다시 보는 gRPC 403 에러 해결기 지난 글에서 gRPC 클라이언트 403 에러를 해결하면서 겪었던 비효율적인 디버깅 과정을 공유했습니다. 이번에는 INFCON 2024에서 배휘동 연사님이 발표하신 "디버깅 마인드셋" 프레임워크를 적용하여, 제가 어떤 실수를 했는지, 그리고 올바른 접근법으로는 어떻게 문제를 해결할 수 있었을지 분석해보겠습니다.배휘동 연사님의 디버깅 5단계 프레임워크먼저 연사님이 제시한 디버깅 고수들의 원인 파악 5단계를 다시 살펴보겠습니다:문제 정의: 명확한 이정표 만들기정상 동작 정의: Given-When-Then으로 올바른 동작 정의최소 재현 환경 구축: 문제 발생 지점 핀포인트하여 격리차이점 원인 탐색: 두 환경의 차이점 분석 (최소 3개 가능성)가설 설정 및 검증: 검증 가능한 가설로 문장화하여 테스트제 디버깅 과.. 2025. 7. 9. gRPC 클라이언트 403 에러 해결 기록. AWS WAF NoUserAgent_HEADER 규칙에 대해. 현재 저는 서버간 통신은 gRPC를 사용하고 웹 클라이언트와의 통신은 gRPC-Web을 사용하는 프로젝트를 진행하고 있습니다.이 포스팅은 gRPC-Web 단위 테스트 중 겪은 문제와 그 해결 과정에 관한 기록입니다. 별거 아닌 문제였음에도 제 디버깅 프로세스가 심각하게 잘못되어있어, 디버깅에 오랜시간 애를 먹었던 이슈였기 때문에 이런 실수를 반복하지 않기 위해 기록으로 남겨보려 합니다.이슈 배경프론트(웹 클라이언트)없이 백엔드 통합 테스트 중웹 클라이언트와의 통신은 gRPC-Web을 사용SpringBootGrpc의 경우 프록시 서버 없이는 gRPC-Web을 지원하지 않아, Line의 Armeria를 Spring에 통합시켜 프록시 없이 gRPC-Web과 gRPC 호출을 모두 처리할 수 있도록 설정PostM.. 2025. 7. 8. Git Submodule 사용시 상위 레포에서 브랜치 체크아웃을 해도 서브모듈에 반영되지 않는 문제 해결 들어가며이번 프로젝트를 진행하면서 gRPC proto 명세를 여러 언어에서 공유해야 하는 상황이 생겼습니다.Kotlin(Spring Boot), Flutter, Rust 프로젝트에서 동일한 proto 파일을 사용해야 했고, 이를 위해 Git Submodule을 도입했습니다.하지만 처음 사용하는 Git Submodule에서 예상치 못한 문제가 발생했는데, 이번 포스트에서는 그 문제와 해결 과정을 공유하고자 합니다.임의의 프로젝트 구조 예시parent-project/ # 메인 Kotlin 프로젝트├── src/├── proto-specs/ # Git Submodule (proto 명세 저장소)│ ├── user.proto│ ├── order.prot.. 2025. 6. 11. 이전 1 2 3 4 ··· 41 다음 728x90