SonarQube Hardcoded Credentials 잡는법 — 레거시 설정 4가지 패턴

SonarQube Hardcoded Credentials — S2068 룰 경고 화면

이 글에 등장하는 코드는 금융권 보안 정책상 실제 프로젝트 코드를 그대로 공개할 수 없어, 동일한 취약 패턴과 해결 흐름을 재현한 샘플로 대체했다. 클래스명·테이블명·경로 같은 식별자는 가상이지만, SonarQube가 잡는 데이터 플로우와 통과 조건은 실제 환경과 같다. 📑 목차 레거시에서 발견된 패턴 시도 1. 변수 분리 — 실패 시도 2. placeholder 치환 — 실패 시도 3. JNDI … 더 읽기

Vrew CapCut 비교 — 유튜브 롱폼 영상 제작 4개월 사용 후 솔직한 선택

Vrew CapCut 비교 — Vrew 텍스트 기반 자막 편집 화면

유튜브 채널을 운영하면서 편집 도구를 여러 개 써봤다. 결론부터 말하면 지금은 Vrew와 CapCut을 동시에 쓰고 있다. 하나로 통일하고 싶었는데 못 했다. 각각 잘하는 게 너무 달라서. 나는 시니어 사연과 경제 정보를 다루는 유튜브 채널을 운영하고 있다. 영상 길이는 대부분 10분 내외의 롱폼이다. 이런 콘텐츠는 쇼츠와는 제작 방식이 완전히 다르다. 나레이션 위에 자막이 정확하게 올라가야 하고, … 더 읽기

ElevenLabs Supertone 비교 — AI 음성 합성 3개월 사용 후 내린 선택

ElevenLabs Supertone 비교 — Supertone Play 에디터 메인 화면

유튜브 쇼츠 나레이션용 AI 음성을 찾다가 ElevenLabs와 Supertone을 둘 다 결제하게 됐다. 처음엔 ElevenLabs만 쓸 생각이었는데, 한국어 품질에서 미묘한 불만이 쌓이면서 Supertone을 병행하기 시작했다. 3개월 정도 양쪽을 오가면서 쓰다 보니, ElevenLabs Supertone 비교가 꽤 선명해졌다. 결론부터 말하면 지금은 Supertone을 메인으로 쓰고 있다. 근데 ElevenLabs를 완전히 끊은 건 아니다. 각자 잘하는 영역이 다르고, 나처럼 한국어 콘텐츠 … 더 읽기

SonarQube XXE 룰 S2755 해결 — 거래 전문 XML 파서 시도 3가지

SonarQube XXE — IDE 정적 분석 경고 화면

이 글에 등장하는 코드는 금융권 보안 정책상 실제 프로젝트 코드를 그대로 공개할 수 없어, 동일한 취약 패턴과 해결 흐름을 재현한 샘플로 대체했다. 클래스명·테이블명·경로 같은 식별자는 가상이지만, SonarQube가 잡는 데이터 플로우와 통과 조건은 실제 환경과 같다. 📑 목차 레거시 XML 파서 패턴 시도 1. setValidating(false) 시도 2. setExpandEntityReferences(false) 시도 3. external-general-entities만 disable 최종 해결 — feature … 더 읽기

SonarQube Path Traversal 룰 S2083 해결 — 파일 다운로드 API 시도 3가지

SonarQube Path Traversal — IDE 정적 분석 경고 화면

이 글에 등장하는 코드는 금융권 보안 정책상 실제 프로젝트 코드를 그대로 공개할 수 없어, 동일한 취약 패턴과 해결 흐름을 재현한 샘플로 대체했다. 클래스명·테이블명·경로 같은 식별자는 가상이지만, SonarQube가 잡는 데이터 플로우와 통과 조건은 실제 환경과 같다. 📑 목차 레거시 다운로드 API 패턴 시도 1. .. 문자열 제거 시도 2. 영문/숫자 화이트리스트 시도 3. getCanonicalPath startsWith 최종 … 더 읽기

