1. 개요JPA 프로젝트를 진행하며 한가지 의문이 들었다. 'fetch = FetchType.EAGER' 와 'fetch-join (@Entity-graph)' 둘 다 진짜 객체를 한번에 조회할 수 있도록 하는 것인데.. 왜 'fetch-join (@Entity-graph)'의 성능이 더 좋은 것일까? 이 의문을 풀기 위해 공부한 내용을 포스팅 하려한다. 2. 공통점두 개념은 모두 가짜 객체를 사용하지 않고, 엔티티를 조회할때 모두 진짜 객체로 가져와 한꺼번에 조회할 수 있도록 하는 기능을 가진다. 3. 차이점 이 둘의 차이점이 이번 포스팅의 핵심 내용이 될 것이다. 차이점을 하나하나 살펴보자. 3-1. fetch = FetchType.EAGER이 코드는 엔티티 클래스 내부의 연관관계 어노테이션..
스프링부트
1. 개요게시판 조회 쿼리(네이티브 쿼리)를 작성하고 여러 ROW 건수를 DTO를 활용하여 리턴할 때 마주한 에러이다. 이 에러를 해결한 사례를 포스팅한다. 2. 원인쿼리 조회 결과와 DTO 간의 매핑이 제대로 되지 않아 생긴 오류이다. 3. 해결방법네이티브 쿼리를 사용하고, 다중 건수의 DTO로 리턴하기 위해선 DTO를 class로 만들지 않고, interface로 생성한다.// as-is@Data@NoArgsConstructorpublic class MyDto { private String A; private String B; // ... }// to-bepublic interface MyDto { String getA(); String getB(); ..
1. 원인application.yml을 각각 운영과 개발 환경으로 분리했을 경우 JUnit으로 테스트할 때, DB 접속정보가 운영환경으로 인식되었기 때문에, JPA 기능을 사용할 수 없는 경우 필자는 DB 접속정보를, 시크릿에다 등록해놓았기 때문에, application.yml에 DB접속 정보를 직접 넣지않고, 환경변수로 세팅해놓았다. 그러다보니, 모든 접속정보가 null로 들어오기 때문에 해당 오류가 발생한 것이다. 2. 해결방법2-1. @ActiveProfiles("profile 명")@ActiveProfiles 어노테이션으로 개발용 application에서 지정한 프로필명을 해당 테스트 클래스에 명시해주면 테스트 시 해당 profile의 application.yml로 인식한다.# applicati..
1. 개요프로젝트 초반 비용 문제 및 간단 배포 테스트로 클라우드타입 서버를 선택했다.서버 스펙은 SpringBoot + MySQL 이며, 무료티어를 선택했다. 서비스 기능 중 푸시알림 서비스를 제공하기 위해 FCM (Firebase Cloud Messaging) 솔루션을 채택했고, 당연히 Local 개발환경에서는 잘 구현이 되었다. 클라우드타입 서버에 배포만 하면 푸시알림 기능은 해결되는 상황이었다. 2. 이슈발생클라우드타입은 기본적으로 FTP, SFTP 방식의 파일 업로드 기능을 제공하지 않는다. 비공개 json 파일을 배포하기 위해선 깃헙에 푸시를 해야하는데 (클라우드타입은 Git + Github Action의 CI/CD 방식을 채택한다.) 보안상의 문제로 json파일은 깃헙에 푸시할 수 없다. ..