구글의 IBM화?
출처: Hacker News
Google는 자체 무게에 짓눌리고 있다 (Google의 IBM‑화?)
2026 년 5월 21일
예전엔 Google이 전체 수직 스택을 장악한 것이 천재적인 수작이라고 생각했다. TSMC 실리콘, TPU, 자체 데이터 센터, 독점 모델, 검색 엔진까지—이걸 다 갖춘 기업이 또 있을까? 아무도 없었다. 나는 그것이 무적의 요새라고 믿었다.
하지만 나는 완전히 틀렸다.
GCP 계정 차단 사태
수십억 달러 규모의 스타트업이 Google Cloud 위에서 운영되던 중 계정이 무작위로 삭제되었다. 사전 경고도 없고, 전화도 없으며, 담당자도 없었다. 휘리릭—사라졌다. 나에게는 그야말로 광기와도 같다. 수십억 달러 규모의 고객이 저조한 스팸 봇과 똑같은 자동화된 중지를 당한다니. B2B 비즈니스는 이렇게 사람들을 대한다면 완전히 망가진다. 엔터프라이즈 클라우드의 부의 열차는 바로 눈앞에 있는데, Google은 그 트랙 위에 서서 차에 치이길 바라고 있다.
B2C 및 인디 개발자
Hetzner, OVH 등 수십 곳에서 훨씬 저렴하게, 더 빠른 호스팅을 얻을 수 있다. GCP는 이상하게도 중간 지대에 머물러 있다. 대기업은 무작위 자동 차단 때문에 신뢰하지 못하고, 일반 사용자는 가격이 비싸고 복잡하다고 느낀다. 그래서 과연 무슨 의미가 있겠는가?
버려진 제품들의 묘지
Google은 거의 모든 서비스를 죽인다: Reader, Hangouts, Stadia, Inbox, Plus 등. 그 묘지는 거대하다. 이제 새로운 무언가를 발표해도 사람들은 더 이상 흥분하지 않는다. 모두가 장례식 카운트다운을 시작한다. 자신의 소프트웨어를 연쇄 살인범처럼 없애버리면 사용자와 신뢰를 쌓을 수 없다.
검색이 쓸모 없게 된다
그들은 우리의 콘텐츠—블로거, 오래된 포럼, 틈새 사이트—를 기반으로 거대한 제국을 만들었다. 우리가 웹을 검색할 가치가 있게 만든 것이다. 이제 그들의 AI 개요는 우리 정확한 답변을 스크랩하고, 하이퍼링크를 제거한 뒤 파란 상자 안에 다시 포장한다. 우리 집에 들어와서 우리 음식을 다 먹어버리고도 친구들을 소개시켜 주지 않는다. 바로 그런 느낌이다.
YouTube의 자멸
모두가 수익 차단을 싫어하지만, 진짜 문제는 저품질 AI‑생성 콘텐츠다. YouTube는 진정한 크리에이터와 수요·공급, 실제 시장이 있었기에 거대해졌다. 실제 공급자를 내쫓고 저품질 쓰레기로 대체한다면, 그 쓰레기를 올리는 사람은 누구든 될 수 있다. 방어벽은 완전히 사라진다. TikTok이 이미 이를 증명했다.
Android의 배신
나는 Android를 열렬히 좋아했다. 사이드로드, 선택권, 자유로움이 느껴졌기 때문이다. 이제 reCAPTCHA는 실제 전화번호를 요구하고, 사이드로드는 매년 더 어려워지며, Google은 iOS보다 못한 버전을 만들고 있다. 그리고 G Suite? UI 스크롤바를 일부러 부숴서 구독 취소 버튼을 찾지 못하게 만든다. 생각해 보면 포식적인 행위이며, 버그라기보다 선택처럼 느껴진다.
IBM과의 평행
사람들은 IBM이 “실패하기엔 너무 크다”고 말했다. 사실은 그렇지 않았다; 천천히 완전히 무의미해졌다가 한 번에 사라졌다. 현재 Google도 바로 그 상황이다. 즐거운 인디 엔지니어링 에너지는 사라졌다. 남은 것은 기업적이고 절박하며, 다소 슬프다.
Eric Schmidt가 최근 무대에서 야유를 받았다. 그는 거의 10년 동안 Google을 이끌었던 인물이다. 자신의 동문이 관객에게 야유를 받는다면, 브랜드는 단순히 손상되는 것이 아니라 독성이 된다. 그 독성은 아직 분기 실적에 드러나지는 않지만, 내부에서부터 텅 비게 만든다. 입소문이 사라지고, 컬트적 팬층도 사라진다. 돈은 여전히 흐르지만, 아무도 실제로 신경 쓰지 않는다.
Apple의 현명한 전략
투자할 좋은 아이템이 없다면, 자체 주식을 사들여라. 안전하게 플레이하라. 사람들이 진짜 원하는 것을 들어라(예: 제트 엔진 소리 같은 맥북 대신 저렴한 맥북). 매우 지루하지만, 전체 사용자 기반이 당신을 적극적으로 미워하게 만들지는 않는다.
Google은 반짝이는 모든 것을 쫓았다: AI 검색에 스폰서 슬롯을 넣는 등. Linus가 이를 비판했다. 그들은 지친 레몬에서 마지막 한 방울의 즙을 짜내는 반면, 핵심 제품은 햇빛에 썩어가고 있다.
마무리 생각
그들이 위로 떨어지는지 아래로 떨어지는지는 모르겠다. 광고 독점 수익이 영원히 그들을 떠받들 수도, 그렇지 않을 수도 있다. 전체 스택을 소유한다는 것은 사람들이 실제로 쓰고 싶어하는 무언가를 만들 수 있을 때만 의미가 있다. 현재 Google은 디지털 슬럼로드와 같다—기능은 있지만 착취적이고 차갑다. 수직 독점은 궁극적인 초능력이 될 터였지만, 이제는 죽은 짐이 되었고, 그 무게에 짓눌리고 있다.
어쨌든 나는 예전엔 Google을 정말 좋아했기에 큰 좌절감을 느낀다… 하지만 “악행을 저지 말라”는 말은 이제 먼 기억처럼 느껴진다.
const $upvoteButton = document.querySelector('.upvote-button');
const $upvoteCount = document.querySelector('.upvote-count');
fetch('/upvote-info/wcwxcdgXoAiGHNQECnqZ/')
.then(response => response.json())
.then(data => {
$upvoteCount.innerText = data.upvote_count;
if (data.upvoted) {
$upvoteButton.disabled = true;
$upvoteButton.style.color = "salmon";
$upvoteButton.ariaLabel = "Toasted";
$upvoteButton.title = "Toasted";
}
$upvoteButton.ariaLabel += ` (${data.upvote_count})`;
});
let moved = false;
let pageLoaded = Date.now();
document.addEventListener('touchmove', () => moved = true);
document.addEventListener('mousemove', () => moved = true);
document.querySelector('#upvote-form').addEventListener('submit', (e) => {
e.preventDefault();
if (moved) {
// ... (rest of the logic)
}
});
Here is the cleaned‑up markdown version of the snippet. The original structure and content have been preserved, with minor formatting fixes and the incomplete line commented out for clarity.
// Reset the title input field
document.querySelector('input[name="title"]').value = "";
// The following line was incomplete in the original source – it has been commented out
// if (Date.now() - pageLoaded ...
// Register event listeners once the page has fully loaded
window.addEventListener("load", () => {
// Skip tracking when the browser is being driven by automation (e.g., Selenium)
if (navigator.webdriver !== true) {
// Helper to send a hit with a given score
const sendHit = score => {
const params = new URLSearchParams({
blog: "zeroshot",
token: "wcwxcdgXoAiGHNQECnqZ",
// Only include the referrer if it isn’t the same site
referrer: document.referrer.includes("zeroshot.bearblog.dev")
? ""
: document.referrer,
title: "",
score: score
});
// Fire‑and‑forget image request to log the hit
new Image().src = `/hit/?${params.toString()}`;
};
// Record a hit the first time the user interacts via touch or mouse movement
document.addEventListener('touchmove', () => sendHit(100), { once: true });
document.addEventListener('mousemove', () => sendHit(100), { once: true });
}
});