전체 글 215

iOS WKWebView에서 특정 컴포넌트의 캐싱 문제

현상: 애니메이션이 적용된 컴포넌트에서만 실시간 변경되는 값이 ui상에 갱신이 안됨. ios 웹뷰에서만 발생하며 PC에서나 혹은 AOS에서는 발생하지 않음. 또한 애니메이션 컴포넌트 이외에서는 갱신 잘 됨.원인 추정: iOS WKWebView에서 transform 애니메이션이 적용된 레이어가 초기 페인트 스냅샷을 캐싱해 리페인트가 누락되는 Safari/WebView 버그 패턴. 구체적으로 내 상황에서는 animation: translateY가 걸린 BannerWrapper라는 컴포넌트에 포함된 텍스트가 같은 레이어로 묶여 갱신 불가.대응: transform이 걸린 컴포넌트에 key={갱신할 값}를 부여해 값 변경 시 노드를 재생성. 이렇게 해서 리렌더 시 캐시된 레이어 대신 새로 그리게 해 iOS에서 값..

WEB 2026.01.20

Gemini 함수 호출(Function Calling) 이해하기

개요LLM은 원래 자유로운 텍스트를 생성한다. 하지만 JSON 등 구조화된 형식을 요구해도 가끔 흐트러진다.이를 해결하기 위해 함수 호출(Function Calling)을 사용한다.모델은 스스로 답을 쓰는 대신, “이건 내가 직접 말할 게 아니라 함수 호출이 필요하다”는 요청을 반환한다. 예를 들자면, 내가 ‘치킨 먹고 싶다’고 말하면 LLM이 그걸 주문서(JSON)로 바꿔 배달앱에 보내고, 앱이 구조화된 답을 준다. 그러면 다시 LLM이 ‘프라이드 치킨 1마리, 25분 뒤 도착 예정’이라 예쁘게 말해주는 것이 함수 호출이다. 동작 흐름 사용자 입력 → 모델은 함수 호출 요청 반환 외부 API 실행 → 결과 획득 결과를 모델에 전달 → 최종 자연어 응답 생성즉, 모델은 자연어 ↔ 구조화 요청(JSON)..

프로그래밍 2025.08.20

cURL로 Vertex AI의 Gemini API 사용하기

이 글에서는 cURL 명령어를 통해 Vertex AI의 Gemini API와 직접 상호작용하는 방법을 살펴볼 것이다. cURL이란?cURL은 "Client URL"의 줄임말로, 터미널이나 스크립트 환경에서 HTTP 요청을 직접 보낼 수 있는 명령줄 도구이다.웹 브라우저가 주소창에 URL을 입력해 서버와 통신하는 것처럼, cURL은 개발자가 코드 없이도 API와 직접 대화할 수 있는 인터페이스 역할을 한다. GET, POST, PUT, DELETE 같은 HTTP 메서드를 지원하며, 인증 토큰 전달, 헤더 설정, 파일 업로드·다운로드까지 가능하다.쉽게 말해, “브라우저 없이 서버와 채팅할 수 있는 전문 도구”라고 보면 된다.→ 이 글에서 사용하는 curl -X POST ... 명령어는 바로 cURL을 통..

프로그래밍 2025.08.19

tsconfig 설정과 빌드 타겟, 그리고 Vite·Webpack 환경에서의 차이

“tsconfig의 target이나 lib를 바꿨는데, 왜 빌드 결과물 문법은 그대로일까?”이 글은 target과 lib이 실제로 어떤 역할을 하는지, 문법 변환과 타입(표준 API) 제공이 어떻게 다른지,그리고 Vite(Esbuild 기반)와 Webpack(Babel 기반) 환경에서 이 설정들이 어떻게 다르게 작동하는지를 정리해 봤다. 1. tsconfig.json의 역할tsconfig.json은 타입스크립트 컴파일러(tsc)가 코드를 어떻게 해석하고 어떤 기준으로 타입 검사를 할지 가이드를 준다.그래서 이 파일은 Vite나 Webpack 환경에서 빌드된 JS 결과물에는 영향을 거의 주지 않는다. compilerOptions 몇 가지:target: 타입 검사 기준과 기본 표준 API 세트를 결정l..

WEB 2025.08.13

모델이 똑똑하게 말하게 만드는 프롬프트 작성법

최근에 Google Study Jam x Women IT's 스터디를 진행하게 되었다.[AI] Gemini 기초 및 애플리케이션 개발 적용 스터디나는 이 스터디에 신청했고, 운 좋게 선발되어서 스터디에 참여할 수 있었다.앞으로 스터디를 진행하면서 배운 내용을 정리할 예정. 프롬프트 엔지니어링 권장사항(Prompt engineering best practices)“unfancy”한 프롬프트 엔지니어링 하는 방법Be concise: 간결하게 작성하기Be specific, and well-defined: 구체적이고 명확하게 정의하기Ask one task at a time: 한 번에 하나의 작업만 요청하기Improve response quality by including examples: 예시를 들어 대답 품..

프로그래밍 2025.08.06

개발자를 위한 Neovim 가이드 - 2. 추천 플러그인

