JPA(7)
-
[유신사 프로젝트] 로그인 & 회원가입 기능 2
코드를 짜면서 좀 헷갈렸던 개념이랑 새로 알게 된 개념을 정리해봤다. 1. @MapsId@MapsId는 연관관계의 외래키를 복합키의 일부로 사용하고 싶을 때 쓰는 어노테이션이다.예를 들어, user_role 테이블은 user_id와 role 두 개 컬럼을 PK로 가진다.이때 user_id는 동시에 user 테이블을 참조하는 외래키(FK)이기도 하다. @Entitypublic class UserRole { @EmbeddedId private UserRoleId id; @MapsId("userId") @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; ...} 여기서 @Ma..
2025.09.21 -
DTO의 중요성을 알아버렸다...
최근 프로젝트를 하면서 협업을 하다보니, DTO명이나 기능이 서로 잘 안맞는 경우가 많았어서 회의를 하면서 일단은 DTO를 사용하지 말고 리팩토링 할 때 Entity를 DTO로 바꾸자고 먼저 제안하였다. 이 결정은 얼마 지나지 않아 당연히 번복되었는데 DTO를 사용하지 않기로 하면서 여러 불편한 점이 많았기 때문이다. 일단 ChatGPT가 알려준 DTO를 사용해야 하는 이유는 아래와 같다. 1. 불필요한 정보 노출 방지엔티티에는 비즈니스 로직과 관련된 다양한 필드가 포함되어 있습니다. 예를 들어, 민감한 사용자 정보나 내부적으로만 사용되는 필드를 외부에 그대로 노출하면 보안 및 정보 관리에 문제가 생길 수 있습니다.DTO를 사용하여 필요한 정보만 클라이언트에 전달하면, 데이터 노출을 최소화하고 보안을 강..
2024.11.10 -
값 타입
엔티티 타입 vs 값 타입JPA의 데이터 타입은 엔티티 타입과 값 타입으로 나뉜다. 이 둘을 비유하면 다음과 같다엔티티 타입 : 살아있는 생물(데이터가 변경되도 바뀌지 않음)값 타입 : 단순한 수치 정보값 타입은 세 가지로 나눌 수 있다.기본값 타입자바 기본 타입래퍼 클래스String임베디드 타입컬렉션 값 타입1. 기본값 타입String, int 등이 값 타입이다. 이들은 식별자 값도 없고 생명주기도 회원 엔티티에 의존한다. 따라서 회원 엔티티를 제거하면 이들도 제거된다. 2. 임베디드 타입(복합 값 타입)새로운 값 타입을 직접 정의하여 사용하는 것을 임베디드 타입이라고 한다. 이 때 직접 정의한 임베디드 타입도 int, String처럼 값 타입이다. 예시)@Entitypublic class Member..
2024.05.16 -
프록시와 연관관계 매핑
1. 프록시엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다. 그런데 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다. 1 - 1. 프록시 기초JPA에서 식별자로 엔티티 하나를 조회할 때는 EntityManager.find()를 사용한다. 이 메소드는 영속성 컨텍스트에 엔티티가 없으면 데이터베이스를 조회한다. 이렇게 데이터베이스를 조회해야 하는 상황에서 엔티티를 실제 사용하는 시점까지 데이터베이스 조회를 미루고 싶으면 EntityManager.getReference()..
2024.05.06 -
연관관계 매핑 기초
※ 기본 용어 정리 1) 방향 : 1 - 1) 단방향 : 관계가 있을 때 둘 중 한쪽만 참조하는 것을 단방향 관계라고 한다. 1 - 2) 양방향 : 관계가 있을 때 서로를 참조하는 것을 양방향 관계라고 한다. 2) 다중성 : 다대일(N : 1), 일대다(1 : N), 일대일(1 : 1), 다대다(N : M) 다중성이 있다. 3) 연관관계의 주인 : 양방향 연관관계로 만들 시 연관관계의 주인을 정해야 한다. 1. 단방향 연관관계 다음과 같은 상황을 가정한다. - 회원과 팀이 있다. - 회원은 하나의 팀에만 소속될 수 있다. - 회원과 팀은 다대일 관계다. ● 객체 연관관계 - 회원 객체는 Member.team 필드로 팀 객체와 연관관계를 맺는다. - 회원 객체와 팀 객체는 단방향 관계다. 회원은 Membe..
2024.04.11 -
엔티티 매핑
1. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스틑 JPA가 관리하게 된다. ※ 주의사항 1. 기본 생성자는 필수다. 2. final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 3. 저장할 필드에 final을 사용하면 안된다. 2. @Table @Table은 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. ※ 속성 1. name : 매핑할 테이블 이름 2. catalog : catalog 기능이 있는 데이터베이스에서 catalog를 매핑한다. 3. schema : schema 기능이 있는 데이터베이스에서 schema를 매핑한다. 4. u..
2024.04.04