전체 글

· Backend/JPA
JPA N+1 문제 해결하기 JPA 사용시 발생하는 N+1 문제를 해결하는 방법에 대해 정리한 내용입니다. 1. N+1 문제가 발생하는 이유 N+1 문제는 1:N 또는 N:1 연관관계가 설정된 엔티티를 조회했을 때 발생하는 문제입니다. 연관관계가 설정된 엔티티를 한 번에 조회하지 않고 조회된 데이터의 개수(N) 만큼 연관관계의 엔티티에 대해 추가로 조회 쿼리가 실행되는 문제입니다. 조회한 엔티티의 데이터 개수가 10개이면 연관관계의 엔티티를 조회하는 SQL도 10번 실행되어 10번 + 1번 조회하게 됩니다. 이러한 문제는 많은 양의 쿼리가 발생했을 때 성능 저하의 원인이 됩니다. 1.1. 즉시 로딩에서 발생하는 N+1 문제 즉시 로딩이 설정된 연관관계의 엔티티를 조회하는 경우에 N+1 문제가 발생할 수 ..
· Backend/JPA
JPA Infinite Recursion 해결하기 JPA 사용시 발생하는 Infinite Recursion을 해결하는 방법에 대해 정리한 내용입니다. 1. Infinite Recursion (nested exception) 문제가 발생하는 이유 1.1. 양방향 연관관계에서 발생하는 Infinite Recursion JPA를 이용하여 양방향 연관관계를 구성한 경우에 발생하는데 컨트롤러에서는 JSON 형태로 값을 출력하기 위해 타입 변환을 필요로 합니다. 이 때 타입 변환이 필요한 엔티티의 필드가 다른 엔티티를 참조하고, 참조한 엔티티의 필드가 기존의 엔티티를 참조하거나 다른 엔티티를 참조하게 되면서 반복적인 재귀가 일어나 Infinite Recursion 문제가 발생하게 됩니다. 다음과 같이 Board, ..
· Backend/JPA
JPA LazyInitializationException 해결하기 JPA 사용시 발생하는 LazyInitializationException을 해결하는 방법에 대해 정리한 내용입니다. 1. LazyInitializationException 예외가 발생하는 이유 1.1. 지연 로딩(LAZY LOADING) 으로 인하여 발생하는 LazyInitializationException JPA를 이용하여 객체의 양방향 연관관계를 구성한 후에 엔티티를 조회했을 때 LazyInitializationException 예외가 발생하는 경우가 있습니다. FetchType.LAZY 로 연관관계가 설정된 필드는 지연 로딩으로 조회 되는데 이 때 해당 필드의 엔티티를 프록시 객체로 조회하게 됩니다. 프록시 객체로 조회된 엔티티는 초..
Spring Boot Properties 클래스 사용하기 Spring Boot에서 Properties 설정값들을 클래스에 매핑하여 사용하는 방법에 대해 정리한 내용입니다. 1. Properties 클래스 사용하기 Spring Boot에서 설정값을 사용하기 위해서 application.properties 또는 application.yml 파일에 key value 형식의 데이터를 저장하고 다음과 같이 @Value 어노테이션으로 읽어와서 사용하는 경우가 있습니다. public class ApplicationProperties { @Value("${property.name}") private String propertyName; @Value("${property.age}") private String prope..
Spring Boot JPA 알아보기 Spring Boot에서 JPA를 사용하는 방법에 대해 정리한 내용입니다. 1. Spring Boot JPA 1.1. JPA (Java Persistence API) JPA는 EJB(Enterprise Java Beans) 3.0 스펙에서 Hibernate를 기반으로 JavaSE, JavaEE를 위한 영속성 관리와 ORM을 위한 기술 표준입니다. 즉, ORM을 사용하기 위한 표준 API 인터페이스를 정의한 것입니다. JPA를 사용하기 위해서는 Hibernate, OpenJPA, EclipseLink, DataNucleus 등과 같이 JPA를 구현한 ORM 프레임워크를 사용해야합니다. Spring의 Spring Data JPA를 사용하면 JPA를 더 편리하게 사용할 수..
Spring Boot Test 작성 및 실행하기 Spring Boot Test를 작성하고 실행하는 방법에 대해 정리한 내용입니다. 1. Spring Boot Test Spring Boot에서는 애플리케이션을 테스트할 때 도움이 되는 테스트 스타터를 제공합니다. 스타터는 크게 spring-boot-test와 spring-boot-test-autoconfigure 두가지 모듈로 구성됩니다. spring-boot-test는 테스트를 위한 핵심 기능을 지원하고 spring-boot-test-autoconfigure는 테스트를 위한 자동 구성을 지원합니다. 일반적으로 Spring Boot 테스트 모듈과 JUnit, Jupiter, AssertJ, Hamcrest 및 다른 유용한 라이브러리들이 포함되어 있는 spr..
· Build/Gradle
Gradle 설치 및 사용하기 Gradle을 설치하고 사용하는 방법에 대해 정리한 내용입니다. 1. Gradle Spring 프로젝트의 빌드 도구로는 Maven을 많이 사용하지만 XML 기반의 설정 파일인 pom.xml은 동적인 구성에 제약이 있었습니다. 이러한 Maven의 대안으로 나온 Gradle은 Groovy 기반의 스크립트 언어로 구성되어 있으며 변수 선언 및 조건문(if-else, for) 등을 사용하여 로직 구현이 가능합니다. Gradle Build Tool Accelerate developer productivity. Gradle helps teams build, automate and deliver better software, faster. gradle.org Gradle의 특징은 다음과..
React Query 알아보기 React Query의 기본적인 내용에 대해 알아보고 정리한 내용입니다. 1. React Query React Query는 리액트 애플리케이션에서 서버의 데이터를 조회하거나 캐싱, 업데이트, 에러 처리와 같은 비동기 로직을 지원하는 fetching 라이브러리입니다. Server-side와 Client-side 사이에서 비동기 로직을 보다 쉽게 다루게 해주며 Server State를 관리해줍니다. React Query Hooks for fetching, caching and updating asynchronous data in React react-query.tanstack.com React Query에서는 Server State를 다음과 같이 정의합니다. Client가 제어..
React ESLint + Prettier 적용하기 React에 ESLint와 Prettier를 적용하는 방법에 대해 알아보겠습니다. 1. ESLint 설치 ESLint는 JavaScript 코드를 분석하여 문법 검사를 지원하고 런타임 이전에 오류를 찾아주는 도구입니다. 커스터마이징이 쉽고 확장성이 뛰어나다는 장점이 있습니다. 좀 더 편리하게 사용하기 위해 airbnb 또는 google의 스타일 가이드를 많이 사용하기도 합니다. 다음 명령어를 실행하여 ESLint를 설치해줍니다. $ yarn add eslint 설정에 사용할 plugin과 parser를 다음과 같이 설치해줍니다. $ yarn add eslint-plugin-react @typescript-eslint/parser @typescript-e..
freestrokes
FREESTROKES DEVLOG