일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 2+2
- 부산외대
- 미국대학
- 케네스로그
- JVM아키텍처
- CSUS
- 자바
- java
- 비전공자 git
- 유학생대학생활
- 복수학위제도
- 개인 프로젝트 개발일지
- 미국유학생활
- 미국유학생
- 사이드프로젝트
- 자바 스터디
- Java 스터디
- 파이데이아창의인재학과
- 개발일지
- 미국대학생활
- i-20
- 유학생 준비물
- jpa
- 케네스
- California State University Sacramento
- 해외유학
- F1학생비자
- Kenneth Park
- 미국유학
- 만다라트프로젝트
- Today
- Total
목록Dev/JPA (6)
케네스로그
자바의 객체, DB테이블의 각 연관관계는 어떻게 다른가? 또, JPA는 어떻게 이런 불일치를 조율해주나? ORM기술은 DB의 테이블 중심 패러다임과 Java의 객체지향 패러다임의 불일치를 해결하기 위해 소개되었다. 인프런의 김영한님의 강의를 들으며 JPA를 접하고 프로젝트를 진행하였지만, 각 연관관계와 그 설정이 실제 코드에 어떻게 반영되는지, 테이블 구조가 어떻게 적용되는지 궁금하여 이번 기회에 직접 코드를 작성하고 DB 상태를 확인해보았다. 연관관계 ORM기술은 객체와 테이블 중심의 각기 다른 패러다임에서 발생하는 문제를 해결하기 위해 등장했으며, 이를 통해 개발자는 서비스 로직을 짜면서 객체에 온전히 집중하여 개발할 수 있게 되고, DB의 테이블에 대한 고민을 최소화 할 수 있다. 서로 다른 패러다..
JPA N+1, 불필요한 쿼리를 줄여보자 이전 포스팅에서 트랜잭션을 고려한 리팩토링을 통해 불필요한 쿼리를 줄이는 작업을 진행했다. 모든 controller - service layer에서 예제 코드처럼 작성되었던 것은 아니었지만 몇몇 케이스가 존재했기에 개선작업을 수행했다. 그럼 이제 모두 끝난 것인가?🤔 어림도 없다. 개선작업에는 끝이없다. 이번에 풀어볼 N+1문제 이외에도 캐싱을 사용한다거나 아키텍쳐 레벨에서도 개선이 진행가능할 것으로 보인다. 차차 해결하는 것으로 하고, 이번 포스팅에서는 엔티티 간의 관계에 따른 추가 쿼리가 발생하는 N+1이슈를 분석하고 개선하도록 하자. 프로젝트의 엔티티 관계 우리 팀에서 기획/개발했던 프로젝트는 간단한 형식의 회원제 게시판이다. 이 글에서는 기술적으로 분석하고..
JPA, 왜 쿼리가 이리도 많이 발생할까? 최근 팀프로젝트를 진행하면서, 처음으로 JPA를 활용해서 프로젝트를 진행했다. 모든게 처음이었던지라 동작하는 코드를 목표로 주먹구구식으로 개발을 진행했다. 뚝딱거리며 만들고보니 어떻게.. 간신히 동작은 하는(?) API서버를 만들 수 있었다. 이제 내가 해야야할일은 리토팩링. 지금에서야 작성된 코드를 리뷰해보니 굉장히 부끄러운 점이 많았다. Controller - Service 구분이 명확히 되어 있지 않다. Transaction 범위를 고려하지 않고 작성된 코드들로 인해 불필요한 쿼리가 발생한다. 지연로딩에 대한 N+1문제가 발생한다. 현재 파악된 문제는 위와 같으며 하나씩 문제를 풀어나가고 있다. 이 포스팅에서는 불필요한 쿼리를 제거하는 작업에 대한 기록을 ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
SQL 중심 개발의 문제점 SQL에 의존적인 개발 객체를 관계형 데이터베이스에 저장하여 관리하게 된다. 여기서 발생하는 문제는 직접적으로 데이터를 저장하기 위해 SQL을 통해 작업하게 된다. 이 과정에서 반복적인 작업을 해야하는 불편함이 발생한다. 또한, 객체를 SQL로, SQL로 받아와서 객체로 전환하는 패러다임 일치 작업이 요구되어 진다. public class Member { private String memberId; private String name; private String tel; } INSERT INTO MEMBER(MEMBER_ID, NAME, TEL) Values SELECT MEMBER_ID, NAME, TEL FROM MEMBER M UPDATE MEMBER SET .. TEL ..