주니어 백엔드 개발자가 반드시 알아야 할 실무 지식을 읽고
모놀리식 서비스를 MSA로 옮기는 일을 맡으면서, AI에게 정확하게 일을 시키려면 백엔드 실무 감각부터 있어야 한 다는 걸 느꼈다. Spring과 Java로 쓰인 책을 Node.js 개발자의 눈으로 읽으며 타임아웃, 비동기 연동, 트랜잭션 아웃박스, 인증과 인가까지 재밌었던 토픽들을 코드와 함께 기록한다.
모놀리식 서비스를 MSA로 옮기는 일을 맡으면서, AI에게 정확하게 일을 시키려면 백엔드 실무 감각부터 있어야 한 다는 걸 느꼈다. Spring과 Java로 쓰인 책을 Node.js 개발자의 눈으로 읽으며 타임아웃, 비동기 연동, 트랜잭션 아웃박스, 인증과 인가까지 재밌었던 토픽들을 코드와 함께 기록한다.
RDB의 LIKE 검색은 왜 한계에 부딪히는가. 역색인, Analyzer, BM25, dis_max까지 — OpenSearch가 검색어 하나를 처리하는 전체 흐름을 백엔드 개발자의 눈으로 따라간다.
잘 돌던 SSE를 665줄 삭제 PR로 걷어내고 socket.io로 갈아탔다. 열등해서가 아니라 요구사항이 양방향 축을 넘어가서다. 전환의 이유, envelope 설계, refetch 타협, 유실 복구까지 코드로 정리했다.
토픽마다 EventSource를 하나씩 열던 초기 방식을 버리고, 프로젝트당 연결 1개로 멀티플렉싱하는 SSE를 설계했다. 도메인 무지 transport와 도메인 정책을 분리한 백엔드, 연결/해석 2계층으로 나눈 프론트엔드의 실제 코드.
실시간 채널이 필요해졌을 때 SSE와 WebSocket 중 무엇을 골라야 할까. 프로토콜 차이, 인증·재연결·유실 복구 관점의 비교, 그리고 선택 기준 세 가지를 정리했다.
도메인 노드, ResolveField, 3개의 레이어, 진입점과 도메인 이벤트 — REST 사고방식을 벗어나 그래프로 사고하기 위한 모든 것.
NestJS에서 DataLoader를 요청별로 격리하는 두 가지 패턴을 객체 수명 관점에서 비교합니다. REQUEST scope가 정답인 줄 알았던 저의 의문에서 시작했어요.
DataLoader의 배치 처리 원리, 이벤트 루프와의 관계, 중첩 resolver에서 어떻게 구조화하는지 구체적으로 정리했습니다.
relations JOIN, @ResolveField, DataLoader — 각 방법이 DB에 쿼리를 몇 번 날리는지, 왜 N+1이 발생하는지, GraphQL 철학에 맞는 해결 방향을 정리했습니다.
오늘은 node.js 백엔드 개발에서 널리 사용되는 세 가지 ORM - Prisma, Sequelize, TypeORM에 대해 비교해보려고 한다. 그리고 최종적으로 내가 Prisma를 선택한 이유에 대해서도 함께 이야기해볼 것이다. ORM(Object-Relationa