Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.

가끔 찾아오는 날 것 그대로의 SQL 악몽
“기본적인 SELECT랑 WHERE 필터링은 전혀 문제없는데… INNER JOIN이랑 LEFT JOIN이 나타나는 순간 제 뇌가 블루스크린을 띄워버려요.”
주니어 개발자들의 멘토링을 하다 보면 이 똑같은 고해성사를 정말 자주 듣습니다. 그리고 저도 이해합니다! 최신 ORM(Prisma나 ActiveRecord 등)이 워낙 많은 일을 대신 해주는 덕분에, 일상적인 프론트·백엔드 작업 흐름에서 “Raw SQL”을 작성할 일은 거의 없어졌으니까요.
하지만 어느 날 그 끔찍한 날이 옵니다. 매우 구체적인 분석 보고서를 뽑아야 하는 날이죠. “이번 달 모든 사용자의 수익을 가져오되, 비활성화된 계정은 제외하고 그걸 로그 테이블이랑 조인해.” 기억에 의존해 쿼리를 작성하고 실행 버튼을 누르는 순간 자비 없고 차가운 Syntax error near 'LEFT JOIN' 이라는 에러를 맞게 됩니다. 그리고 20분 동안 열어둔 홑따옴표 하나나 실수로 들어간 쉼표 하나를 찾으면서 시간을 날리죠. 정말 지치는 일입니다.
레고 블록처럼 쿼리 조립하기
“구문 규칙은 싹 무시하고 데이터 간의 관계를 잇는 ‘실제 논리’에만 집중할 수 있는 도구가 있으면 어떨까?”
그 생각에서 이 비주얼 SQL 빌더가 탄생하게 되었습니다. 드롭다운을 몇 번 클릭해서 테이블과 열을 선택하기만 하면, 보이지 않는 곳에서 완벽한 형식의 버그 없는 쿼리가 자동으로 구성되는 놀이터를 원했습니다.
제가 가장 자랑스럽게 생각하는 기능은 바로 즉각적인 미리보기입니다.
드롭다운을 INNER JOIN에서 LEFT JOIN으로 토글하는 데 0.1초도 안 걸려서 오른쪽에 있는 SQL 블록이 업데이트됩니다. 코드가 즉각 반응하는 걸 지켜보는 것은 엄청난 피드백 루프를 만듭니다. 클릭한 즉시 결과를 눈으로 보게 되기 때문에, 이 기능 덕분에 어쩌면 이 도구가 SQL을 학습하는 데 있어서 놀랍도록 효과적인 교육용 샌드박스로 은밀히 변모하게 된 것일지도 모릅니다.
아주 솔직히 말해서, 지금은 제가 그 누구보다 이 도구에 푹 기대고 있을지도 모릅니다. 단 한 명의 개발자라도 쉼표 하나 때문에 머리를 쥐어뜯는 데서 구해낼 수 있다면, 이 도구를 만든 매 순간순간들이 의미 있었다고 단언합니다.
‘못 쓰는 것’보다 ‘못 읽는 것’을 줄이고 싶었다
만들면서 깨달은 점은, 초보자가 막히는 지점은 ‘SQL을 못 쓰는 것’보다 ‘자신이 쓴 SQL을 다시 읽지 못하는 것’이라는 사실이었습니다. 감으로 써서 어쩌다 동작은 하는데 왜 동작하는지 설명하지 못하는 상태, 이게 가장 무섭습니다.
그래서 이 빌더는 단순히 SQL을 뱉어내는 데 그치지 않고, “어느 테이블을 기점으로, 어떤 키로 조인하고, 어떻게 걸렀는지”가 조작의 흐름으로 남도록 만들었습니다. 나온 SQL을 포매터에 통과시켜 보면 나중에 다시 읽을 수 있죠. “아, 내가 이런 쿼리를 짰구나.” 쓰기 전에 먼저 읽을 수 있게 되는 것, 그 입구가 되었으면 합니다.
자주 묻는 질문
SQL 초보자도 사용할 수 있나요?
오히려 초보자에게 적합합니다. 드롭다운으로 테이블과 조인 키를 선택하면 대응하는 SQL이 오른쪽에 실시간으로 표시됩니다. 출력을 보면서 직접 손을 움직여 보는 편이 문법책을 읽는 것보다 훨씬 빨리 와닿습니다.
INNER JOIN과 LEFT JOIN이 늘 헷갈립니다.
두 테이블 모두에 존재하는 행만 원하면 INNER JOIN, 왼쪽 테이블을 반드시 남기고 싶으면 LEFT JOIN입니다. 다만 LEFT JOIN한 오른쪽 테이블의 열을 WHERE로 거르면 결국 INNER JOIN과 같은 결과가 되는 함정에 주의하세요.
생성한 SQL을 그대로 프로덕션에서 쓸 수 있나요?
표준 SELECT 문을 생성합니다. 실행 전에 포매터로 확인하고 테이블 이름과 조건을 점검하면 안전합니다. 데이터베이스 방언 고유의 함수나 구문이 필요할 때는 생성 후 직접 추가하세요.
입력한 테이블 이름이나 조건은 외부로 전송되나요?
아니요. 쿼리 조립은 전부 브라우저 안에서 완결됩니다. 프로덕션의 테이블·열 이름을 입력해도 외부 서버로 전송되지 않습니다.