특정 페이지에 들어 갔을때 랜덤하게 데이터를 구성하고자 했다.(like 로또) Querydsl과 페이징 처리 되어 있는 조건으로 구글링을 해보는데 예제가 많이 없고, 현재 버전에서는 제공하지 않는 utils들을 활용하는 글들이 대부분이라 해당 글을 작성하게 되었다. 로직 Controller @ApiOperation(value = "(팀 찾기) 팀 리스트 가져오기", notes = "팀 이름 혹은 팀 고유번호를 입력해야한다. ") @GetMapping("/teams") public CommonResponse teams (@RequestParam int pageNum, @RequestParam int pageSize, @RequestParam String pageSort ) { return teamServi..
토이 프로젝트 게시판을 구현하면서 CRUD의 Update를 구현할 일이 있었다.update를 구현하면서 내가 원하는 동작은 테이블에서 하나의 컬럼만(이름) 수정하는 것이었지만, update query가 나갈 경우 이름을 제외한 다른 값들이 null처리가 되었다.이에 따라 공부를 하던 중 더티체킹(변경감지), 벌크연산의 차이에 의해 발생한 부분이었고, 이 둘의 차이점과 더 나은 코드 퀄리티를 유지하는 방법에 대해 작성하게 되었다. [들어가기에 앞서]update 할 데이터를 설정하는 경우, builder 패턴과 setter 사용법 중 나의 경우 @Builder 패턴을 즐겨 사용했지만, 변경감지일 경우만 @Setter를 사용했다. 다음은 Builder와 Setter에 대한 인프런 서포터즈님의 의견이다.JPA..
JPA 엔티티 사용 시 발생한 에러에 대해 다루고, @JsonIgnore이 아닌 DTO와 @Projection을 활용한 해결방법을 제시한다. 에러내용 serializer found for class -org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer..... 엔티티[엔티티]...-> [엔티티]... 블라블라~.. 오류 발생원인 순환참조로 인한 오류 JPA에서 엔티티 매핑을 하는 경우 엔티티 파일이 서로 참조하는 대상이 서로 물려 있어서 참조할 수 없게 되는 현상을 말한다. 순환참조가 발생하는 이유 Spring Boot는 @ResponseBody를 선언 할시 O..
사이드프로젝트를 하면서 검색조건에 따른 검색 쿼리를 개발하였다. 검색쿼리를 개발하는 데에 있어서 다양한 방법이 있었지만 나의 경우는 jpql보단 Querydsl 를 활용하였고, Where조건보단 BooleanBuilder를 활용하여 보다 관리하기 편하도록 했고, DTO에 전달할 값을 명시하여, API통신할 때 전달 데이터를 정의하였다. 위의 방법에 따라 작성한 글이다. 🚨 들어가기에 앞서... | Querydsl, DTO, BooleanBuilder를 사용한 이유 JPQL이 아닌 Querydsl를 사용한 이유 Querydsl은 JPQL 빌더이다. 솔직히 아무거나 사용해도 상관없는데 실제로 회사에서 일해보니까 Querydsl이 코드 지향적이라 관리하기 편했다 JPQL 같은 경우는 코드가 커질 경우 JPA,..
즉시로딩과 지연로딩에 대해 정리해 보았다. 즉시로딩과 지연로딩을 어떤 상황에서 사용하는지, 왜 사용하는지에 대한 정리 글이다. 먼저 즉시로딩과 지연로딩을 알기 위해선 JPA의 프록시에 대한 개념을 알아야 한다. 여기서는 즉시로딩과 지연로딩에 대한 글이므로 프록시는 아래 글을 통해 간단하게 알아보고 즉시로딩과 지연로딩을 이해하도록 하자. 목차 1.프록시란 2.지연로딩 3.즉시로딩 1. 프록시란? 프록시 정의 대리, 가짜라는 의미를 가지고 있는 proxy. 프록시 사용이유 ex) Member 엔티티를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 필요하지 않을 때를 구분해야 한다. ⭐️ 낭비가 발생하게 된다. JPA는 이 낭비를 하지 않기 위해, 지연로딩과 프록시라는 개념으로 해결한다. 프록시..
회사 깃 내용중 OSIV 수정 했다는 로그를 보게 되었고 OSIV가 무엇인지 궁금해하다가 강의를 듣게 되어 정리해보았습니다. 1. OSIV란? Open Session In View: 하이버네이트 Open EntityManager In View: JPA (관례상 OSIV라 한다.) 2. OSIV를 적용하기 전 알고 있으면 좋을 내용 [영속성 컨텍스트] OSIV를 이해하기 전에 사실 JPA의 영속성 콘텍스트에 대해 알고 있어야 한다. OSIV에 대해 JPA를 이해하고 난 뒤 온 사람도 있을 거고, JPA를 모르고 온 사람도 있을 것이다. 영속성 콘텍스트 = 내가 어떤 엔티티를 선언하고 사용하는 데 있어 "프로그램이 종료될 때까지 엔티티를 영구 저장하는 환경"이라고 간략하게 이해하고 영속성 콘텍스트에 대한 자..
회사 코드를 보던 중 연관관계 되어 있지 않은 엔티티를 보게 되었는데 이 두 엔티티를 통해 작업을 해야하는 상황이 발생하여 글을 작성하게 되었다. 어떻게 하면 데이터 4000건을 불러오는데 1분이 넘는 시간이 걸리며 그로 인한 "아웃오브메모리"문제를 해결할 수 있을까? ++ 22.08.19 추가 : Projection을 사용하여 해당 Tuple 문제를 해결할 수 있었음 1. 아웃오브메모리 문제 발생 아웃오브메모리가 발생한 이유. 해당 페이지의 데이터를 불러오는데 연관관계 매핑이 맺혀 있지 않았다. 아무래도 추후에 개발된 페이지이거나, 설계할 때 기획에서 빠져있었지 않았다 짐작해 본다. 아무튼 이러한 연관관계없는 테이블을 억지 매핑을 하기 위해 이중 for문을 돌려놓고, @setter와 @getter를 활..
JPA 테이블 논리형과 물리형을 공부하던 중 싱글 테이블 전략과 조인 테이블 전략에 대한 내용을 실무에서 접한 적이 있어 정리하게 되었다. 팀원들과 커피챗을 하던 중 다른 부서에서 개발 중인 페이지에 대한 DB를 전달받은 적이 있는데 "팀장님이 뭐 이리 테이블 수를 많이 생성했지?" 라며 의문을 재기했던 적이 있다. 그 당시 나는 뭐... 필요하니까 만든 거 아닐까..? 라며 대수롭지 않게 넘겼는데 김영한 강사님의 스프링 상속관계 매핑 영상을 보며 싱글 테이블 전략과 조인 테이블 전략이 그 당시 내가 궁금했던 내용에 대한 내용이라고 생각이 들어 정리해보았다. 우리 부서는 싱글테이블 전략을 활용하여 테이블 수를 줄이고 백업 테이블 or log 테이블을 이용하고 타 부서는 싱글테이블이 아닌 조인 테이블을 ..
- Total
- Today
- Yesterday