10장. 마치며 — 좋은 데이터 접근 코드란
10.1 우리는 어디까지 왔는가
이 책은 한 가지 질문에서 출발했다.
👉 “데이터베이스에 어떻게 접근할 것인가?”
그리고 그 답은 시간이 지나며 계속 바뀌어왔다.
- Raw Query → 직접 다루는 시대
- Query Builder → 안전하게 다루는 시대
- ORM → 객체로 다루는 시대
- 혼합 전략 → 상황에 맞게 다루는 시대
각 방식은 이전의 한계를 극복하기 위해 등장했고,
하나가 등장했다고 해서 이전 방식이 사라지지는 않았다.
👉 데이터 접근의 역사는 “대체”가 아니라 “누적”이다
10.2 기술이 아니라 선택이다
기술은 도구일 뿐이다.
- ORM이 만능은 아니다
- Raw Query가 구식은 아니다
- Query Builder가 어중간한 것도 아니다
각 방식은 서로 다른 강점을 가진다.
- ORM → 생산성
- Query Builder → 유연성
- Raw Query → 제어력
👉 좋은 코드는 “좋은 기술”이 아니라
👉 상황에 맞는 선택에서 나온다
10.3 추상화를 이해해야 추상화를 쓸 수 있다
ORM은 편리하다.
하지만 그 편리함이 모든 것을 가려준다는 뜻은 아니다.
- N+1 문제
- Lazy Loading
- 트랜잭션 범위
- 쿼리 실행 계획
이 모든 것은 추상화 “뒤”에 살아있다.
👉 추상화를 쓰는 것과 이해하는 것은 다르다
👉 추상화를 이해하지 못하면, 추상화는 오히려 부담이 된다
ORM 로그를 켜고
실제 실행되는 SQL을 한 번이라도 본 사람과
그렇지 않은 사람의 코드는 완전히 다르다.
10.4 구조는 변화를 위한 것이다
6장에서 다룬 계층 구조,
8장에서 다룬 트랜잭션 위치,
이 모든 것은 결국 한 가지를 위한 것이다.
👉 변화에 대응하기 위해서
- 테이블이 바뀌어도
- DB가 바뀌어도
- ORM이 바뀌어도
- 요구사항이 바뀌어도
영향을 받는 범위를 줄이는 것.
그것이 구조의 목적이다.
코드를 “나누기 위해서” 구조를 만드는 것이 아니다.
👉 바꾸기 쉽게 만들기 위해서 구조를 만든다.
10.5 결국 중요한 것
이 책에서 다룬 모든 주제는
결국 하나의 질문으로 수렴된다.
👉 “지금 내가 다루는 데이터에 가장 적합한 방식은 무엇인가?”
- 단순한 CRUD인가? → ORM이 어울린다
- 복잡한 통계인가? → Raw Query가 어울린다
- 동적 조건이 많은가? → Query Builder가 어울린다
- 페이지가 깊어지는가? → Cursor가 어울린다
- 여러 작업을 묶어야 하는가? → 트랜잭션이 필요하다
정답은 정해져 있지 않다.
👉 상황을 읽고 선택하는 능력이 핵심이다.
10.6 끝으로
기술은 계속 발전한다.
- 새로운 ORM이 등장하고
- 새로운 데이터베이스가 나오고
- 새로운 패턴이 만들어진다
하지만 변하지 않는 것이 있다.
👉 데이터를 다룬다는 것은
👉 데이터를 이해하는 일이고
👉 데이터를 이해하는 사람이 좋은 코드를 쓴다
도구는 바뀌어도
그 본질은 바뀌지 않는다.
이 책이 도구를 고르는 데에 머무르지 않고
👉 데이터를 보는 시야를 넓히는 데
도움이 되었기를 바란다.