비밀번호 저장은 소프트웨어에서 진짜 정답이 존재하는 몇 안 되는 영역이다. 그 정답은 이미 공개되어 있고, 꾸준히 갱신되며, 돈 한 푼 들지 않는다. 그런데도 가장 꾸준히 틀리는 영역이기도 하다. 틀린 답들이 한때는 옳은 답이었고, 그 뒤로 아무도 다시 들여다보지 않았기 때문이다. 실패는 좀처럼 특별하지 않다. 2012년에 통하던 조언을 따라 2016년에 만들어진 시스템이 여전히 돌아가고, 여전히 로그인을 받아들이고 있으며, 그 함수를 작성한 사람이 회사를 떠난 뒤로는 아무도 그 코드를 열어보지 않았을 뿐이다. 한 가지만 가져간다면: Argon2id를 쓰고,...
백엔드 개발
백엔드 개발에 관한 기사, 가이드 및 튜토리얼. 개발자와 기업을 위한 실용적인 정보를 제공합니다.
기술 문서는 아주 구체적이고 예측 가능한 방식으로 실패합니다. 누군가 한가한 2주 동안 아주 많은 양을 써 놓고, 그러는 사이 시스템이 바뀌고, 아무도 갱신하지 않고, 1년이 지나면 그 문서는 확신에 찬 어조로 틀린 내용을 말하고 있습니다. 그 시점부터는 없느니만 못합니다. 문서를 믿은 사람이 이미 성립하지 않는 정보에 근거해 움직이기 때문입니다. 흔한 대응은 더 많이 쓰자는 압박이고, 그것은 같은 실패를 더 빨리 불러올 뿐입니다. 쓸모 있는 대응은 더 적게 쓰고 무엇을 쓸지 고르는 것입니다. 병목은 쓰는 노력이 아니라 유지하는 노력이기 때문입니다. 어떤 문서가 존재...
가동률 SLA는 약속처럼 보이지만 환불 규정처럼 작동합니다. 공급자는 이 점을 잘 알고 있습니다. 고객은 그렇지 못한 경우가 많아서, 가용성을 샀다고 믿으며 서비스 수준 협약에 서명합니다. 그러나 실제로 산 것은 가용성이 아니라, 그것을 받지 못했을 때 돌려받는 작은 할인입니다. 그것이 반드시 나쁜 거래라는 뜻은 아닙니다. 다만 대부분의 사람이 맺고 있다고 생각하는 거래와는 다른 거래이고, 그 차이는 시스템이 멈추고 누군가 계약서에 뭐라고 적혀 있는지 묻는 순간에 드러납니다. 쓰리 나인은 거의 완벽하게 들리지만 한 달에 43분의 다운타임을 허용합니다. 포 나인은 4분...
소규모 팀에서 재해 복구는 대개 아무도 열어 본 적 없는 문서 안의 한 줄로 끝납니다. 백업은 켜져 있습니다, 라는 문장입니다. 그 문장은 사실이지만 어떤 질문에도 답이 되지 못합니다. 되찾은 데이터가 얼마나 오래된 것인지, 복원에 얼마나 걸리는지, 지금까지 누가 한 번이라도 끝까지 복원을 해 본 적이 있는지에 대해 아무것도 말해 주지 않기 때문입니다. 백업을 가지고 있다는 사실과 실제로 복구할 수 있다는 사실 사이의 간격에서 대부분의 장애는 심각한 사고로 바뀝니다. 존재하고, 최신이며, 한 번도 복원해 본 적 없는 백업은 아직 가설일 뿐입니다. 그리고 그 가설을 처...
API 버전 관리 논쟁은 대개 엉뚱한 쪽에서 시작됩니다. 버전 번호를 어디에 둘 것인가 하는 문제 말입니다. 이 주제 전체에서 결과에 가장 영향이 작은 결정이 바로 그것입니다. 정작 중요한 것은 어떤 변경이 애초에 새 버전을 요구하는가이며, 대부분의 팀은 이 지점에서 안이한 쪽으로 판단을 그르칩니다. 순수하게 추가만 했다고 믿는 것을 배포했는데, 어느 클라이언트가 깨집니다. 쓸 만한 사고 모형은 이렇습니다. 여러분의 API는 호출자가 무엇에 기댈 수 있는지에 대한 약속입니다. 합리적인 호출자가 기대고 있던 무언가를 무효로 만든다면 그 변경은 호환성을 깨는 변경입니다....
데이터베이스 성능 작업은 보통 누군가 더 큰 인스턴스를 제안하는 것으로 시작해서, 페이지를 열 때마다 쿼리 하나가 400만 행을 순차 스캔하고 있었다는 발견으로 끝납니다. 제약은 처음부터 하드웨어가 아니었습니다. 제약은 실행 계획이었습니다. 이 패턴은 충분히 일관되게 반복되므로 기본 가정으로 삼을 만합니다. 애플리케이션이 느리고 데이터베이스가 바쁘다면, 원인은 거의 언제나 소수의 특정 쿼리이지 전반적인 용량 부족이 아닙니다. 그리고 서버를 키우는 일은 테이블이 다시 커지는 데 걸리는 시간만큼만 문제를 가려 줍니다. 무엇이든 바꾸기 전에 먼저 측정하십시오. 짐작으로 고...
Cloudflare Queues는 모든 서버리스 애플리케이션이 언젠가는 마주치는 문제를 해결합니다. 사용자가 기다릴 이유가 없는 작업을 유발하는 요청이 들어온다는 문제입니다. 확인 메일 발송, 업로드된 이미지 리사이즈, 레코드를 외부 서비스로 동기화하는 처리 같은 것들입니다. 전통적인 서버라면 그 일을 백그라운드 워커 프로세스에 넘기면 됩니다. 그런데 Workers에는 넘길 프로세스 자체가 없습니다. 흔히 쓰이는 우회책들은 보기보다 나쁩니다. 요청 안에서 그대로 처리하면 사용자가 메일 발송 업체의 응답을 기다리게 됩니다. 다른 Worker로 요청만 던지고 기다리지 않...
Cloudflare Hyperdrive는 아주 구체적이고 전혀 화려하지 않은 문제 때문에 존재합니다. 200개 도시에서 실행되는 Worker가 한 도시에 있는 단일 Postgres 데이터베이스와 대화하면, 그 데이터베이스 바로 옆에 놓인 서버 한 대에서 같은 쿼리를 던질 때보다 느립니다. 조금 느린 정도가 아닙니다. 흔히 몇 배씩 느리며, 그 이유는 쿼리를 어떻게 작성했는지와는 아무 상관이 없습니다. 서버리스 애플리케이션이 굼뜨게 느껴질 때 나오는 반사적인 반응은 쿼리 플래너를 탓하거나 인덱스를 하나 더 추가하는 것입니다....
Cloudflare Workers와 AWS Lambda는 모두 서버리스 컴퓨트 플랫폼이지만 출발점이 다릅니다. Lambda는 방대한 AWS 생태계 안에서 확립된 서버리스 표준이고, Workers는 낮은 지연 시간과 글로벌 분산을 위해 만들어진 엣지 네이티브입니다. 2026년에는 둘 다 훌륭하며, 올바른 선택은 워크로드와 기존 스택에 달려 있습니다. 이 가이드는 정말 중요한 관점에서 Cloudflare Workers vs AWS Lambda를 비교합니다. 요약(TL;DR) Workers는 경량 V8 isolates 위에서 엣지에서 실행되며, cold start가 거의 ...
Cloudflare Workers 를 사용하면 서버를 관리하지 않고도 사용자와 가까운 엣지에서 백엔드 코드를 실행할 수 있습니다. API의 경우 거의 0에 가까운 콜드 스타트, 글로벌 분산, 긴밀하게 통합된 스토리지의 조합 덕분에 Workers는 2026년에 매력적인 플랫폼입니다. 이 가이드는 Cloudflare Workers API가 어떻게 구성되는지, 그리고 전통적인 백엔드와 무엇이 다른지 설명합니다. 요약(TL;DR) Cloudflare Workers는 코드를 엣지의 Cloudflare 글로벌 네트워크에서 실행하므로, 요청이 사용자와 가까운 곳에서 거의 0에 가...