Nest.js를 공부하면서 드디어 백엔드 개발을 경험해보았다.
프론트엔드 개발자로 JavaScript와 TypeScript는 익숙했어도
데이터베이스는 완전히 처음이었다.
솔직히 말하면, 데이터베이스라는 단어만 들어도 살짝 겁이 났다.
쿼리문? 테이블? 조인? 이런 단어들이 머릿속에서 맴돌았지만,
로직을 고민하며 씨름하는 게 재미있을 거라는 기대도 있었다.
이 글은 Nest.js를 배우면서 MySQL 쿼리문을 처음 접한 프론트엔드 개발자의 고군분투기를 정리한 것이다.
Query
MySQL을 설치하고, Nest.js에서 TypeORM으로 연결해보는 것까지는 그래도 순조로웠다.
TypeORM 덕분에 JavaScript 객체나 함수처럼 데이터를 다룰 수 있어서 프론트엔드 감각으로 접근이 가능했다.
DB를 어떤식으로 불러올지에 대한 고민은 Query문을 익히는 방법을 피할 수 없었다.
예를 들어, 유저 데이터를 조회하려고 작성한 첫 쿼리는 이랬다
SELECT * FROM users
이건 됐다.
근데 조건을 추가하려니 머리가 아파왔다.
게시물, 유저, 댓글을 모두 조합해서 리스트를 조합하고 싶었다.
몇 번의 삽질 끝에 완성한 쿼리
SELECT
post.id AS id,
post.title,
post.content,
COALESCE(
JSON_ARRAYAGG(
IF(comment.id IS NOT NULL, JSON_OBJECT(
'id', comment.id,
'content', comment.content,
'parentId', comment.parentId,
'author', JSON_OBJECT(
'id', commentUser.id,
'account', commentUser.account
)
), NULL)
), JSON_ARRAY()
) AS comments,
JSON_OBJECT(
'id', user.id,
'account', user.account
) AS author
FROM post
JOIN user ON post.authorId = user.id
LEFT JOIN comment ON comment.parentId = post.id AND comment.isDeleted = FALSE
LEFT JOIN user AS commentUser ON comment.authorId = commentUser.id
WHERE post.id = 1 AND post.isDeleted = FALSE
GROUP BY post.id;
두시간 정도를 난리치면서 짜낸 Query문이다.
백엔드 개발자들과 비교하면 볼품없겠지만 나름대로 원하는 조건을 모두 사용했다.
이제 다음엔 TypeORM으로 DB를 모델링하고 Response도 내 뜻대로 내보내는 연습을 해볼 생각이다.
느낀 점
Query문은 처음 접하는 만큼 복잡했지만 하나의 언어처럼 생각됐고
두려워 할만큼 어렵지는 않다고 생각했다.
당연히 쉽지는 않았지만 수많은 문서와 글들을 잘 조합해 직접 만들어볼 수 있다는 것
풀스택을 향해서...
'Nest.Js > Learn' 카테고리의 다른 글
프론트엔드 개발자의 백엔드 입문하기 (0) | 2025.04.20 |
---|