N+1 문제란?N+1 문제는 JPA나 ORM을 사용할 때 발생할 수 있는 성능 문제 중 하나다. 간단히 말해, 하나의 쿼리를 실행한 후 관련된 N개의 항목에 대해 추가로 N개의 쿼리가 실행되는 상황을 말한다. 예를 들어, 한 번의 조회 쿼리로 여러 개의 부모 엔티티를 가져온 후, 각 부모 엔티티와 관련된 자식 엔티티를 조회하기 위해 N번의 추가 쿼리가 실행되는 경우가 이에 해당한다. N+1 문제 예시Entity Class@Entitypublic class Parent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "parent", fetch = FetchTy..
버그와 함께 춤을
트랜잭션이란?트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키기 위해 수행하는 일련의 연산들을 말한다. 트랜잭션은 데이터의 무결성과 일관성을 보장하기 위해 ACID 속성을 따른다.원자성(Atomicity): 트랜잭션 내의 모든 작업이 완벽하게 수행되거나 전혀 수행되지 않아야 한다.일관성(Consistency): 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관성 있는 상태를 유지해야 한다.격리성(Isolation): 트랜잭션이 실행되는 동안 다른 트랜잭션의 영향을 받아서는 안 된다.지속성(Durability): 트랜잭션이 완료되면 그 결과는 영구적으로 반영되어야 한다. JPA와 트랜잭션 처리JPA에서 트랜잭션 관리는 주로 EntityManager를 통해 이루어진다. 하지만 Spring Da..
Spring Data JPA 개요 및 사용 방법Spring Data JPA란?Spring Data JPA는 Spring 프레임워크의 일부로, JPA(Java Persistence API)를 쉽게 사용할 수 있도록 도와주는 라이브러리이다. Spring Data JPA는 리포지토리 추상화(Repository Abstraction)를 제공하여, 개발자가 데이터 접근 계층을 더욱 간편하게 구현할 수 있도록 돕는다. 이를 통해 반복적인 CRUD (Create, Read, Update, Delete) 작업을 줄이고, 복잡한 쿼리 작성도 손쉽게 할 수 있다. 왜 Spring Data JPA를 사용하는가?Spring Data JPA를 사용하는 이유는 다음과 같다:생산성 향상: 반복적인 CRUD 작업을 자동화하여 개발 ..
JPA 개요 및 동작 원리JPA란?JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하여 데이터를 저장, 수정, 삭제, 조회할 수 있도록 하는 자바 표준 API이다. JPA는 객체 지향 프로그래밍과 관계형 데이터베이스 간의 패러다임 불일치를 해결하는 데 중점을 두고 있으며, 개발자가 데이터베이스 작업을 보다 쉽게 할 수 있도록 도와준다. JPA 사용 이유JPA를 사용하는 이유는 다음과 같다:객체와 관계형 데이터베이스 간의 매핑: JPA는 객체 지향 프로그래밍의 장점을 살려 데이터베이스 테이블과 자바 객체 간의 매핑을 자동화한다.생산성 향상: JPA는 데이터베이스 작업을 추상화하여 반복적인 코드 작성을 줄여준다. 이는 개발자의 생산성을 크게 향상시킨다.유지보수성..
1. 키 파일을 저장할 폴더로 이동 먼저, SSL 인증서 파일을 생성하고 저장할 폴더로 이동합니다. 이는 인증서 파일을 쉽게 관리하고 나중에 Spring Boot 프로젝트에 적용하기 위함입니다. 2. 인증서 파일 생성 SSL 인증서 파일을 생성하기 위해 `mkcert`를 사용합니다. 먼저 `mkcert -install` 명령으로 인증서를 생성하고, 이후에 `pkcs12` 형식의 keystore 파일을 생성합니다. mkcert -install mkcert -pkcs12 -p12-file keystore.p12 localhost 이 과정을 통해 `keystore.p12` 파일이 생성됩니다. 이 파일은 Spring Boot 애플리케이션에서 SSL을 설정하는 데 사용됩니다. 3. 파일을 Spring Boot 프..
직면한 문제 최근에 Spring 애플리케이션을 작업하면서 이해할 수 없는 상황에 직면했습니다. 제가 사용하고 있는 한글 문자가 제대로 표시되지 않고, 의문표로 뒤덮여 버리는 현상이 나타났습니다. 특히 API 응답에서 한글로 된 메시지가 필요한데, 이 문자들이 온전하게 표현되지 않아 문제가 되었습니다. 문제의 원인 문제는 Spring 프레임워크가 HTTP 응답에 사용하는 기본 문자 인코딩 설정에 있었습니다. Spring Boot는 기본적으로 ISO-8859-1을 사용하는데, 이는 한글 문자를 다루기에 부적합합니다. 인코딩 불일치로 인해 원래 메시지가 알아볼 수 없는 기호로 변해버렸습니다. 해결 방법 이 문제를 해결하기 위해 WebMvcConfigurer를 확장하는 커스텀 WebConfig 클래스를 만들고,..
최근, Spring Boot 기반의 웹 애플리케이션 개발 중 java.lang.IllegalArgumentException: Invalid character found in the request target 오류에 직면했습니다. 이는 클라이언트의 요청 URL에 특수 문자가 포함되어 있을 때 발생하는 문제로, RFC 7230 및 RFC 3986 규정에 어긋나는 문자들 때문입니다. 이번 글에서는 이 문제의 해결 과정을 공유하고자 합니다. 문제 발생 상황 Spring Boot 애플리케이션에서 클라이언트로부터 특정 특수 문자를 포함한 요청을 받았을 때, `java.lang.IllegalArgumentException` 오류가 발생했습니다. 처음에는 `application.yml` 설정을 통해 요청 인코딩을 UT..