728x90
728x90
LAZY 로딩과 EAGER 로딩의 차이를 먼저 알아야 한다.(지연 로딩, 즉시 로딩) 지연로딩 Team —————— Member 는 서로 OneToMany, ManyToOne 관계를 맺고 있다. public class Team extends CoreEntity { // ... 중략 @OneToMany(mappedBy = "team", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) private List members = new ArrayList(); } public class Member extends CoreEntity { // ... 중략 @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}) ..
PK 값을 DB 에서 부여해주는 그대로 1, 2, 3, 4... 와 같이 1씩 증가하는 PK 로 설정할 경우 몇가지 문제점이 발생한다. 1씩 증가하는 형식은 ID 의 앞 뒤로 다른 user 의 PK 값임을 쉽게 예측할 수 있으며 악의적인 공격에 취약하다. 새 항목을 생성하고 해당 ID 를 검사하면 테이블의 행 수를 알 수 있다.(정보가 공개된다.) 각 테이블이 순차적인 값을 가지므로, 동일한 값이 다른 엔티티의 기본키로 발견된다. 1씩 증가하는 방식은 범위가 한정적이기 때문에 서비스를 이용하는 수가 폭발적으로 증가하면 고갈이 될 수 있다. 이러한 문제점을 해결하기 위해 UUIDv4 를 PK 로 선정하여 문제를 해결할 수 있다. uuid 란 'c0b656b1-7351-4dc2-84c8-62a2afb41e6..
@Data @AllArgsConstructor @NoArgsConstructor @RequiredArgsConstructor @Builder @Entity public class User extends BaseEntity { // User 라는 테이블의 pk, 1 씩 자동으로 증가 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; // Enum 을 사용하는 경우 EnumType.STRING 으로 해줘야 Enum 값이 추가될 때 오류가 발생하지 않는다. @Enumerated(value = EnumType.STRING) private Gender gender; @NonNull private String name; @NonNull..
JPA Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재한다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있다. 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말과 일맥상통합니다.데이터베이스에서 누가, 언제하였는지 기록을 잘 남겨놓아야 합니다. 그렇기 때문에 생성일, 수정일 컬럼은 대단히 중요한 데이터이다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있다. Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능이다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update..
JPA를 왜 사용해야 하는가? 1. SQL 중심적인 개발에서 객체 중심으로 개발 SQL 중심적인 개발의 문제점 참고 2. 생산성 JPA를 사용하는 것은 마치 Java Collection에 데이터를 넣었다 빼는 것처럼 사용할 수 있게 만든 것이다. 간단한 CRUD 저장: jpa.persist(member) 조회: Member member = jpa.find(memberId) 수정: member.setName("변경할 이름") 삭제: jpa.remove(member) 특히, 수정이 굉장히 간단하다. 객체를 변경하면 그냥 알아서 DB에 UPDATE Query가 나간다. 3. 유지보수 기존: 필드 변경 시 모든 SQL을 수정해야 한다. JPA: 필드만 추가하면 된다. SQL은 JPA가 처리하기 때문에 손댈 것이..
ORM(Object-relational mapping) 이란 Object-relational mapping (객체 관계 매핑) 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다. ORM 프레임워크가 중간에서 매핑해준다. 대중적인 언어에는 대부분 ORM 기술이 존재한다. ORM은 객체와 RDB 두 기둥 위에 있는 기술 이다. 어플리케이션과 데이터베이스를 연결해주는 것이 ORM 이라고 보면 된다. JPA(Java Persistence API) 란 EJB 과거의 자바 표준 (Entity Bean) 과거의 ORM 문제? 코드가 매우 지저분하다. API의 복잡성이 높다. (interface를 많이 구현해야 함) 속도가 느리다. Hibernate ORM 프레임워크, Open Sourc..