우리 귀여운 오즈 보고 가세요
우리 귀여운 오즈 보고 가세요 오즈 오즈2
우리 귀여운 오즈 보고 가세요 오즈 오즈2
앞서 3편의 글에서 K8s CronJob 기반으로 실행하던 Spring Batch를 Argo Workflwos로 전환하는 과정에 대해 정리했고 실제 서비스도 전환한 지 약 반년 정도 지났다. 이번 글에서는 6개월 정도 실제로 운영해보며 예측하지 못해 문제가 있었는지, 어떤 장점이 있었는지, 아쉬운 부분 등이 있었는지에 대해 정리해보려고 한다. 1. 가장 걱…
타이밍 어택, 어디까지 막아야 할까? == 비교부터 프레임워크 CVE까지 아래는 어디서나 볼 법한 비교 코드다. if request_value != secret_value: raise ... if user: user.check_password(raw_password) 별 문제 없어 보인다. 그런데 이 코드는 응답 시간만으로 정보를 제공해 줄 수 있다. 왜…
AI 코딩 에이전트 git worktree 병렬 개발의 테스트 인프라, Testcontainers로 전환하기 - 2편 이전 1편은 worktree 병렬 에이전트 개발이 공유 테스트 인프라에서 격리가 안되고 있다는 문제점을 정의하고, 컨테이너 라벨에 worktree 식별자를 넣어 reuse의 해시 매칭을 격리 수단으로 뒤집는 설계까지 정리했다. 이제는 구현이…
AI 코딩 에이전트 git worktree 병렬 개발의 테스트 인프라, Testcontainers로 전환하기 - 1편 git worktree, Testcontainers, 멀티모듈 프로젝트에 대해 기본적으로 알고 있는 조건을 전제로 하고 있습니다. git worktree 혹은 Testcontainers 등에 대해 잘 모른다면 공식 문서나 검색해서 먼저 개념…
Chrome Local Overrides로 API 응답을 변경하고 UI를 테스트하는 방법 백엔드 API와 프론트엔드 UI 연동 작업이 완료되면 개발 환경에서 연동 결과를 확인하는 과정이 필요하다. 요구사항을 기준으로 개발을 진행하더라도, 요구사항 문서 작성자와 백엔드, 프론트엔드 개발자가 모두 다르기 때문에 같은 내용을 서로 다르게 해석 할 가능성이 있다.…
티비나 유튜브에 종종 나오곤 했던 치킨스톡. 항상 치킨스톡을 보면 실제로 먹어보지 못했기 때문에 무슨 맛인지 궁금 했었다. `도대체 어떤 맛이길래 저렇게 호들갑을 떠는거지??` 생각을 해오곤 했는데, 겨울 즈음 어쩌다 생각이나서 치킨스톡을 직접 구매해보았다. 인터넷 검색ㅎ 배뇌 `이금기 치킨스톡`이 제일 유명하길래 이 제품으로 구매했다. 이금기 치킨스톡 처…
그냥 살면서 인상 깊었던 일 등 이모저모 기록처럼 적어보려고 한다. 오늘은 출근길에 목격한 상황이다. 우선 직우차로 맨 앞에 경찰차 한 대가 정차해 있었고 차량 신호등은 초록불이었다. 좌회전, 직진, 우회전 모두 갈 수 있는 신호였다. 경찰차는 움직이지 않고 계속 서 있었었고 갓길에 비켜서 세운 것도 아니고, 주행선 한가운데에 서 있었다. 경찰차 뒤에 있는…
유출된 AWS AccessKey 무중단 교체하기: 출근길에마주한 IAM 유저 생성 시도 알림 오늘도 어김없이 집에 가고 싶은 평범한 출근길 중 슬랙 메시지가 왔다. 보통 출근 시간에 슬랙 메시지가 오는 일은 정말 드문데... "잉? 뭐지?" 라는 생각과 함께 메시지를 열어보았고, 메시지는 "심상치 않은데?" 내용이 있었다. 유저 생성 시도 슬랙 알림 (자세…
K8s 환경에서 발생한 Spring Boot 컨테이너 OOMKilled 추적기 - 3편: HikariCP 설정으로인한 Socket 메모리 누수 OOM 추적기 2편 글 마지막 부분에서 ' HikariCP 설정 문제로 인해 메모리 누수가 발생하는 것 같다 '고 작성했었고, 이 예상이 맞다면 다음 글을 이어 쓰겠다고 했었다. 슬프게도 그 불길한 예감은 틀리지 않…
K8s 환경에서 발생한 Spring Boot 컨테이너 OOMKilled 추적기 - 2편: K8s 팟 힙 덤프 추출과 논힙 메모리 추적 지난 1편에서 K8s 환경에서 운영 중인 Spring Boot 애플리케이션 컨테이너에 발생한 OOMKilled 초동 조치 작업에 대한 글을 작성 했었다. https://sanggi-jayg.tistory.com/entry/K…
K8s 환경에서 발생한 Spring Boot 컨테이너 OOMKilled 추적기 - 1편: OOM 레벨 구분과 QoS 확인 서비스 운영 중 모니터링 알람이 울려 확인해 보니, K8s 환경에서 구동 중인 Spring Boot 애플리케이션 컨테이너에서 OOM이 발생했다. 처음에는 단순히 '메모리가 부족한가?' 생각했지만, 원인을 파악하는 과정은 역시나 복잡했다.…
통신사별 DNS IP 리스트 (구글, SKT, KT, LG, Cloudflare) DNS IP 리스트 서비스 기본 DNS 서버 보조 DNS 서버 구글 (Google Public) 8.8.8.8 8.8.4.4 SKT 219.250.36.130 210.220.163.82 KT 168.126.63.1 168.126.63.2 LG 164.124.101.2 203.…
K8s CronJob 기반 Spring Batch, Argo Workflows로 전환하기 - 3편: Argo Workflows로 스케줄링하기 Argo Workflows 전체 데모 소스 코드는 https://github.com/sanggi-wjg/kotlin-spring-boot-demos/tree/main/spring-batch-argo-workflows…
K8s CronJob 기반 Spring Batch, Argo Workflows로 전환하기 - 2편: Spring Batch REST API 서버 설계 Argo Workflows 데모 기술 스택 Spring Boot 4.0 + Spring Batch 6 + Kotlin k3d MySQL, JPA Argo Workflows (HTTP Template, Cron…
K8s CronJob 기반 Spring Batch, Argo Workflows로 전환하기 - 1편: CronJob 문제와 스케줄러 선택 Argo workflows 1. 배경 현재 운영 중인 서비스에서는 k8s CronJob으로 Spring Batch를 사용 하고 있다. 백엔드 레포에서 크론잡 디렉토리에 CronJob values를 정의하면, CI 파이프라인…
구글 제미나이(Gemini), 데스크탑 앱처럼 쓰는 방법 - PWA 설치 가이드 ChatGPT나 Claude는 공식 데스크탑 앱을 제공하지만, 구글 제미나이(Gemini)는 아직 공식 데스크탑 앱이 없습니다. 따라서 매번 브라우저를 열고, 탭을 열거나 찾고 과정이 번거롭게 느껴진다면 PWA(Progressive Web App) 설치를 추천합니다. PWA로…
쿠버네티스 패턴 (빌긴 이브리암 , 롤란트 후스 저자) 후기 평소에 'k8s 공부해야지, 해야지' 마음만 먹고 있다가, 기회와 시간이 생겨서 드디어 책을 보고 공부를 하게 되었다. 사실 이 책으로 본 건 1년 전에 2025년 3월쯤인데, 최근 책상 정리를 하다 숨어있던 책을 발견하고는 지금에서야 블로그에 후기 글을 작성해 본다. 책 내용은 전반적으로 초보자…
터미널 오픈소스 도구 모음: btop, k9s, Mole, Sniffnet btop ( https://github.com/aristocratos/btop ) CPU, 메모리, 디스크, 네트워크 상태 및 프로세스 통계를 실시간으로 확인하는 터미널 리소스 모니터. Mole ( https://github.com/tw93/Mole ) 시스템 청소, 앱 삭제, 디스…
속도의 병목이 이동하고 있다 처음에는 Copilot과 Windsurf를 단순 코드 자동완성 용도로 사용했고, 이후에는 ChatGPT와 Claude에게 채팅으로 물어보며 개발을 해왔다. 근래 반년 동안은 JetBrains AI와 Claude Code만 사용하여 개발하고 있는데, 확실히 체감이 다르다. 단순 AI 자동완성 때와 달리, Code Agent를 본격…
내가 보려고 내가 정리한 Git Worktree 주요 명령어 # feature 브랜치로 새 worktree 생성 git worktree add ../my-feature my-feature # main 기준으로 새 브랜치를 만들면서 worktree 생성 git worktree add -b my-feature ../my-feature main # 특정 브랜치…
지난 1월 말, Ollama 에 흥미로운 기능이 추가 되었다. 아주 메일을 3통이나 보내더라. 출시된 기능은 바로 launch 명령어다. https://ollama.com/blog/launch 이번에 추가된 ollama launch는 Claude Code, OpenCode, Codex 와 같은 에이전트형 도구들을 로컬 또는 클라우드 모델과 연결해 실행할 수…
백엔드 관점에서 본 개인정보 보호법 및 안전성 확보조치 핵심 요약 본 문서는 개인정보 관련 법령 중, 시스템 설계 및 구현 단계에서 개발자가 반드시 숙지하고 적용해야 할 핵심 사항을 선별하여 정리했습니다. 법령의 복잡한 표현 대신 개발 실무 관점에서 이해하기 쉬운 형태로 재구성 하였으며, 법령의 구체적인 전문은 문서 하단의 [참고 섹션] 링크를 통해 확인하…
다중 DataSource 환경에서 장애 격리하기: LazyConnectionDataSourceProxy 활용기 배경 어떠한 사정으로 현재 사용중인 MySQL에서 추가로 Oracle DB를 연동해서 View Table을 통해 기능을 구현하게 되었다. 해당 Oracle DB는 Spring Batch 2개의 Job에서만 사용하고 있으며, 향후 Oracle 연동…
2025년 실서비스 보안 취약점 발견 후기 P사: 암호 평문 저장 및 요청에 평문 암호 사용 P사는 요식업 서비스로, 평소처럼 이용하던 중 우연히 잘못눌러서 네트워크 탭이 열렸고 또 그 요청이 우현히 눈에 보여서 보안 취약점을 발견하게 되었다. 회원 로그인 시 ID와 Password를 쿠키에 평문 상태로 저장을 했고 이 암호는 그대로 HTTP Request…
프로그래머의 뇌 (펠리너 헤르만스 지음 / 차건희 옮김) 최근 '프로그래머의 뇌'(펠리너 헤르만스 지음)라는 책을 읽으며 코드를 이해하는 과정에 대해 생각해보는 시간을 가졌다. 이 책은 개발자가 코드를 읽을 때 겪는 혼란을 인지 과학의 관점에서 분석하고, 뇌가 정보를 처리하는 방식을 설명을 하고 있다. 저자는 코드가 초래하는 혼란을 크게 세 가지로 분류하고…
[Mac] 맥 환경에서 Jetbrains 과거 버전 삭제 1. IDE 에서 삭제 2. 직접 삭제, 해당 경로 진입 후 삭제하려는 버전의 폴더 rm 명령어로 삭제
좋은 엔지니어 되기: 핵심 원칙과 실천 방안 이 글은 0x0001 블로그에 게시된 "좋은 엔지니어 되기" ( https://0x0001.cc/blog/good-engineer.md ) 글을 바탕으로 내용을 정리하고 재구성한 것입니다. 원문에는 보다 상세한 내용이 포함되어 있으니 참고하시면 좋습니다. 1. 엔지니어의 정의 엔지니어 는 과학적 원칙을 적용하여…
Jira와 GitHub 연동을 통한 태스크 상태 전환 및 버전 릴리스 자동화 Jira와 GitHub 연동을 통한 태스크 상태 전환 및 버전 릴리스 자동화 현재 회사에서는 Jira와 GitHub를 사용하고 있다. 이 글에서는 Jira와 GitHub 연동을 통해 어떻게 태스크 상태 전환과 릴리스 버전 관리를 자동화 하고 있는지 소개해 보려고 한다. 현재 회사에…
JVM Garbage Collection Tuning - Spring Boot GC 부하 테스트 Spring boot + Kotlin GC 튜닝 Spring Boot + Kotlin 을 기반으로 GC 튜닝을 실습하고 모니터링을 통해서 아웃풋이 어떻게 변화되는지 모니터링 해보자. 우선 스프링부트 사용시 가장 일반적으로 많이 사용될 스택과 코드 구성을 구성했다…