SonarQube XSS 룰 S5131 해결 — 레거시 JSP에서 시도한 3가지 방법

SonarQube XSS — IDE 정적 분석 경고 화면

이 글에 등장하는 코드는 금융권 보안 정책상 실제 프로젝트 코드를 그대로 공개할 수 없어, 동일한 취약 패턴과 해결 흐름을 재현한 샘플로 대체했다. 클래스명·테이블명·경로 같은 식별자는 가상이지만, SonarQube가 잡는 데이터 플로우와 통과 조건은 실제 환경과 같다. 📑 목차 레거시 JSP/Servlet 패턴 시도 1. script 태그 블랙리스트 시도 2. HTML escape 자체 구현 시도 3. JSTL c:out … 더 읽기

SonarQube Command Injection 잡는법 — 레거시 배치에서 만난 S2076 시도 3가지

SonarQube Command Injection — IDE 정적 분석 경고 화면

이 글에 등장하는 코드는 금융권 보안 정책상 실제 프로젝트 코드를 그대로 공개할 수 없어, 동일한 취약 패턴과 해결 흐름을 재현한 샘플로 대체했다. 클래스명·테이블명·경로 같은 식별자는 가상이지만, SonarQube가 잡는 데이터 플로우와 통과 조건은 실제 환경과 같다. 📑 목차 레거시 배치에서 발견된 패턴 시도 1. 메타문자 블랙리스트 시도 2. 정규식 화이트리스트 시도 3. Runtime.exec(String[]) 최종 해결 — … 더 읽기

SonarQube SQL Injection 해결 — 레거시 JDK 21에서 만난 S3649 시도 3가지

SonarQube SQL Injection — IDE 정적 분석 경고 화면

이 글에 등장하는 코드는 금융권 보안 정책상 실제 프로젝트 코드를 그대로 공개할 수 없어, 동일한 취약 패턴과 해결 흐름을 재현한 샘플로 대체했다. 클래스명·테이블명·경로 같은 식별자는 가상이지만, SonarQube가 잡는 데이터 플로우와 통과 조건은 실제 환경과 같다. 📑 목차 레거시에서 발견된 취약 패턴 시도 1. 작은따옴표 escape 시도 2. 정규식 화이트리스트 시도 3. PreparedStatement 부분 적용 최종 … 더 읽기

Jump Desktop으로 iPad에서 Mac 원격 접속 3가지 방법 비교

iPad로 MacBook을 원격 제어하고 싶어서 여러 방법을 시도했다. 결론부터 말하면, Jump Desktop의 Fluid 프로토콜이 가장 만족스러웠다. Chrome 원격 데스크톱으로 시작해서 Tailscale + macOS 화면 공유를 거쳐, 최종적으로 Jump Desktop에 정착하기까지 꽤 많은 시행착오를 겪었다. MacBook M1 32GB를 메인 개발 머신으로 쓰고 있는데, 외출할 때 iPad 하나만 들고 나가서 작업을 이어가고 싶었던 게 시작이었다. 이 글에서는 … 더 읽기

로컬 LLM vs 클라우드 API 보안 비교 — 민감한 코드 안전하게 다루는 법

로컬 LLM — 설정 및 실행 결과 화면

요즘 개발할 때 LLM을 안 쓰는 사람이 드물다. 코드 리뷰, 리팩토링, 디버깅, 문서 작성까지 — Claude나 GPT에 코드를 붙여넣고 “이거 고쳐줘”라고 하는 게 일상이 됐다. 그런데 한 번쯤 생각해봐야 할 게 있다. 내가 보낸 그 코드, 대체 어디로 가는 걸까? 회사에서 내부 API 키가 박힌 설정 파일을 Claude에 붙여넣은 적이 있다. .env 파일 내용을 통째로 … 더 읽기