Backend10개의 글

주니어 백엔드 개발자가 반드시 알아야 할 실무 지식을 읽고

모놀리식 서비스를 MSA로 옮기는 일을 맡으면서, AI에게 정확하게 일을 시키려면 백엔드 실무 감각부터 있어야 한다는 걸 느꼈다. Spring과 Java로 쓰인 책을 Node.js 개발자의 눈으로 읽으며 타임아웃, 비동기 연동, 트랜잭션 아웃박스, 인증과 인가까지 재밌었던 토픽들을 코드와 함께 기록한다.

Backend

LIKE '%검색%'을 버리고 OpenSearch를 뜯어봤다

RDB의 LIKE 검색은 왜 한계에 부딪히는가. 역색인, Analyzer, BM25, dis_max까지 — OpenSearch가 검색어 하나를 처리하는 전체 흐름을 백엔드 개발자의 눈으로 따라간다.

Backend

실시간 3편 — SSE를 걷어내고 WebSocket으로 갈아탔다

잘 돌던 SSE를 665줄 삭제 PR로 걷어내고 socket.io로 갈아탔다. 열등해서가 아니라 요구사항이 양방향 축을 넘어가서다. 전환의 이유, envelope 설계, refetch 타협, 유실 복구까지 코드로 정리했다.

Backend

실시간 2편 — SSE로 실시간을 구현했다

토픽마다 EventSource를 하나씩 열던 초기 방식을 버리고, 프로젝트당 연결 1개로 멀티플렉싱하는 SSE를 설계했다. 도메인 무지 transport와 도메인 정책을 분리한 백엔드, 연결/해석 2계층으로 나눈 프론트엔드의 실제 코드.

Backend

실시간 1편 — SSE와 WebSocket은 무엇이 다른가

실시간 채널이 필요해졌을 때 SSE와 WebSocket 중 무엇을 골라야 할까. 프로토콜 차이, 인증·재연결·유실 복구 관점의 비교, 그리고 선택 기준 세 가지를 정리했다.

Backend

GraphQL— 나는 그동안 URL이 /graphql인 REST를 만들고 있었다

도메인 노드, ResolveField, 3개의 레이어, 진입점과 도메인 이벤트 — REST 사고방식을 벗어나 그래프로 사고하기 위한 모든 것.

Backend

DataLoader를 매 요청마다 5개 만드는데, REQUEST scope는 안 썼다

NestJS에서 DataLoader를 요청별로 격리하는 두 가지 패턴을 객체 수명 관점에서 비교합니다. REQUEST scope가 정답인 줄 알았던 저의 의문에서 시작했어요.

Backend

DataLoader는 어떻게 N+1을 없애는가

DataLoader의 배치 처리 원리, 이벤트 루프와의 관계, 중첩 resolver에서 어떻게 구조화하는지 구체적으로 정리했습니다.

Backend

GraphQL N+1: 쿼리 비용과 올바른 설계 방향

relations JOIN, @ResolveField, DataLoader — 각 방법이 DB에 쿼리를 몇 번 날리는지, 왜 N+1이 발생하는지, GraphQL 철학에 맞는 해결 방향을 정리했습니다.

Backend

Node.js ORM 비교: Prisma, Sequelize, TypeORM 그리고 내가 Prisma를 선택한 이유

오늘은 node.js 백엔드 개발에서 널리 사용되는 세 가지 ORM - Prisma, Sequelize, TypeORM에 대해 비교해보려고 한다. 그리고 최종적으로 내가 Prisma를 선택한 이유에 대해서도 함께 이야기해볼 것이다. ORM(Object-Relationa

Backend