설계 문서를 테스트로 강제하기, spec.yaml과 spec-check
·
IT
설계 문서는 쓰는 날이 가장 정확하고 그 뒤로 매일 틀려간다. 코드는 바뀌는데 문서는 안 바뀌기 때문이다. 이 글은 개인 프로젝트의 설계 문서를 "읽는 문서"에서 "실패하는 테스트"로 바꾼 방법을 다룬다. 규격을 YAML 한 파일에 두고, 코드가 그 규격에서 벗어나면 명령 하나가 exit 1을 내게 했다. 문서를 성실하게 갱신하겠다는 다짐보다, 갱신하지 않으면 커밋할 수 없는 구조가 오래간다.문서와 코드가 어긋나면 어긋난 쪽을 알 수 없다자동화 파이프라인이 새벽에 조용히 실패했을 때 가장 먼저 여는 것은 설계 문서다. 어느 단계가 무엇을 받아 무엇을 내는지, 어떤 규칙이 발행을 막는지. 그런데 문서에 적힌 검수 규칙이 아홉 개이고 코드에는 열두 개라면, 문서를 읽어서는 원인을 못 찾는다. 코드를 읽어야 ..
AI 에이전트 보안, 권한을 어디까지 줄 것인가
·
IT
2025년 7월 Replit 에이전트가 코드 프리즈 중에 프로덕션 DB 를 지웠고, 2026년 4월에는 Cursor 에이전트가 한 SaaS 회사의 프로덕션 DB 와 백업까지 9초 만에 지웠다. 2026년 1월 솔라나 DeFi 프로젝트는 에이전트가 사람 승인 없이 토큰을 옮겨 2,700만 달러 이상을 잃었다. 이 사고들의 공통점은 모델이 똑똑하지 않아서가 아니다. 사람 자격증명을 에이전트에 그대로 물려줬다는 것이다. 이 글은 사고 다섯 건을 권한 관점에서 뜯어보고, 에이전트에 권한을 어디까지 줘야 하는지 답한다.사고 다섯 건, 전부 권한 설계 실패였다AI 인시던트 데이터베이스 1152번 사건이 시작이다. 2025년 7월 18일 SaaStr 창업자 제이슨 렘킨이 Replit 에이전트로 실험을 하던 중, 에이..
Playwright 고정 대기 대신 상태 대기를 써야 하는 이유
·
IT
브라우저 자동화 코드에서 wait_for_timeout(800) 같은 고정 대기는 "이 정도면 되겠지"라는 추측이다. 추측은 빠른 날엔 낭비고 느린 날엔 버그다. 이 글은 티스토리 에디터를 HTML 모드로 전환한 직후 본문을 넣었더니 내용이 통째로 사라졌던 일을 통해, 고정 대기가 어떻게 레이스 컨디션을 만들고 상태 대기가 왜 그것을 없애는지 다룬다.전환이 끝나기 전에 넣은 본문은 초기화와 함께 사라진다티스토리 에디터는 기본모드(TinyMCE)에서 HTML 모드(CodeMirror)로 바꿀 수 있다. 첫 구현은 이랬다.page.click("#editor-mode-layer-btn-open")page.wait_for_timeout(300)page.click("#editor-mode-html")page.wa..
오픈소스 라이선스 변경, 기업이 자꾸 바꾸는 이유와 개발자의 대응
·
IT
HashiCorp 가 Terraform 을 BSL 로 바꿨고, Redis 는 SSPL 로 갔다가 AGPL 로 돌아왔고, Elastic 도 같은 길을 먼저 걸었다. 잘 쓰던 라이브러리의 라이선스가 어느 날 바뀌는 일이 2023년 이후 반복되고 있다. 왜 이런 일이 계속 생기고, 의존성 목록에 이런 프로젝트가 있을 때 개발자는 뭘 해야 하나. 이 글의 답은 이렇다. 라이선스 변경은 배신이 아니라 클라우드 사업자가 만든 구조의 결과이고, 되돌린 사례가 둘이나 나온 지금 개발자가 볼 것은 라이선스 문구가 아니라 그 프로젝트를 누가 소유하는가다.바꾼 회사 셋, 되돌린 회사 둘HashiCorp 는 2023년 8월 10일 Terraform 1.6 부터 MPL 2.0 을 BSL 1.1 로 바꿨다. 소스는 볼 수 있지만..
Playwright intercepts pointer events 해결
·
IT
Playwright로 티스토리 글 관리 화면에서 글 하나를 삭제하려다 같은 오류를 여섯 번 만났다. … from subtree intercepts pointer events. 체크박스가 분명히 화면에 있는데 클릭이 닿지 않는다. 이 글은 이 오류가 무엇을 뜻하는지, 흔히 쓰는 force=True가 왜 이 경우엔 오히려 해로웠는지, 그리고 결국 무엇으로 해결했는지를 다룬다. 결론은 "가로채는 요소를 치우거나, 포인터를 쓰지 않거나" 둘 중 하나다.오류 메시지는 클릭 지점에 다른 요소가 있다는 뜻이다Playwright는 클릭 전에 몇 가지 조건을 검사한다. 문서가 "actionability checks"라 부르는 것으로, 요소가 보이는지, 움직임이 멈췄는지, 활성화됐는지, 그리고 포인터 이벤트를 받는지다...
AI 반도체 거품 논쟁, 매출 1조 달러와 캡엑스 6천억 달러 사이
·
IT
2026년 반도체 매출은 사상 처음 1조 달러를 넘고, 하이퍼스케일러 다섯 곳의 설비투자는 6천억 달러를 넘는다. 같은 해에 오픈AI CEO 는 투자자들이 과열됐다고 인정했고, 골드만삭스의 대표적 회의론자는 "언젠가는 돈을 벌어야 한다"고 했다. 거품인가 아닌가. 이 글의 답은 "어느 층에서 보느냐에 따라 다르다"이다. 반도체를 파는 층은 매출이 실현되고 있어 거품이 아니고, 그 반도체를 사는 층은 클라우드 매출보다 많은 돈을 쓰고 있어 회수 위험을 안고 있다. 두 층을 섞어 놓으니 논쟁이 끝나지 않는다.파는 쪽은 숫자가 실현되고 있다세계반도체무역통계기구(WSTS)의 2026년 봄 전망은 올해 반도체 시장이 90% 성장한 1조 5,100억 달러에 이르고, 메모리 부문만 약 250% 늘어 8천억 달러를 넘..
Playwright 파일 업로드, input 없는 사이트 처리법
·
IT
Playwright로 파일을 올릴 때 첫 선택지는 set_input_files()다. 그런데 어떤 사이트는 DOM에 이 아예 없다. 버튼을 누르는 순간 브라우저의 네이티브 파일 선택창이 뜨고, 자동화 도구는 그 창을 조작할 수 없어 멈춘다. 이 글은 티스토리 에디터가 정확히 이런 구조였고, expect_file_chooser()로 어떻게 넘겼는지를 다룬다. 핵심은 DOM에서 input을 찾는 것을 포기하고, 파일 선택창이 열리는 이벤트를 받는 것이다.DOM 어디에도 input type=file 이 없었다티스토리 에디터의 첨부 메뉴를 열면 사진, 파일, 슬라이드쇼 세 항목이 나온다. 사진(#attach-image)을 누르면 운영체제의 파일 선택창이 뜬다. 자동화라면 당연히 그 뒤에 숨은 을 찾아 set_i..
프론트엔드 프레임워크 2026, 시그널이 표준이 되고 논쟁은 끝났다
·
IT
2026년에 프론트엔드 프레임워크를 고르는 일은 5년 전과 다른 문제가 됐다. Angular, Vue, Svelte, Preact, Qwik 이 전부 시그널(signals) 기반 반응성으로 옮겨갔고, 시그널은 TC39 에서 자바스크립트 표준 제안으로 올라가 있다. 남은 예외는 React 하나이고, React 는 런타임 대신 컴파일러로 같은 문제를 풀기로 했다. 이 글의 주장은 하나다. 반응성 모델이 수렴한 이상 "어느 프레임워크가 빠른가"는 더 이상 선택 기준이 아니다. 남은 기준은 팀과 생태계다.시그널은 Solid 의 아이디어에서 모두의 기본값이 됐다시그널은 값이 바뀌면 그 값을 읽은 곳만 정확히 다시 계산하는 반응성 원시 타입이다. 가상 DOM 을 통째로 비교하는 대신 의존 관계를 추적한다. 이 모델..
티스토리 이미지 업로드 URL 만료, 서명 주소를 저장하면 안 되는 이유
·
IT
티스토리에 이미지를 자동으로 올리고 본문에 넣는 작업을 하다가, 업로드 직후 에디터에 삽입된 이미지 주소를 그대로 HTML에 박아 넣으면 몇 주 뒤에 깨질 수 있다는 것을 알았다. 주소에 만료 시각과 서명이 붙어 있었기 때문이다. 이 글은 그 주소의 정체와, 주소 대신 티스토리가 만든 마크업을 통째로 옮기는 방식으로 우회한 과정을 다룬다.업로드된 이미지 주소에는 만료 시각과 서명이 붙어 있다기본모드 에디터에서 사진 첨부로 PNG 하나를 올리자 편집 영역 iframe 안에 이런 마크업이 생겼다. src의 쿼리스트링을 보면 credential, expires, signature가 있다. expires=1790780399는 유닉스 시각으로 2026년 9월 말이다. 업로드한 날로부터 약 3주 뒤다. 클라우드 ..
주니어 개발자 채용이 줄었다는 말의 진짜 의미
·
IT
"AI 가 주니어 개발자 일을 대신하니까 신입을 안 뽑는다." 2026년 들어 가장 자주 듣는 말이고, 절반은 맞다. 숫자는 분명히 줄었다. 그런데 같은 시기에 AI 기업들은 엔지니어를 수백 명씩 뽑고 있고, 시니어 공고는 늘었다. 이 두 사실을 같이 놓고 보면 "대체"라는 말이 틀렸다는 게 드러난다. 줄어든 건 개발자 일자리가 아니라 배우면서 일할 수 있는 자리다. 그 차이가 왜 중요한지 데이터로 짚는다.줄어든 건 사실이다, 그것도 한국이 더 심하다미국부터 보자. 스탠퍼드 디지털경제연구소가 2026년 8월 12일 낸 업데이트에 따르면, AI 노출도가 높은 직군의 22~25세 고용은 2022년 11월부터 2026년 6월 사이 약 11% 줄었다. 같은 나이대의 저노출 직군은 같은 기간 10% 늘었다. 두 ..
카카오 로그인 세션이 브라우저 닫으면 풀리는 이유와 자동 재로그인
·
IT
티스토리 자동화에서 로그인은 자동화하지 않는 것이 정석이다. 카카오 계정 로그인은 캡차와 2단계 인증이 걸리고, 비밀번호를 스크립트에 넣는 순간 보안 사고의 씨앗이 된다. 그래서 사람이 한 번 로그인한 브라우저 프로필을 저장해 두고 재사용하는 방식을 택했는데, 다음 실행에서 어김없이 로그인 화면으로 튕겼다. 이 글은 그 원인이 티스토리 쿠키의 수명 설정에 있었다는 것, 그리고 비밀번호 없이 세션을 복구하는 방법을 다룬다.브라우저 프로필을 저장했는데 왜 로그아웃되는가Playwright의 launch_persistent_context는 크로미움 사용자 데이터 디렉터리를 지정해 브라우저를 띄운다. 쿠키, 로컬 스토리지, 로그인 상태가 그 디렉터리에 남는다. 처음에는 이걸로 충분하다고 봤다. 헤디드 브라우저를 ..
AI 코딩 에이전트 생산성, 90%가 쓰는데 왜 일정은 그대로인가
·
IT
전문 개발자의 90% 가 AI 코딩 에이전트를 매주 쓰고 68% 는 매일 쓴다. 그런데 팀의 배포 일정은 1년 전과 별로 다르지 않다. 도구는 분명히 좋아졌고 개발자는 빨라졌다고 느끼는데 조직 성과는 왜 그대로인가. 이 글의 답은 하나다. 코드 작성은 애초에 병목이 아니었고, 빨라진 코드 작성이 병목을 리뷰와 검증으로 옮겨놨을 뿐이다. 숫자로 그 과정을 따라간다.도입률은 이미 포화 상태다젯브레인스가 2026년 8월 낸 개발자 생태계 조사(2026년 5~7월, 전문 개발자 1만 5천 명)에서 AI 코딩 에이전트의 주간 사용률은 90%, 일간 사용률은 68% 였다. 도구별로는 Claude Code 가 39%(미국 47%)로 가장 많이 쓰였고, 깃허브 코파일럿은 1년 사이 29% 에서 21% 로, 커서는 18..