시작하기 전에 NERDTree: 파일 탐색기 fzf.vim: 빠른 검색 LSP 관련 플러그인 Git 관련 플러그인 vim-fugitive gitsigns.nvim 테마 관련 플러그인 folke/tokyonight.nvim 마지막으로 시작하기 전에모든 플러그인은 1편 글에서 소개한 것처럼 vim-plug를 사용한다면 아래 단계로 설치 가능하다. 1. .vimrc의 플러그인 목록에 다음 코드 추가Plug '플러그인명' * 플러그인명은 github.com/ 뒤에 붙은 부분을 넣어준다. (ex. https://github.com/preservim/nerdtree → 플러그인 명: preservim/nerdtree) 2. 저장&종료 후 파일 다시 열어서 :PlugInstall로 설치 NERDT..

개발환경 2025.08.06

개발자를 위한 Neovim 가이드 - 1. 시작하기

목차Vim에 익숙해지기Neovim 소개Neovim 설치Vim 플러그인 관리하기Vim에 익숙해지기터미널을 열고 vimtutor ko 를 입력하면 Vim에 대한 기본 조작을 배울 수 있는 문서가 열린다.Vim의 기본 조작법은 이 튜토리얼을 통해 익힐 수 있다. Neovim 소개 단순 텍스트 편집만 사용할 거라면 Vim을 써도 충분하다.하지만 프로그래밍할 예정이라면 Vim만으로는 어려움이 있다. Vim을 확장한 버전인 Neovim이란 것이 있는데, 겉으로는 Vim과 비슷하지만 내부 구조에는 차이가 있다.차이점 중 하나는 Neovim에는 내장된 LSP가 있어서 별도로 설정하지 않아도 자동완성, 오류 표시, Go to Definition 등이 가능하다. Vim을 쓴다면 이를 위해 복잡하게 외부 플러그인을 설정해..

개발환경 2025.06.05

맥북) 특정 폴더로 파일 추가하면 해당 파일 이름을 규칙에 맞게 자동 변경

따로 개인 블로그를 만들면서 생긴 필요성인데, 게시글 소스 파일 이름을 작성한 날짜(=현재날짜)를 yymmdd 형식으로 사용하고 있었다.노션에 글을 작성하고 export 한 파일을 글감 소스 폴더에 넣어주고 현재 날짜고 이름을 변경하는 작업을 수동으로 해주고 있었는데, 이게 은근히 번거롭다.특히 현재 날짜로 파일 이름을 변경하는 게 귀찮아서 자동화할 수 있을까 찾아보았다.맥북에서 제공하는 automator 기능을 이용하면 쉽게 구현할 수 있었다. (나는 삽질하느라 쉽지 않았지만..) 1. Automator 실행⌘ + Space → “Automator” 검색 후 실행 2. 문서 유형 선택폴더 적용 스크립트를 선택해서 새로운 작업을 만들 것이다.참고로 작업흐름은 폴더를 계속 감시하고 있는 게 아닌,..

개발환경 2025.05.08

맥북 자동 음소거 기능 만들면서 발생했던 문제 해결 과정

맥북에서 와이파이 연결 시 음소거가 되지만, 이어폰이 연결되었을 때는 예외처리가 되는 기능을 만들었다.이 기능을 추가하면서 겪은 문제가 있었는데 문제를 해결하는 과정에서 알게 된 것들이 있어 정리한다. *과정을 담은 글:맥북에서 특정 와이파이 연결 시 자동 볼륨 조절 스크립트(+이어폰 연결 시엔 예외처리) [문제 발견]CURRENT_OUTPUT 을 가져오는 부분을 처음에는 아래처럼 썼었다.CURRENT_OUTPUT=$(SwitchAudioSource -c) 그런데 테스트를 해보니 이어폰을 꼈는데도 음소거가 되어버렸다.스크립트 파일을 터미널에서 직접 실행해 봤을 때는 정상 동작해서 음소거가 안되었다.혹시 출력 장치 이름을 잘못써서 그런가 싶어서 확인을 위해 아래 코드를 스크립트 파일에 추가해서 터미널에서..

개발환경 2025.05.07

맥북에서 특정 와이파이 연결 시 자동 볼륨 조절 스크립트(+이어폰 연결 시엔 예외처리)

재택근무 시에는 맥북 음량을 켜놓는데 사무실 출근하면 음소거를 해야 하기 때문에 번거롭다.hammerspoon으로 이를 구현할 수 있다고 듣긴 했는데, 이거 하나 때문에 hammerspoon을 설치하긴 싫어서 버티고 있다가, 스크립트로 자동화해볼까 싶어서 해보기로 했다. [특정 와이파이 연결 시 음소거] 1. 설정하려는 Wi-Fi 이름 확인하기networksetup -getairportnetwork en0 위 명령어로 볼륨 조절이 필요한 Wi-Fi의 이름을 확인한다.Wi-Fi 이름을 알고 있다면 스크립트에 직접 적으면 되지만, 내가 설정하려는 Wi-Fi는 이름이 길어서 직접 치기 번거로워 명령어로 확인해 주었다.Current Wi-Fi Network: your-wifi-name 위처럼 your-wif..

개발환경 2025.04.24