[DB 모르는 백엔드 탈출기 Ep.2] 테이블은 객체가 아니다.
·
DB 모르는 백엔드 탈출기
1. 들어가며JPA를 쓰면 객체만 잘 설계하면 DB도 잘 작동할 줄 알았다.User와 Post를 양방향으로 참조하고,@OneToMany, @ManyToOne을 붙이면 자바 객체처럼 자유롭게 탐색하고 저장할 수 있을 줄 알았다. 그런데…양방향 연관관계를 걸었더니 INSERT가 두 번 나간다?객체는 참조만 했는데, DB는 JOIN이 필요하다고 한다?fetch 전략을 eager로 바꿨더니 SELECT가 줄긴 했지만… 쿼리 내용이 이상하다?이 모든 문제의 출발점은 하나다.“테이블은 객체가 아니기 때문이다.”2. 객체와 테이블은 어떻게 다른가?♟️ 객체의 세계public class User { private Long id; private String name; private List posts =..
[DB 모르는 백엔드 탈출기 Ep.0] JPA가 다 해주는 거 아니었나요?
·
DB 모르는 백엔드 탈출기
1. 들어가며“나는 백엔드 개발자인데… DB를 잘 몰랐다.” 아니, 정확히 말하자면 “몰라도 된다”고 생각했다. Spring Boot를 쓰면 JPA가 알아서 다 해주는 줄 알았다.Entity만 잘 만들면 쿼리가 자동으로 나가고,CRUD는 그냥 되며,join도 fetch 하나면 다 해결되는 줄 알았다. …정확히 말하면그게 해결되는 건지조차 잘 몰랐다.2. 문제 발생 어느 순간부터 이상한 일들이 생기기 시작했다. ❌ 객체는 참조로 연결되어 있는데, DB에서는 join이 필요하다는 말이 이해되지 않았다.❌ @OneToMany를 썼더니 insert가 두 번 나간다는 말도 처음엔 무슨 말인지 감이 오지 않았다.❌ select 한 번 날렸을 뿐인데 콘솔에는 수십 줄의 쿼리가 쏟아졌다.❌ flush, commit, ..