[스프링] JPA 상속관계 매핑
·
스프링
JPA를 사용하다 보면 하나의 부모 클래스(슈퍼타입)를 여러 자식 클래스(서브타입)가 상속받는 구조를 자주 만든다.예를 들어, Item이라는 추상 클래스를 Book, Album, Movie가 상속받는 구조가 그 예다. 객체지향 프로그래밍에서는 이처럼 상속 구조를 활용하는 것이 자연스럽지만,관계형 데이터베이스에는 상속이라는 개념이 존재하지 않는다. 대신 데이터베이스는 슈퍼타입/서브타입 모델링이라는 방식으로 이 문제를 해결한다.그리고 JPA는 이 모델링 방식을 그대로 매핑할 수 있도록 다양한 전략을 제공한다. 그러므로 이번 장에서는 JPA의 상속관계 매핑에 대해 정리한다.각 전략이 어떤 방식으로 테이블을 구성하며, 어떤 장단점을 갖는지, 실무에서는 어떤 전략이 자주 쓰이는지 중심으로 설명한다. 상속관계 매핑..
[스프링] JPA 연관관계 매핑
·
스프링
JPA는 객체 중심의 개발을 가능하게 해주는 ORM 기술이다.하지만 객체와 관계형 데이터베이스는 연관관계를 표현하는 방식이 전혀 다르다.객체는 참조(reference)를 통해 다른 객체를 연결한다. → order.getMember()데이터베이스는 외래 키(foreign key)를 사용해 테이블 간 관계를 표현한다. → ORDER.member_id따라서 JPA에서는 이 둘을 어떻게 매핑할지 정확하게 설정해야 한다.매핑을 잘못하면 다음과 같은 문제가 발생할 수 있다.의도하지 않은 SQL 쿼리 실행불필요한 UPDATEN+1 문제성능 저하유지보수 어려움오늘은 그래서 JPA에서 가장 핵심적인 개념 중 하나인 ‘연관관계 매핑’에 대해 정리한다.외래 키의 위치, 연관관계의 주인, 단방향/양방향의 차이, 그리고 실무에..
[스프링] JPA 기본 매핑 어노테이션
·
스프링
JPA는 자바 객체와 데이터베이스 테이블을 연결해주는 기술이다.개발자는 SQL을 일일이 작성하지 않고, 객체만 다뤄도 데이터베이스와 연동되는 프로그램을 만들 수 있다.이때 가장 기본이 되는 것이 매핑 어노테이션이다.하나씩 자세히 설명한다. 1. @Entity – 이 클래스는 테이블과 매핑되는 엔티티다@Entitypublic class Member { @Id private Long id; private String name;}@Entity는 JPA가 이 클래스를 테이블과 연결된 엔티티로 인식하게 만든다.이 클래스는 데이터베이스의 한 테이블에 대응된다.@Entity가 있어야 JPA가 이 객체를 관리하고, SQL을 자동 생성한다.규칙기본 생성자(파라미터가 없는 생성자)가 반드시 있어야 한다.클..
[스프링] JPA란?
·
스프링
현대 자바 백엔드 개발에서 가장 많이 사용되는 기술 중 하나가 바로 JPA다. 스프링 부트를 사용하는 대부분의 프로젝트에서는 이미 JPA가 기본처럼 사용되고 있다. 하지만 단순히 “JPA를 쓴다”는 것과, “JPA가 무엇이며 왜 필요한지 정확히 알고 사용하는 것”은 분명한 차이가 있다. 많은 초보 개발자들이 JPA를 처음 접할 때 겪는 공통적인 어려움은 “왜 쓰는지 모르고 쓰는 것”이다. SQL보다 더 어렵게 느껴지고, 엔티티, 영속성 컨텍스트, 지연 로딩 등 생소한 개념들에 부담을 느낀다. 이 글에서는 JPA가 등장하게 된 배경부터, 왜 필요한지, 그리고 핵심 개념인 ORM과 영속성 컨텍스트까지 차근차근 정리한다. 1. JPA란?JPA(Java Persistence API)는 자바 애플리케이션에서 데이..
[스프링] 빈 스코프
·
스프링
스프링에서 빈은 기본적으로 싱글톤으로 관리되지만, 필요에 따라 다양한 생명주기를 가진 스코프를 지정할 수 있다. 이 글에서는 빈의 스코프 개념을 정리하고, 특히 싱글톤과 프로토타입 스코프의 차이점과 사용 시 주의사항을 설명한다. 1. 빈 스코프란?스코프는 빈이 생성되고 존재할 수 있는 범위를 뜻한다. 스프링 컨테이너는 기본적으로 모든 빈을 싱글톤으로 관리하지만, 필요에 따라 스코프를 변경할 수 있다.스프링에서 지원하는 스코프는 다음과 같다.singleton(기본값) 컨테이너 시작~종료까지 하나의 인스턴스 유지prototype요청 시마다 새 인스턴스 생성request하나의 HTTP 요청 범위 동안 유지 (웹 전용)session하나의 HTTP 세션 동안 유지 (웹 전용)application서블릿 컨텍스트와 ..
[스프링] 빈 생명주기 콜백
·
스프링
스프링(Spring)에서 애플리케이션을 개발하다 보면, 서버가 시작할 때 외부 서버와 연결하거나, 종료될 때 연결을 끊는 작업이 필요할 때가 있다.예를 들어, 외부 API에 연결하거나, 데이터베이스와 연결하거나, 리소스를 정리해야 할 수 있다. 이러한 작업은 애플리케이션의 시작 시점과 종료 시점에 자동으로 실행되도록 설정하는 것이 좋다.스프링은 이런 과정을 도와주는 생명주기(Lifecycle) 콜백 기능을 제공한다. 1. 빈(Bean) 동작 순서스프링에서는 객체를 "빈(Bean)"으로 등록해서 관리한다.이 빈은 다음과 같은 순서로 만들어지고 사용된다. 스프링 컨테이너 생성스프링 빈 생성 (생성자 호출)의존관계 주입초기화 콜백 호출빈 사용소멸전 콜백 호출스프링 컨테이너 종료이 중에서 초기화 작업과 종료 작..