| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- Java
- js
- 배열
- junit
- 테스트자동화
- CSS
- 스프링부트
- SpringBoot
- list
- Visual Studio Code
- html
- 인텔리제이
- Eclipse
- 단위테스트
- IntelliJ
- javascript
- math
- string
- vscode
- HashMap
- 문자열
- Array
- input
- 자바스크립트
- ArrayList
- java테스트
- 정규식
- junit5
- 자바문법
- 자바
- Today
- Total
목록2026/03/13 (2)
어제 오늘 내일
JPA를 쓰다 보면 로직은 완벽한데 페이지 로딩이 엄청 느릴 때가 있습니다.로그를 확인해 보니 SELECT 쿼리가 끝도 없이 실행되고 있다면? 축하합니다. 당신은 N+1 문제에 당첨되셨습니다.이것은 JPA가 너무 자동화를 잘해줘서 생기는 부작용인데요. 원리만 알면 아주 쉽게 잡을 수 있습니다. 1. N+1 문제가 뭔가요?쉽게 말해 "1번의 쿼리로 N개의 데이터를 가져왔는데, 그 N개의 데이터를 조회하기 위해 N번의 추가 쿼리가 나가는 현상"입니다.상황: 팀(Team)과 멤버(Member) 조회팀 10개를 조회하고, 각 팀에 소속된 멤버들의 이름을 출력한다고 가정해 봅시다.// 1. 팀 10개를 조회 (쿼리 1번)List teams = teamRepository.findAll();// 2. 루프를 돌며 ..
JPA를 쓰다 보면 Member를 저장했는데 Team에는 회원이 안 들어가 있거나, 반대로 Team을 저장했는데 Member의 외래 키가 null인 황당한 경우를 겪게 됩니다.이건 100% "연관관계의 주인"을 잘못 설정했기 때문입니다. 객체지향 설계와 데이터베이스 설계의 차이를 이해하면, 이 문제는 아주 쉽게 해결됩니다. 1. 객체 vs 테이블: 패러다임의 불일치가장 먼저 이 그림을 머릿속에 넣어야 합니다.테이블(DB): MEMBER 테이블에 있는 TEAM_ID (외래 키) 하나만 있으면, 멤버도 팀을 찾을 수 있고 팀도 멤버를 찾을 수 있습니다. (양방향 가능)객체(Java): Member 객체에 Team 필드가 있어야 팀을 찾을 수 있고, 반대로 Team 객체에도 List가 있어야 멤버를 찾을 수..
