[스프링] 스프링 Data JPA에 대하여
·
스프링 데이터 JPA
스프링을 공부하다 보면 가장 자주 마주치는 주제 중 하나가 JPA다.JPA는 객체를 데이터베이스에 매핑해주는 표준 기술이라서, 개발자가 SQL을 직접 쓰지 않고도 엔티티를 통해 데이터를 다룰 수 있게 해준다.처음 써보면 굉장히 편리하다. 하지만 프로젝트가 커질수록, 단순한 CRUD(저장, 조회, 수정, 삭제) 코드가 계속 반복되는 걸 금방 느끼게 된다. 이 글에서는 왜 스프링 Data JPA가 필요하게 되었는지를 직접 코드 예시로 보여주고, 같은 기능을 스프링 Data JPA로 바꿨을 때 얼마나 코드가 간단해지는지를 비교해본다. 결국 “이런 불편함 때문에 스프링 Data JPA가 등장했다”는 걸 자연스럽게 이해하게 될 것이다. JPA만으로 구현해보기예시로 Member와 Team이라는 두 엔티티가 있다.@..
[스프링] 컬렉션 조회 최적화
·
스프링
앞선 글에서는 JPA에서 @ManyToOne, @OneToOne 같은 ToOne 관계를 조회할 때 발생하는 성능 문제와 해결 방식을 정리했다.이번에는 더 복잡한 일대다 관계(OneToMany), 즉 컬렉션을 포함한 엔티티를 조회할 때의 문제와 그에 대한 해결 흐름을 다뤄보려고 한다. 예제로는 주문(Order)과 주문상품(OrderItem)의 관계를 사용한다.하나의 주문에는 여러 개의 상품이 들어갈 수 있으므로 Order → OrderItem은 OneToMany 관계다. 예제 엔티티 구조@Entity@Table(name = "orders")public class Order { @Id @GeneratedValue private Long id; @ManyToOne(fetch = LAZY) ..
[스프링] 지연 로딩과 조회 성능 최적화
·
스프링
JPA는 자바 객체만으로 DB 작업을 처리할 수 있도록 도와주는 편리한 기술이다.특히 저장(insert)이나 단순 조회(select) 정도는 별다른 쿼리 없이도 쉽게 구현된다. 하지만 JPA를 사용하는 프로젝트에서는 조회 성능 문제가 자주 언급된다.특히 연관된 엔티티를 함께 조회해야 할 때, 개발자가 의도하지 않은 수많은 쿼리가 실행되거나 응답 속도가 느려지는 문제가 생길 수 있다. 그래서 실무에서는 아래와 같은 순서로 단계적으로 성능을 개선해가는 방식이 추천된다고 한다.엔티티 직접 반환 → DTO 변환 → fetch join → DTO 직접 조회이 글에서는 각 방식의 구조와 특징, 그리고 어떤 상황에서 사용되는지를 예제와 함께 정리해본다. 예제: 주문(Order)과 회원(Member), 배송(Deliv..
[스프링] DTO가 필요한 이유
·
스프링
Spring에서는 웹 애플리케이션을 만들다 보면 사용자로부터 요청을 받고, 그에 대한 응답을 주는 구조가 기본이다. 이때 데이터를 주고받기 위해 DTO (Data Transfer Object) 라는 개념이 자주 등장한다. 처음 개발을 시작하면 DTO 없이도 동작은 잘 된다. 하지만 기능이 많아지고 화면이 늘어나면 어느 순간부터 설계가 복잡해지고, 문제가 생기기 시작한다. 이 글에서는 DTO가 왜 필요한지, 그리고 사용하지 않으면 어떤 문제가 생기는지를 단계적으로 정리한다. 1. DTO란 무엇인가?DTO는 Data Transfer Object의 약자로, 말 그대로 데이터를 전달하기 위한 객체다.요청(Request) 데이터를 받을 때,응답(Response) 데이터를 보낼 때,혹은 시스템 내부 계층 간 데이터..
[백준] 2636 치즈 (JAVA)
·
코딩 테스트
문제 링크:https://www.acmicpc.net/problem/2636 문제:아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓여 있지 않으며 치즈에는 하나 이상의 구멍이 있을 수 있다. 이 치즈를 공기 중에 놓으면 녹게 되는데 공기와 접촉된 칸은 한 시간이 지나면 녹아 없어진다. 치즈의 구멍 속에는 공기가 없지만 구멍을 둘러싼 치즈가 녹아서 구멍이 열리면 구멍 속으로 공기가 들어가게 된다. 의 경우, 치즈의 구멍을 둘러싼 치즈는 녹지 않고 ‘c’로 표시된 부분만 한 시간 후에 녹아 없어져서 와 같이 된다.다시 한 시간 후에는 에서 ‘c’로 표시된 부분이 녹아 없어져서 ..
[스프링] JPA에서 제공하는 쿼리 방법
·
스프링
애플리케이션에서 데이터를 다룰 때마다 SQL을 직접 작성하는 일은 생각보다 번거롭다. 쿼리가 길어질수록 가독성은 떨어지고, 테이블 구조가 바뀔 때마다 일일이 SQL을 고쳐야 한다. 여기에 객체와 테이블 사이의 변환까지 신경 써야 한다면, 코드보다 쿼리에 더 많은 시간을 쓰게 된다. JPA는 이런 상황을 줄이기 위해 등장한 기술이다. 데이터베이스와의 상호작용을 객체 중심으로 바꿔주고, 쿼리 역시 테이블이 아닌 엔티티 중심으로 작성할 수 있게 한다. JPA는 다양한 쿼리 방법을 지원하지만, 실무에서 가장 많이 사용되는 것은 JPQL이다. 그리고 성능 최적화 측면에서 자주 등장하는 Fetch Join도 함께 이해할 필요가 있다. JPA에서 제공하는 쿼리 방법JPA는 다음과 같은 방식으로 쿼리를 작성할 수 있다..