JPA - 연관 관계를 위한 불필요한 select 줄이기(getReferenceById())
·
JPA
개요데이터베이스에 연관 관계를 가진 엔티티를 저장할 때, 우리는 종종 연관된 엔티티의 모든 정보를 조회(SELECT)하게 된다. 하지만 이러한 방식은 의문점을 들게한다.'실제로 DB에 저장되는건 연관 객체의 ID뿐인데, 왜 모든 정보를 조회해야 할까?' @Service@Transactional@RequiredArgsConstructorpublic class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; private final CustomerRepository customerRepository; public void saveOrder(Long customerId) { ..
ajax - 기초 문법
·
etc
서버와 통신 시작  AJAX란?Asynchronous Javascript and XML. 이름에 XML에 들어가지만 최근에는 HTML, JSON을 더 많이 사용한다. 기존 웹은 페이지를 로딩하면 다른 페이지를 로딩하기 위해서는 링크를 타고 넘어가야 했다. (깜빡임이 발생한다.)AJAX 기술을 사용하면 페이지를 전환하지 않고도 다른 화면을 보여줄 수 있다.비동기적으로 서버에 요청을 하기 때문에 페이지의 전환 없이도 새로운 데이터를 가져올 수 있다.대표적으로 ajax를 이용해서 브라우저에 요청을 보내는 방식은 두 가지가 있다. get과 post 방식이다.특징GETPOST캐시화(cached)캐시될 수 있음캐시되지 않음브라우저 히스토리히스토리에 쿼리 문자열이 기록됨히스토리에 기록되지 않음데이터 길이데이..
Querydsl - Expressions클래스로 select에서 상수 사용하는 법
·
JPA
개요쿼리 성능을 개선하는 방법 중 하나는 이미 선언된 값은 그대로 사용하는 것이다.매개변수로 넘어왔구나 이미 알고 있는 값을 DB에서 조회하는건 불필요하다. 이 밖에도 Entity보다 DTO로 필요한 필드만 가져오거나 where 및 join 문에 인덱스가 있는 필드만 사용하는 등의 방법이 있다. 본 글에서는 Expressions 클래스로 Querydsl에서 select문에서 상수를 사용하는 방법을 알아보자com.mysema.query.support.Expressions 클래스는 동적 표현식 생성을 위한 클래스이다. constant()constant 표현식은 Entity에 선언되지 않은 필드를 상수로 반환하고 싶을 때 사용한다.Expressions.constant(value) 형태로 사용할 수 있고 Exp..
Spring Boot - JPA 스키마, 데이터 초기화하기 (SQL script -> ddl-auto)
·
Spring
개요이전에 작업했던 프로젝트를 Mybatis에서 JPA, Querydsl로 마이그레이션하는 작업을 하고 있다.기존 초기화를 script(schema.sql(테이블 생성), data.sql(더미데이터 생성)) 파일을 사용하다가 JPA를 사용하게 되면서 ddl-auto를 사용해 Table 생성하기로 했다.DDL이란?DDL(Data Definition Language)은 SQL의 하위 집합으로 데이터베이스의 구조와 테이블, 뷰, 인덱스 프로시저와 같은 개체를 정의하는데 사용된다. DDL문은 데이터 베이스 개체를 생성, 변경 및 삭제 하는데 사용된다. (CREATE, ALTER, DROP, TRUNCATE, RENAME) 데이터 초기화 설정SQL script (기존) 기존에는 script 기반으로 데이터를 초기..
Backend - RESTful하게 API 설계하는 방법
·
Network
본 글은 아래 링크의 포스트를 번역한 내용입니다.https://daily.dev/blog/restful-api-design-best-practices-guide-2024 RESTful API Design Best Practices Guide 2024Guide to RESTful API design best practices in 2024 covering resource-based architecture, stateless communication, client-server separation, URI design, HTTP method usage, security, performance optimization, and more.daily.dev 주요 권장 사항아래 예시를 따르면 사용하기 쉽고 유지보수 및..
Javascript - Kakao SDK 사용 시 사용자 정보 조회 API 응답에서 CI 항목 전달받지 못하는 문제 원인과 해결 방법
·
나의 에러 일지
개요Kakao SDK를 통해 사용자 정보를 조회해오는 API 응답에서 CI 항목이 제외되어서 카카오 회원가입 중 에러가 발생했다. 개발환경Spring 5.xJava 8JSPMybatisOracle 원인프로젝트에서는 Javascript SDK를 사용했다. ( Kakao Javascript SDK 가이드)이전까지는 CI가 잘 조회되고 있었고 관련 코드를 수정한적도 없었다. 그래서 카카오쪽 정책이 바뀌었을까 하고 찾아봤는데, 쉽게 찾을 수 있었다. 카카오 디벨로퍼에 공지로 올라왔던 것. 관련 글을 살펴보니 정보통신망법 개정안에 따른 조치라고 한다.제23조의6(연계정보의 안전조치 의무 등) ① 본인확인기관이 연계정보를 생성ㆍ처리하는 경우 「개인정보 보호법」 제29조에 따른 조치 외에 연계정보 생성ㆍ처리의 안전성..
Java - 생성 패턴 구현
·
Design Pattern
Singleton Pattern클래스의 인스턴스가 한 개만 생성되도록 보장하는 디자인 패턴하나의 인스턴스만 유지하기 때문에 리소스를 절약하고 전역적으로 상태를 공유할 수 있다.전역적으로 사용되기 때문에 예측하지 못한 동작을 일으키는 문제가 발생할 수 있고 테스트가 어렵다.구현 예시public class Singleton { private static Singleton instance; private String data = ""; private Singleton() { // private constructor } public static synchronized Singleton getInstance() { if (instance == null) { ..
Java - 자바 가비지 컬렉션(Garbage Collection)을 알아보자
·
Java
개요GC(Garbage Collection)은 에덴 영역에 생성된 객체의 메모리 할당/해제를 자동으로 관리하는 자바의 핵심 기능이다.GC 덕분에 개발자는 메모리 관리에 대한 걱정 없이 개발에만 집중할 수 있게 됐고, 이러한 장점이 크고 복잡한 애플리케이션을 만들 때 자바를 선택하게 만들었다. 하지만 성능 최적화와 메모리 관련 에러를 방지하기 위해서는 GC의 작동 원리에 대한 이해가 필수적이다. Java의 GC 작동 원리자바에서 모든 객체는 heap 영역에 저장된다. heap은 동적 할당을 위한 메모리 영역(runtime data area) 중 하나다. 객체가 더 이상 참조되지 않으면 GC의 수집 대상이 된다. GC는 heap 영역에서 사용되지 않는 객체를 주기적으로 찾아서 메모리를 해제해준다.이 과정에서..
Spring Data JPA - 외래키(Foreign Key)를 복합 기본키(Composite Primary Key)로 사용하기
·
JPA
개요복합 기본키(Composite Primary Key)란 두 개 이상의 컬럼을 묶어 만든 기본키(Primary Key)를 말한다.복합키는 다대다(N:M) 관계의 테이블의 관계를 풀어주고 공통으로 저장되는 데이터를 다룰 때 사용되는 매핑 테이블에서 사용될 수 있다.예를 들어, 내가 현재 개발중인 업무평가시스템에서 하나의 팀은 다양한 업무를 담당할 수 있고 하나의 업무를 여러 팀이 담당할 수 있다.즉, 팀과 업무 테이블은 다대다 관계를 갖고 있다. 그리고 각 업무에 대한 팀별로 평가를 받을 수 있다. 이 때 매핑 테이블 구조는 다음과 같다. 이제 Spring Data JPA에서 외래키로 복합키를 만드는 방법을 알아보자taskId: 업무 테이블의 외래키(foreign key)teamId: 팀 테이블의 외래..
JPA - Querydsl-sql 사용 시 Table not found 원인과 해결 방법
·
나의 에러 일지
개요프로젝트를 Mybatis -> JPA, QueryDsl로 마이그레이션하고 있다.복잡한 쿼리가 있어서 서브쿼리를 프롬절에서 사용해야 했는데, QueryDsl-jpa에서는 from절 서브쿼리를 지원하지 않아서 QueryDsl-sql을 사용해야 했다. 이 과정에서 발생했던 에러 처리 과정을 남긴다. 해결 방법은 간단했지만 원인을 알기 위해서 Querydsl, JPA, JPQL, NativeSQL을 조금 깊게 파고들 수 있는 계기가 되었다. 문제 발생쿼리를 테스트하는 과정에서 아래와 같은 에러가 발생했다.ORGANIZATIONLEADENTITY 테이블을 찾을 수 없다고 한다. nested exception is org.hibernate.exception.SQLGrammarException: could not..
Cold Bean
'티스토리챌린지' 태그의 글 목록