비용 최적화를 위한 내부 로깅 시스템 설계와 시행착오 – Azure 로그 비용 80% 절감한 경험
·
📂 Infra & System
배경스타트업 환경에서 인프라 비용은 곧 생존과 직결됩니다.당시 회사에서는 AWS와 Azure 크레딧을 제공받아 멀티 클라우드 환경으로 인프라를 운영하고 있었습니다.초기에는 AWS 크레딧을 중심으로 전체 인프라를 구성했지만, 크레딧 소진 이후 데이터베이스를 포함한 일부 워크로드를 Azure로 이전하게 되었습니다. 이 과정에서 클라우드 로그 비용이 급격히 증가하는 문제를 마주하게 되었습니다. 🌠 목차✅ 문제상황✅ 1차 접근: 로그를 저렴하게 저장하고, 필요할 때 분석하자✅ 2차 접근: 비용과 실시간성의 균형을 다시 설계하자✅ 결과 및 성과✅ 기술 회고 문제상황Azure로 일부 인프라를 이전한 뒤 비용을 모니터링하던 중,Azure 로그 저장 비용이 전체 인프라 비용의 약 30%를 차지하고 있다는 점을 발견..
2025년 연말회고
·
📂 Reflections/Year-in-Review
개발 성장을 위해 세웠던 25년 1월 초의 목표. NestJS에 대한~, TypeScript 공식문서의~, DB에~ 관련된 등등과 같은 말 뿐이었다. 그러나 7월까지 이어가지 못한 채 멈추게 되었다.이 문제는 무엇이었을까 생각해보아야 했다. 스스로를 끝까지 몰아세운 자신과 회사 그리고 사회의 문제로 정리했다. 회사에서는 사내 내부 평가 시험 + 무리한 업무 일정 + 스트레스 + 압박 등 수면시간이 절대적으로 부족했다.자신에게는 부정적 생각 + 스트레스 회복을 위한 해소제 x + 자존감 하락사회에서는 나이에 대한 강박 + 사회적 신분에 대한 부담을 스스로 느꼈다. 이 때문에 나의 목표는 6월에 멈추고 2달간의 회복기를 가지고 새로운 도약을 위한 준비를 하게 된 계기가 된 것이다. 8월부터 시작된 일본 취업..
TypeDI 내부 구조 분석: typeDI 코드 분석을 통한 의존성 주입(DI)이 되는 과정
·
⭐ Featured
의존성 주입(DI)에 대해 이론적으로는 알고 있지만, 실제로 내부에서 어떻게 동작하는지 이해하기는 쉽지 않았습니다. 이 글에서는 TypeDI 오픈소스 코드를 직접 분석하며 데코레이터와 컨테이너가 어떻게 의존성을 관리하는지 파헤쳐봅니다. NestJS 팀에서 DI 개념을 TypeDI에서 아이디어를 얻었다고 하여 TypeDI를 분석하게 되었습니다. 소스코드를 10번 이상 직접 따라치며 얻은 내용을 공유합니다. 평소에 당연하게 사용하던 @Injectable(), @Service() 같은 데코레이터들이 실제로는 어떤 원리로 작동하는지 핵심 로직 위주로 설명했습니다. 잘못된 내용이 있다면 댓글 부탁드립니다. 🙇🏻‍♂️ 💡 이 글은 다음과 같은 분들에게 도움이 됩니다.- TypeDI나 NestJS 같은 DI 프..
개발자 "잘" 말하고 "잘" 쓰기 + 꿀팁 추가
·
📂 Reflections/Work & Career
AI가 대두되는 요즘, 개발자에게는 코딩 실력만으로는 부족합니다.비즈니스를 이해하고 효과적으로 소통하는 능력이 더욱 중요해졌습니다.이런 종합적인 역량은 불필요한 의사소통 비용을 줄이고 효율적인 개발로 이어져,결국 회사와 개발자 본인의 가치를 높이는 핵심 요소가 됩니다.현대 개발자는 기술과 비즈니스의 균형을 맞추며, 이를 명확히 전달할 수 있어야 합니다. 아래의 글들을 통해 자신의 능력을 올리는데 도움이 되었으면 좋겠습니다. ⬇️ 꿀팁은 맨아래🌠 목차✅ SCQA를 생각하자 ✅ 조사를 제거하자✅ 듣는이를 고려하자 SCQA를 생각하자 SCQA란?상황(Situation) - 현재 상황/배경 설명ex: "AI 반환 실행 횟수 초과 에러 관련하여 문의 드립니다."복잡성(Complication) - 문제점/이슈 ..
(공식문서) NestJS Pipes와 queryString, Body가 데이터 처리하는 방법
·
📂 Backend Engineering
파이프는 @Injectable() 데코레이터로 주석이 달린 클래스로, PipeTransform 인터페이스를 구현합니다.   관련된 링크 : https://docs.nestjs.com/pipes  🌠 목차✅ 파이프의 일반적 사례✅ 파이프 바인딩과 적용✅ queryString과 body의 데이터 처리 차이점 파이프의 일반적 사례 transfromation: 입력 데이터를 원하는 형식(예: 문자열에서 정수로)으로 변환합니다.validation: 입력 데이터를 평가하여 유효하면 변경 없이 통과하고, 그렇지 않으며 예외를 던집니다.  두 경우 모두 컨트롤러 경로 핸들러에서 처리 중인 인수에 대해 작동합니다 파이프 작동 방식요청: 클라이언트가 서버로 요청을 보냅니다.파이프 실행: NestJS는 요청 데이터를 파이..
GitHub 라벨 또는 태그로 Azure API Container에 CI/CD 적용하기
·
📂 Troubleshooting & Ops
브랜치를 푸시하거나, 라벨을 붙이거나, 태그를 추가할 경우 GitHub Action을 이용하여 Azure API Container에 자동으로 배포하는 방법을 공유합니다. 저희 팀에서는 변형된 Git flow 전략으로 버전 관리를 하고 있습니다그중 QA 브랜치만 다루도록 하겠습니다. 🌠 목차✅ CI/CD에서 원하는 동작✅ GitHub Action workflow 생성✅ Azure 배포 프로세스의 이해 ⭐️⭐️⭐️✅ 만약 안되는 부분이 있다면✅ 회고 CI/CD에서 원하는 동작QA 브랜치에 PR을 만들고 "QA"라벨을 추가하면 자동 CI/CD가 되도록 구현하려고 한다. GitHub Action workflow 생성workflow 파일 코드name: Trigger auto deployment for..
NestJS Exception Filters 완벽 정리 (라이프사이클부터 내부 동작까지)
·
📂 Backend Engineering
NestJS Exception Filters 정리NestJS에는 애플리케이션 전역에서 처리되지 않은 모든 예외를 담당하는 예외 계층(Exception Layer) 이 내장되어 있습니다.애플리케이션 코드에서 예외가 처리되지 않고 발생하면, 이 계층이 이를 포착하여 사용자 친화적인 HTTP 응답을 자동으로 반환합니다.공식 문서: https://docs.nestjs.com/exception-filters🌠 목차NestJS 요청 라이프사이클Exception Filters의 주요 목적Exception Filters가 에러를 잡을 수 있는 이유예외 처리 방법들Exception Filters를 활용한 커스텀Filters vs PipesInterceptor 개념 정리Guard 개념 정리Pipes와 Query / Bo..
테스트 코드 현실 적용기: Unit Testing 책을 통한 인사이트와 실무 경험
·
📂 Backend Engineering
Unit Testing 책 리뷰와 실무 적용기들어가며"Unit Testing: Principles, Practices, and Patterns"(Vladimir Khorikov 저) 책을 읽고 실무에 적용하면서 느낀 점을 정리해보았습니다. 테스트 코드를 작성하는 여러 방법론과 실제 현장에서의 적용 과정에서 배운 점들을 공유하고자 합니다.(실은 읽다가 어려워서 누락된 내용도 꽤 많아요 ㅎㅎ이해하고 넘어가주세요)책의 핵심 내용테스트의 기본 원칙테스트는 비즈니스 시나리오를 반영해야 함테스트 가독성이 중요테스트가 구현이 아닌 동작을 검증해야 함단위 테스트의 정의작은 코드조각을 검증하고빠르게 수행하고격리된 방식으로 처리하는 자동화된 테스트고전파 vs 런던파격리 문제로 인한 두 학파의 차이고전파: 실제 의존성을 사..