<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>
<title>이현수 블로그</title>
<link>https://www.hslee.world/blog</link>
<description>프론트엔드 개발 경험과 문제 해결 기록</description>
<language>ko-kr</language>
<atom:link href="https://www.hslee.world/rss.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Sun, 27 Sep 2026 00:00:00 GMT</lastBuildDate>
<item><title>Vue 3 emit 후 자식 컴포넌트에게 비동기 완료 통지하기</title><link>https://www.hslee.world/blog/vue3-emit-async-callback-notification</link><guid isPermaLink="true">https://www.hslee.world/blog/vue3-emit-async-callback-notification</guid><description>Vue의 단방향 emit 이벤트에서 부모의 비동기 처리 완료 시점을 자식에게 전달하는 Promise 콜백 패턴과 composable 타입 공유, 테스트 방법을 정리한다.</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>CSS 테이블 border가 셀 높이에 영향을 주는 이유</title><link>https://www.hslee.world/blog/css-table-border-collapse-cell-height</link><guid isPermaLink="true">https://www.hslee.world/blog/css-table-border-collapse-cell-height</guid><description>border-collapse: collapse 설정 시 테이블 외곽 테두리가 cell 계산 높이에 포함되는 W3C 스펙 동작과 border-collapse: separate로 셀 높이를 독립시키는 방법을 정리한다.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>하드웨어 가속 CSS 속성과 GPU Layer</title><link>https://www.hslee.world/blog/css-hardware-acceleration-and-gpu-layer-promotion</link><guid isPermaLink="true">https://www.hslee.world/blog/css-hardware-acceleration-and-gpu-layer-promotion</guid><description>CSS transform, opacity, will-change 속성을 활용해 GPU 하드웨어 가속을 유도하고 Compositor Layer 승격 원리와 메모리 최적화 방법 정리.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>브라우저 캐시는 언제 재사용되고 언제 304로 다시 확인할까</title><link>https://www.hslee.world/blog/browser-http-cache-revalidation</link><guid isPermaLink="true">https://www.hslee.world/blog/browser-http-cache-revalidation</guid><description>Vite로 빌드한 SPA를 S3와 CloudFront에 배포할 때 Network 패널의 메모리·디스크 캐시, Cache-Control, ETag, 304 응답을 기준으로 브라우저 캐시 동작과 배포 전략을 정리한다.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>Pinia Store를 구조 분해할 때 반응성을 유지하는 방법</title><link>https://www.hslee.world/blog/pinia-store-reactive-destructuring</link><guid isPermaLink="true">https://www.hslee.world/blog/pinia-store-reactive-destructuring</guid><description>Pinia Store의 state와 getter를 바로 구조 분해했을 때 값이 갱신되지 않는 이유와 storeToRefs로 반응성을 유지하는 방법을 정리한다.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>DOM 이벤트 버블링과 캡처링, 그리고 blur vs click 호출 순서 제어하기</title><link>https://www.hslee.world/blog/javascript-event-bubbling-capturing-and-ordering</link><guid isPermaLink="true">https://www.hslee.world/blog/javascript-event-bubbling-capturing-and-ordering</guid><description>자바스크립트 DOM 이벤트 전파 3단계(캡처링, 타겟, 버블링)와 blur vs mousedown/click 실행 순서 충돌 해결 방법 정리.</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>Stacking Context 의 원리</title><link>https://www.hslee.world/blog/css-z-index-and-stacking-context</link><guid isPermaLink="true">https://www.hslee.world/blog/css-z-index-and-stacking-context</guid><description>z-index: 9999를 부여해도 요소가 부모 레이어 뒤로 깔리는 원인인 쌓임 맥락(Stacking Context)의 생성 조건과 isolation: isolate를 활용한 트러블슈팅 정리.</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>Vue 3 emit 실행 순서와 props 갱신 타이밍</title><link>https://www.hslee.world/blog/vue3-emit-execution-order-nexttick</link><guid isPermaLink="true">https://www.hslee.world/blog/vue3-emit-execution-order-nexttick</guid><description>자식 컴포넌트에서 emit 직후 props를 조회했을 때 이전 값이 유지되는 이유와 Vue의 update queue 비동기 렌더링 동작 원리를 정리한다.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 Notification과 PendingIntent의 사용기</title><link>https://www.hslee.world/blog/android-notification-pendingintent-guide</link><guid isPermaLink="true">https://www.hslee.world/blog/android-notification-pendingintent-guide</guid><description>Notification 터치 시 PendingIntent를 이용한 액티비티 재사용(launchMode, Intent Flags) 및 Extra 데이터 갱신(FLAG_UPDATE_CURRENT, FLAG_IMMUTABLE) 정리.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>HTML dialog 태그와 popover API</title><link>https://www.hslee.world/blog/html-dialog-and-popover</link><guid isPermaLink="true">https://www.hslee.world/blog/html-dialog-and-popover</guid><description>브라우저 Top Layer에 띄우는 &lt;dialog&gt;와 Popover API의 차이점, modal/non-modal 구분 및 CSS Anchor Positioning을 활용한 팝업 UI 구현 가이드.</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>한글 IME 조합 이벤트</title><link>https://www.hslee.world/blog/html-input-korean-ime-focus-issue</link><guid isPermaLink="true">https://www.hslee.world/blog/html-input-korean-ime-focus-issue</guid><description>Windows 브라우저에서 한글 입력 조합 중 다른 항목을 클릭할 때 IME 조합 완료 이벤트가 뒤늦게 실행되며 포커스가 되돌아오는 원인과 isComposing 제어 해결법.</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>자바스크립트로 조작할 수 없는 Forbidden Header와 HttpOnly 쿠키</title><link>https://www.hslee.world/blog/forbidden-header-name-in-browser</link><guid isPermaLink="true">https://www.hslee.world/blog/forbidden-header-name-in-browser</guid><description>브라우저 자바스크립트에서 HTTP 헤더와 HttpOnly 쿠키 조작이 차단되는 이유, 보안 메커니즘, 확장 프로그램 API 등 현실적인 해결 대안을 정리한다.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>웹 타이포그래피 : 폰트의 실제 크기</title><link>https://www.hslee.world/blog/deep-dive-css-font-metrics-line-height-vertical-align</link><guid isPermaLink="true">https://www.hslee.world/blog/deep-dive-css-font-metrics-line-height-vertical-align</guid><description>font-size와 line-height가 실제로 그려지는 원리인 폰트 매트릭스(Ascender, Descender)를 이해하고, vertical-align의 동작 원리와 다국어 폰트(unicode-range) 적용 방법을 정리한다.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 인앱 업데이트 구현 (AppUpdateManager)</title><link>https://www.hslee.world/blog/android-in-app-update-and-testing-guide</link><guid isPermaLink="true">https://www.hslee.world/blog/android-in-app-update-and-testing-guide</guid><description>AppUpdateManager 기반 유연한(FLEXIBLE)/즉시(IMMEDIATE) 인앱 업데이트 구현</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 해상도와 픽셀 밀도(DPI/PPI)</title><link>https://www.hslee.world/blog/android-resolution-pixel-density-and-dp</link><guid isPermaLink="true">https://www.hslee.world/blog/android-resolution-pixel-density-and-dp</guid><description>해상도와 픽셀 밀도의 차이, 안드로이드 dp와 sp의 환산 방식, 밀도별 이미지 리소스를 구성하는 기준.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>Content-Disposition으로 브라우저 표시와 다운로드 제어하기</title><link>https://www.hslee.world/blog/content-disposition-browser-display-download</link><guid isPermaLink="true">https://www.hslee.world/blog/content-disposition-browser-display-download</guid><description>Content-Disposition의 inline과 attachment가 브라우저의 파일 처리 방식에 미치는 영향과 filename·filename* 사용법, 교차 출처에서 헤더를 읽을 때의 조건을 정리한다.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>브라우저 탭과 창 사이에서 상태와 메시지 동기화하기</title><link>https://www.hslee.world/blog/javascript-cross-tab-communication-methods</link><guid isPermaLink="true">https://www.hslee.world/blog/javascript-cross-tab-communication-methods</guid><description>localStorage의 storage 이벤트, BroadcastChannel, window.postMessage와 Service Worker 중계를 전달 범위에 따라 비교하고 로그아웃 상태를 여러 탭에 반영하는 방법을 정리한다.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>자바스크립트 Window 크기 측정과 getBoundingClientRect 좌표 계산</title><link>https://www.hslee.world/blog/javascript-window-size-and-element-position</link><guid isPermaLink="true">https://www.hslee.world/blog/javascript-window-size-and-element-position</guid><description>뷰포트·문서·스크린 크기 측정 속성의 차이점과 getBoundingClientRect를 활용한 요소의 상대·절대 좌표 계산법을 정리한다.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item>
<item><title>구형 스마트 TV 브라우저 es-toolkit 호환성 트러블슈팅</title><link>https://www.hslee.world/blog/object-hasown-estoolkit-crash</link><guid isPermaLink="true">https://www.hslee.world/blog/object-hasown-estoolkit-crash</guid><description>구형 스마트 TV 브라우저에서 특정 화면의 렌더링이 중단되는 샘플 에러를 바탕으로 ES2022의 Object.hasOwn 하위 호환성 문제와 유틸리티 라이브러리(es-toolkit vs lodash) 선택 시 고려사항을 정리한다.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item>
<item><title>Headroom 프록시로 Claude Code 토큰 사용량 24% 절감하기</title><link>https://www.hslee.world/blog/headroom-claude-code-token-saving</link><guid isPermaLink="true">https://www.hslee.world/blog/headroom-claude-code-token-saving</guid><description>로컬 프록시 도구 Headroom을 Claude Code에 연동하여 API 토큰 사용량을 압축하고, 실제 통계 데이터로 절감 효과와 내부 압축 방식(SmartCrusher, Kompress, CacheAligner 등)을 분석한다.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 웹뷰에서 다운로드 구현</title><link>https://www.hslee.world/blog/android-webview-blob-a-tag-download-issue</link><guid isPermaLink="true">https://www.hslee.world/blog/android-webview-blob-a-tag-download-issue</guid><description>프론트엔드에서 Blob과 Object URL을 이용해 a태그로 파일을 다운로드할 때, 안드로이드 웹뷰 환경에서 겪을 수 있는 한계와 대안을 알아본다.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item>
<item><title>Llama.cpp와 Qwen 3.5로 Claude Code 로컬 구축하기</title><link>https://www.hslee.world/blog/local-llm-claude-code</link><guid isPermaLink="true">https://www.hslee.world/blog/local-llm-claude-code</guid><description>M 시리즈 맥북 환경에서 llama.cpp와 Unsloth Qwen 3.5 모델을 사용해 API 비용 부담 없이 Claude Code 에이전트 코딩 환경을 구축하는 단계별 튜토리얼입니다.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item>
<item><title>SEO JSON-LD</title><link>https://www.hslee.world/blog/semantic-web-seo-json-ld-and-rss</link><guid isPermaLink="true">https://www.hslee.world/blog/semantic-web-seo-json-ld-and-rss</guid><description>구글 등 검색 엔진이 웹사이트의 콘텐츠를 구조적으로 이해하도록 돕는 JSON-LD(구조화된 데이터)의 개념과, 여전히 유효한 콘텐츠 구독 프로토콜인 RSS에 대해 알아본다.</description><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate></item>
<item><title>S3와 CloudFront에서 SPA 캐시를 분리해 배포 오류 막기</title><link>https://www.hslee.world/blog/s3-cloudfront-cache-control</link><guid isPermaLink="true">https://www.hslee.world/blog/s3-cloudfront-cache-control</guid><description>S3와 CloudFront로 SPA를 배포할 때 index.html·버전 파일·해시 에셋의 캐시 규칙을 분리해 구버전 번들 404와 업데이트 루프를 막는 방법을 정리한다.</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate></item>
<item><title>Vite에서 하나의 코드베이스를 서비스별 앱으로 나누기: 엔트리와 라우터 분리</title><link>https://www.hslee.world/blog/vite-monolith-build-split</link><guid isPermaLink="true">https://www.hslee.world/blog/vite-monolith-build-split</guid><description>여러 앱이 한 Vite 프로젝트에 섞여 있을 때, 빌드 대상별 엔트리와 라우터를 분리해 필요한 모듈만 번들에 포함하는 방법을 정리한다.</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate></item>
<item><title>Tailwind CSS v4: Vue/Svelte &lt;style&gt; 블록에서 @apply가 작동하지 않는 이슈</title><link>https://www.hslee.world/blog/tailwindcss-v4-vue-svelte-apply-directive-issue</link><guid isPermaLink="true">https://www.hslee.world/blog/tailwindcss-v4-vue-svelte-apply-directive-issue</guid><description>Tailwind CSS v4 베타 버전 사용 시 Vue와 Svelte의 컴포넌트 스타일 블록에서 @apply 디렉티브가 정상 동작하지 않는 이슈 현상을 정리한다.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate></item>
<item><title>3월 31일 axios 악성 코드 배포 사태와 대응 절차</title><link>https://www.hslee.world/blog/axios-compromised-incident-response</link><guid isPermaLink="true">https://www.hslee.world/blog/axios-compromised-incident-response</guid><description>널리 사용되는 axios 패키지에 원격 접근 트로이목마(RAT)가 포함된 사태의 개요와 대응 방법을 정리한다.</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate></item>
<item><title>TypeScript에서 type, interface, enum을 선택하는 기준</title><link>https://www.hslee.world/blog/typescript-type-interface-enum-choice</link><guid isPermaLink="true">https://www.hslee.world/blog/typescript-type-interface-enum-choice</guid><description>객체 계약에는 interface, 조합과 유니온에는 type을 쓰고, 런타임 상수는 enum과 as const 중 요구사항에 맞게 고르는 기준을 정리한다.</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate></item>
<item><title>같은 localhost 포트에서 이전 프로젝트가 열릴 때 Service Worker 정리하기</title><link>https://www.hslee.world/blog/service-worker-cache-on-reused-localhost-port</link><guid isPermaLink="true">https://www.hslee.world/blog/service-worker-cache-on-reused-localhost-port</guid><description>로컬 개발 중 같은 localhost 포트를 다른 프로젝트가 사용했을 때 이전 PWA의 Service Worker가 요청을 가로채 흰 화면이 보이는 원인과 DevTools에서 정리하는 방법을 설명한다.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate></item>
<item><title>앱 선택기에서 어떤 앱을 선택했는지 확인하기</title><link>https://www.hslee.world/blog/android-intent-chooser-selected-app-tracking</link><guid isPermaLink="true">https://www.hslee.world/blog/android-intent-chooser-selected-app-tracking</guid><description>안드로이드 Intent.createChooser 사용 시 BroadcastReceiver와 IntentSender를 활용해 유저가 선택한 앱의 패키지명을 수신하는 방법과 URI 분석의 한계 정리.</description><pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate></item>
<item><title>부모 컴포넌트의 초기화 완료 시점 감지하기 (Promise.withResolvers)</title><link>https://www.hslee.world/blog/260119-tracking-parent-the-time</link><guid isPermaLink="true">https://www.hslee.world/blog/260119-tracking-parent-the-time</guid><description>Vue에서 부모 컴포넌트의 비동기 초기화 작업이 완료된 시점을 자식 컴포넌트에게 안전하게 전달하는 방법을 알아봅니다. Promise.withResolvers를 활용한 패턴을 소개</description><pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate></item>
<item><title>Git 다중 계정 환경에서 SSH 인증과 커밋 작성자 관리하기</title><link>https://www.hslee.world/blog/git-multiple-accounts-ssh-commit-identity</link><guid isPermaLink="true">https://www.hslee.world/blog/git-multiple-accounts-ssh-commit-identity</guid><description>한 PC와 Android Termux에서 여러 GitHub 계정을 안전하게 구분하는 SSH 설정, 저장소별 커밋 작성자 설정, 이미 섞인 과거 커밋 이력 정리 방법을 정리한다.</description><pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate></item>
<item><title>max-height transition 딜레이</title><link>https://www.hslee.world/blog/251211-max-height-transition-delay</link><guid isPermaLink="true">https://www.hslee.world/blog/251211-max-height-transition-delay</guid><description>accordion 을 만들며 height 를 조정해 접고 펼침을 구현할 때, 애니메이션의 딜레이가 발생하는 이유와 헤결, 경험을 공유.</description><pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate></item>
<item><title>Google Apps Script로 간단한 서버 기능 만들기</title><link>https://www.hslee.world/blog/google-apps-script-simple-server</link><guid isPermaLink="true">https://www.hslee.world/blog/google-apps-script-simple-server</guid><description>별도 서버를 구축하지 않고 Apps Script의 doGet과 doPost로 HTTP 요청을 받아 Google Sheets에 저장하고 JSON으로 응답하는 작은 웹 API를 만든다.</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate></item>
<item><title>Vue3에서 같은 컴포넌트를 재사용하는 두 가지 라우트 갱신 문제</title><link>https://www.hslee.world/blog/vue3-route-component-reuse-data-refresh</link><guid isPermaLink="true">https://www.hslee.world/blog/vue3-route-component-reuse-data-refresh</guid><description>같은 상세 페이지에서 라우트 파라미터만 바뀔 때는 onBeforeRouteUpdate로 데이터를 다시 조회하고, 서로 다른 경로가 같은 목록 컴포넌트를 사용할 때는 RouterView key로 상태를 초기화한 과정을 정리한다.</description><pubDate>Fri, 28 Nov 2025 00:00:00 GMT</pubDate></item>
<item><title>EXIF(Exchangeable Image File Format) 데이터</title><link>https://www.hslee.world/blog/250819-exif</link><guid isPermaLink="true">https://www.hslee.world/blog/250819-exif</guid><description>웹과 안드로이드에서 사진의 EXIF 데이터를 다루는 방법. 브라우저의 보안 특성 상 웹에서는 EXIF 를 의도적으로 누락시킴.</description><pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate></item>
<item><title>node patch 버전이 두자리 넘어가며 생긴 로직 문제</title><link>https://www.hslee.world/blog/node-patch-version-yarn-semver</link><guid isPermaLink="true">https://www.hslee.world/blog/node-patch-version-yarn-semver</guid><description>빌드 후 package.json 의 버전이 자기 멋대로 변경이 됐다. yarn 1.22 버전에서 sementic version 규칙을 따르면서 버전을 자체적으로 변경한 것.</description><pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 Camera2 API를 활용한 문서 촬영 가이드라인 화면 개발 및 이미지 회전(Exif) 트러블슈팅</title><link>https://www.hslee.world/blog/android-camera2-guideline-rotation</link><guid isPermaLink="true">https://www.hslee.world/blog/android-camera2-guideline-rotation</guid><description>안드로이드 Camera2 API로 업무 문서 촬영용 커스텀 카메라 화면을 구현하면서 정리한 미리보기 파이프라인, 가이드라인 오버레이, 줌, JPEG_ORIENTATION, GPS EXIF, ImageReader 안정화 방식을 설명한다.</description><pubDate>Mon, 11 Aug 2025 00:00:00 GMT</pubDate></item>
<item><title>word-wrap 이 overflow-wrap 로 변경됨</title><link>https://www.hslee.world/blog/word-wrap-overflow-wrap</link><guid isPermaLink="true">https://www.hslee.world/blog/word-wrap-overflow-wrap</guid><description>지금까지 사용했던 word-wrap 이 overflow-wrap 으로 변경되었다.</description><pubDate>Mon, 11 Aug 2025 00:00:00 GMT</pubDate></item>
<item><title>갤럭시 S21 갤러리 다중 선택 오류와 호환성 해결 방법</title><link>https://www.hslee.world/blog/samsung-gallery-webview-multiple-selection-issue</link><guid isPermaLink="true">https://www.hslee.world/blog/samsung-gallery-webview-multiple-selection-issue</guid><description>안드로이드 웹뷰에서 파일 선택 시 삼성 갤러리의 다중 선택(Multiple Selection)이 동작하지 않는 원인을 파악하고, ACTION_GET_CONTENT와 삼성 비공식 옵션으로 해결하는 방법을 정리한다.</description><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate></item>
<item><title>말줄임 시 text-overflow 와 white-space, width의 관계</title><link>https://www.hslee.world/blog/250724-interact-text-overflow-white-space-width</link><guid isPermaLink="true">https://www.hslee.world/blog/250724-interact-text-overflow-white-space-width</guid><description>텍스트의 말줄임을 구현할 때 text-overflow 와 white-space 사이의 상호작용을 알아봄. 몇 줄에서 줄이느냐에 따라서도 달라진다. flex 박스 모델에서 자식 요소가 빠져나가는 현상과 min-width-0 의 역할 알아보기</description><pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 SDK 15 (Target 35) 업데이트 대응 및 Edge-to-Edge UI, IME 인셋 처리</title><link>https://www.hslee.world/blog/android-sdk-15-edge-to-edge</link><guid isPermaLink="true">https://www.hslee.world/blog/android-sdk-15-edge-to-edge</guid><description>안드로이드 15 (Target SDK 35) 업데이트 시 필수적으로 알아야 할 변경 사항과 Edge-to-Edge UI 강제화로 인해 발생하는 하이브리드 웹뷰 키보드 가림 버그 및 인셋 처리 해결책을 공유한다.</description><pubDate>Wed, 02 Jul 2025 00:00:00 GMT</pubDate></item>
<item><title>Github Environments 환경변수 관리</title><link>https://www.hslee.world/blog/github-env</link><guid isPermaLink="true">https://www.hslee.world/blog/github-env</guid><description>Github Environment 에서 환경변수를 관리하고, 배포 시 환경을 지정해서 CICD를 수행한다.</description><pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate></item>
<item><title>Merge와 Squash Merge는 언제 사용할까</title><link>https://www.hslee.world/blog/when-to-use-merge-or-squash-merge</link><guid isPermaLink="true">https://www.hslee.world/blog/when-to-use-merge-or-squash-merge</guid><description>짧은 feature 브랜치, 장기 브랜치, 커밋 추적과 되돌리기 방식에 따라 GitHub Merge와 Squash Merge를 선택하는 기준을 정리한다.</description><pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate></item>
<item><title>Nuxt Content v2에서 MDC 커스텀 컴포넌트 렌더링하기</title><link>https://www.hslee.world/blog/nuxt-content-v2-custom-components</link><guid isPermaLink="true">https://www.hslee.world/blog/nuxt-content-v2-custom-components</guid><description>Nuxt Content v2의 Markdown AST에 CardLink 같은 Vue 컴포넌트를 매핑하고, MDC의 슬롯·인라인 props·YAML props 중 유지보수하기 좋은 작성 방식을 정리한다.</description><pubDate>Fri, 28 Mar 2025 00:00:00 GMT</pubDate></item>
<item><title>tailwindcss color 프리셋 적용하기</title><link>https://www.hslee.world/blog/tailwindcss-color-preset-with-theme</link><guid isPermaLink="true">https://www.hslee.world/blog/tailwindcss-color-preset-with-theme</guid><description>Tailwind CSS의 테마 커스터마이징 방법을 소개하며, 사용자 정의 색상 변수를 설정하여 디자인을 개선하는 기술을 다룬다. 다양한 테마 설정과 CSS 변수 사용 사례를 통해 원하는 스타일을 구현하는 방법을 배울 수 있다.</description><pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate></item>
<item><title>css variables 에 투명도 조절 (color-mix 함수)</title><link>https://www.hslee.world/blog/color-mix-hash-value-transparency</link><guid isPermaLink="true">https://www.hslee.world/blog/color-mix-hash-value-transparency</guid><description>CSS 변수의 투명도를 조절하는 방법을 자세히 다루고, color-mix 함수를 통해 배경에 효과적인 투명도를 적용하는 기법을 소개한다. 다양한 컬러 코드 및 변수를 활용하여 디자인에 깊이를 더하는 방법을 배울 수 있다</description><pubDate>Wed, 26 Mar 2025 00:00:00 GMT</pubDate></item>
<item><title>tailwindcss 4.0.8 버전 storybook 호환성 오류</title><link>https://www.hslee.world/blog/tailwindcss-storybook-version-error</link><guid isPermaLink="true">https://www.hslee.world/blog/tailwindcss-storybook-version-error</guid><description>tailwindcss 와 storybook 의 호환성 문제 해결 과정. 특정 버전의 문제로 핫픽스 적용.</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 LifecycleOwner is attempting to register while current state is RESUMED 크래시 해결</title><link>https://www.hslee.world/blog/android-lifecycleowner-register-illegalstateexception</link><guid isPermaLink="true">https://www.hslee.world/blog/android-lifecycleowner-register-illegalstateexception</guid><description>registerForActivityResult 호출 시 생명주기가 STARTED/RESUMED 상태로 진입해 발생한 IllegalStateException 크래시 원인과 onCreate 동기 등록 해결법.</description><pubDate>Fri, 24 Jan 2025 00:00:00 GMT</pubDate></item>
<item><title>npm 의존성 설치 문제 애플 실리콘에서의 Rollup 패키지 (npm ERR notsup Unsupported platform for rollup-darwin-arm64)</title><link>https://www.hslee.world/blog/npm-rollup-os</link><guid isPermaLink="true">https://www.hslee.world/blog/npm-rollup-os</guid><description>npm의 의존성 설치 실패 문제. @rollup/rollup-darwin-arm64 패키지가 애플 실리콘에서만 설치 가능하다. Windows 및 Linux 환경에서의 설치 불가 원인. optionalDependencies의 사용 방법.</description><pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate></item>
<item><title>Nuxt Pinia 시작하기 + getActivePinia 에러</title><link>https://www.hslee.world/blog/nuxt-pinia-get-active-pinia</link><guid isPermaLink="true">https://www.hslee.world/blog/nuxt-pinia-get-active-pinia</guid><description>Nuxt 프로젝트에서 Pinia를 설정하고 사용하는 방법을 안내. Pinia 설치, Nuxt 설정 파일에 추가하는 방법, 스토어 생성을 포함하여 컴포넌트에서의 사용 예시. 서버 사이드 렌더링(SSR) 설정 및 일반적인 오류 해결 방법.</description><pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate></item>
<item><title>Vitest Fake Timer 로 setInterval 테스트 중 다음 루프가 실행 안되는 경우</title><link>https://www.hslee.world/blog/vitest-timer-flushpromise</link><guid isPermaLink="true">https://www.hslee.world/blog/vitest-timer-flushpromise</guid><description>setInterval 로 돌아가는 로직을 vitest 의 Fake Timer 를 사용해 테스트. fetch 함수가 포함된 interval 로직은 flushPromise 없이 다음 루프가 돌지 않음.</description><pubDate>Tue, 14 Jan 2025 00:00:00 GMT</pubDate></item>
<item><title>Vue 3 props에서 Proxy와 객체 참조 이해하기</title><link>https://www.hslee.world/blog/vue3-props-proxy-object-reference</link><guid isPermaLink="true">https://www.hslee.world/blog/vue3-props-proxy-object-reference</guid><description>props 배열을 복사했는데도 부모 상태가 함께 바뀐 이유를 Proxy, 객체 참조 공유와 전개 연산자의 얕은 복사 범위로 설명한다.</description><pubDate>Mon, 30 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>defineModel 과 defineProps 의 차이</title><link>https://www.hslee.world/blog/vue3-definemodel-vs-props</link><guid isPermaLink="true">https://www.hslee.world/blog/vue3-definemodel-vs-props</guid><description>Vue 3.4 defineModel 매크로와 기존 props/emit 기반 v-model 구현의 내부 상태 처리 차이를 비교하고, 부모 미바인딩 시 local ref 할당으로 조건문 분기에서 발생하는 오동작 원인과 해결 방법을 정리한다.</description><pubDate>Tue, 04 Jun 2024 00:00:00 GMT</pubDate></item>
<item><title>Vue3 ESLint 로컬 커스텀 룰 만들기</title><link>https://www.hslee.world/blog/vue3-eslint-flat-config-local-rule</link><guid isPermaLink="true">https://www.hslee.world/blog/vue3-eslint-flat-config-local-rule</guid><description>Vue3 프로젝트 내부에 ESLint 로컬 플러그인을 구성하고, AST Visitor로 defineEmits의 update 이벤트를 검사하는 커스텀 룰과 RuleTester 테스트 작성법.</description><pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate></item>
<item><title>모바일앱 딥링크 구성</title><link>https://www.hslee.world/blog/android-deeplink-url-scheme-and-app-links</link><guid isPermaLink="true">https://www.hslee.world/blog/android-deeplink-url-scheme-and-app-links</guid><description>Custom URL Scheme, App Links, Universal Links, Deferred Deep Link의 개념과 차이를 다루고, host 일치 문제, assetlinks.json 배포 위치, signingReport 키 추출, 카카오톡 딥링크 우회 처리까지 정리한다.</description><pubDate>Fri, 26 Apr 2024 00:00:00 GMT</pubDate></item>
<item><title>Vite vue + Github Pages 페이지 구축</title><link>https://www.hslee.world/blog/vite-vue-and-github-pages</link><guid isPermaLink="true">https://www.hslee.world/blog/vite-vue-and-github-pages</guid><description>기존 vue-cli 를 사용한 vue 프로젝트로 github pages 를 구축했는데, 대세에 따라 vite 로 변경하기로 했다.</description><pubDate>Tue, 26 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>Postman 으로 FCM 알림 테스트하기</title><link>https://www.hslee.world/blog/postman-fcm-test</link><guid isPermaLink="true">https://www.hslee.world/blog/postman-fcm-test</guid><description>FCM 알림을 테스트하는 간단한 방법. Postman 을 비롯한 curl 기반 HTTP 요청 프로그램으로 테스트하기.</description><pubDate>Sat, 16 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>안드로이드 노티피케이션 번들 데이터 최신화 Android Notification Bundle Data</title><link>https://www.hslee.world/blog/android-noti-bundle</link><guid isPermaLink="true">https://www.hslee.world/blog/android-noti-bundle</guid><description>안드로이드 노티피케이션을 터치해 액티비티를 진입할 때 onCreate 에서 전달받는 데이터가 원치 않는 값으로 들어온다. 해결 방법을 찾아보자.</description><pubDate>Thu, 07 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>Vue Code Spliting 간단히 알아보기 (+ Prefetch)</title><link>https://www.hslee.world/blog/vue-prefetch</link><guid isPermaLink="true">https://www.hslee.world/blog/vue-prefetch</guid><description>Vue 프로젝트의 Code Spliting 이 어떻게 작동하는지와 webpack prefetch 옵션 에 대해서 간략한 설명.</description><pubDate>Fri, 05 Aug 2022 00:00:00 GMT</pubDate></item>
<item><title>Vue2, Vue3 Reactivity 비교 - Vue2 편</title><link>https://www.hslee.world/blog/vue2-reactivity</link><guid isPermaLink="true">https://www.hslee.world/blog/vue2-reactivity</guid><description>Vue2 Vue3 의 Reactivity 비교. Vue2 Reactive에 대한 설명. VNODE, Watcher, Dependency, ref, reactive, update, vue hook 에 대해서 전반적인 설명.</description><pubDate>Tue, 12 Jul 2022 00:00:00 GMT</pubDate></item>
<item><title>Github.io + Vue3 로 블로그 만들기</title><link>https://www.hslee.world/blog/making-blog-githubio-vue3-1</link><guid isPermaLink="true">https://www.hslee.world/blog/making-blog-githubio-vue3-1</guid><description>Github.io 와 Vue3 를 활용해서 블로그를 시작. SPA를 prerendering 하여 개별 페이지를 생성하고, 메타태그를 추가. 구글 검색 엔진에 등록할 사이트맵 자동 생성. 마크다운을 html 로 변환. Google Analytics 도입으로 방문자 수 체크.</description><pubDate>Fri, 24 Jun 2022 00:00:00 GMT</pubDate></item>
</channel></rss>