[DB 모르는 백엔드 탈출기 Ep.4] 연관관계 주인은 누가 되어야 할까?
·
DB 모르는 백엔드 탈출기
1. 들어가며이전 글에서 데이터베이스의 테이블 간 연관관계를 중심으로일대일 / 일대다 / 다대다식별 관계 vs 비식별 관계같은 내용을 먼저 짚고 넘어갔다.👉 2025.04.13 - [DB 모르는 백엔드 탈출기] - [DB 모르는 백엔드 탈출기 Ep.1] JPA 쓰기 전에 꼭 알아야 할 DB 기초 [DB 모르는 백엔드 탈출기 Ep.1] JPA 쓰기 전에 꼭 알아야 할 DB 기초1. 들어가며많은 백엔드 개발자들이 JPA부터 배우기 시작한다.Entity 클래스를 만들고, 어노테이션을 붙이면쿼리 없이도 데이터가 저장되고 조회되는 걸 보고 이렇게 생각한다.“와, JPA가 다 해주mingking2.tistory.comDB 관점에서 연관관계가 어떻게 구성되는지 이해했다면,이제는 JPA에서 이 연관관계를 어떻게 표현..
[DB 모르는 백엔드 탈출기 Ep.3] JPA는 객체를 어떻게 관리할까?
·
DB 모르는 백엔드 탈출기
1. 들어가며이전 글에서는 “테이블은 객체가 아니다”라는 주제로,자바 객체와 관계형 데이터베이스의 구조적 차이를 살펴보았다.2025.04.13 - [DB 모르는 백엔드 탈출기] - [DB 모르는 백엔드 탈출기 Ep.2] 테이블은 객체가 아니다. [DB 모르는 백엔드 탈출기 Ep.2] 테이블은 객체가 아니다.1. 들어가며JPA를 쓰면 객체만 잘 설계하면 DB도 잘 작동할 줄 알았다.User와 Post를 양방향으로 참조하고,@OneToMany, @ManyToOne을 붙이면 자바 객체처럼 자유롭게 탐색하고 저장할 수 있을 줄 알았다. mingking2.tistory.com 객체는 참조(Reference)로 서로 연결되고, 메모리 기반으로 동작하지만테이블은 외래 키(Foreign Key)와 JOIN 쿼리를 통해..
[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, ..