
왜 findAll이 JPQL인가라는 의문점을 가지게 되었는지에 대해 설명하며 파헤쳐본 내용들을 정리해보려고 한다. N+1은 왜 발생하는가? JPQL을 실행하면 JPA는 이것을 분석해서 SQL을 생성한다. 이때는 즉시 로딩과 지연 로딩에 대해서 전혀 신경 쓰지 않고 JPQL만 사용해서 SQL을 생성한다. (...) SQL의 결과 수만큼 추가로 SQL을 실행하는 것을 N+1문제라고 한다. - 자바 ORM 표준 JPA 프로그래밍(책) N+1문제는 JPQL을 사용할 때 나타날 수 있는 문제라고 한다. JPQL은 무엇인가? 처음에 나는 개발자가 직접 repository에 쿼리 메소드로 작성하는 메소드만 JPQL이라고 생각했다. 하지만 미션을 하다보니 findAll 메소드에서도 N+1이 발생하는 것이었다. 뭔가 이..

마지막 미션인 레거시 리팩토링 미션은 중간에 제작근로 배포, 데모데이, 취업준비 등으로 우선되는 일들을 처리하고 고민하느라 거의 1달 넘게 진행했던 것 같다. 4단계까지 마무리했다. 끝까지 마무리 된 크루들이 많이 없을만큼 집중해서 하기 쉽지 않은 환경이었는데 마무리해낸 크루 중 한명이라 뿌듯하다.✌️ 레거시 리팩터링을 진행하면서 귀찮은 점도 엄청 많았고, 느끼는 점도 많았다. 무엇보다 이 미션을 집중해서 해봐야겠다는 생각을 한 것은 JPA에 대해 좀 더 공부해보고 싶었기 때문이었다. 아직도 스프링도 마찬가지이지만 JPA의 내부과정에 대해 온전하게 이해된 느낌은 아니다. 좀 더 깊게 이해해 나가고 있는 과정이라고 생각한다. 리팩터링 미션을 진행하면서 우아한테크코스 과정을 종합하는 미션이라는 생각이 들었다..
1. OneToMany 단방향 매핑 JPA 에서 연관관계 설정 객체지향관점: 일대다 단방향이 깔끔 → 부가 업데이트 쿼리가 무조건 나가게 됨. 기술 JPA 관점: 다대일 단방향이 깔끔 → 객체의 입장에서 참조관계가 DB 테이블 구조 처럼 됨. 합의: 다대일 양방향 → 편의 메소드에 대한 고려를 해야함. 배경 양방향을 설정하면 편의 메소드를 고려해야하며, 순환참조에 빠지지 않도록 주의해야 한다. 양방향을 설정하는 것(서로간의 단방향을 2개를 설정하는 것)은 객체지향의 입장에서도 약간 이상하다고 느껴짐 개발자가 신경써야할 포인트가 늘어나기 때문에 실수할 여지가 많아짐 따라서 단방향 설정이 좋다고 하는데 다대일 단방향은 객체처럼 객체를 사용하기 어려움 그렇다면 일대다 단방향은 성능 면에서 안 좋다고 하는데 왜..
수업 A객체 → B 객체 참조 : 이동가능 B 객체 → A 객체 참조가 없다면 : 이동불가 하지만 테이블은 join으로 이동가능 (항상 양방향) 연관관계의 주인: 객체와 객체 사이의 관계 (실제 DB와 매핑하면서 주인을 정해야 함 → 주인 대신 외래키 관리자 라고 해보자!) 연관관계: 다대일, 일대다, 양방향, 일대일 다대일 단방향 ManyToOne : 다대일 JoinColumn: 해도되고 안해도됨(foreign key의 이름을 지정해주는 역할) → 생략된다면 엔티티이름+id로 지정됨 단방향관계 엔티티 Station -> Line: 가능 Line -> Station: 불가능 테이블 station -> line: 가능 line -> station: 가능 지하철에 Line 정보추가 → 지하철입장에서는 다대일..
JPA 왜 사용하는가? 패러다임 불일치(객체지향 VS 관계형 데이터베이스) 객체는 방향성이 있는데, 테이블은 방향성이 없음 객체답게 모델링할수록 RDB에 저장하기 위해 매핑작업만 늘어남 엔티티 신뢰문제 원하는 내부 필드를 다 가지고 있는지 확신할 수 없다. 널포인터 익셉션이 일어날 수 있다! 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까? JPA(Java Persistence Api) ORM(Object-Relational Mapping, 객체 관계 매핑)JPA를 사용하면? SQL 중심적인 개발에서 객체 중심적인 개발이 가능 생산성 향상 (비지니스 로직에 더 집중가능) 유지보수 신뢰할 수 있는 엔티티 패러다임 불일치 문제 해결 JPA의 핵심개념 영속성 컨텍스트, 연관관계 매핑 JPA 사용에 필요한 ..
- Total
- Today
- Yesterday
- 카카오
- React
- CS
- Spring
- DB
- 회고
- 네트워크
- 우아한테크코스
- 글쓰기미션
- python
- 학습로그
- 우테코수업
- Transaction
- javascript
- TCP/IP
- 내부코드
- 코드스쿼드
- 운영체제
- JPA
- 모의면접준비
- 인증
- OS
- 개발공부일지
- java
- 월간회고
- TIL
- JS
- 마스터즈코스
- 객체지향
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |