JPA

Backend/JPA

[JPA] 프록시, 즉시&지연 로딩, 영속성 전이, 고아 객체

✔ 프록시(Proxy) 만약 비즈니스 로직에서 Member에 대한 정보를 가지고올 때 .find()를 통해 Member Entity와 연관관계 매핑된 Entity를 join하여 한번에 다 가지고온다. 하지만 Member에 대한 정보만 쓰려는 케이스는 불필요한 다른관계의 Entity정보까지 join을 통해 가지고오게 되는데 둘 다 쓰는 케이스에서는 편리하겠지만 Member에대한 정보만 사용하는 케이스에서는 낭비가 될 수 있다. 이러한 불필요한 낭비를 JPA는 프록시와 지연로딩을 사용하여 해결하고 있다. 실제클래스를 상속 받아서 만들어지고 겉 모양이 같다. EntityManager.find() - 데이터베이스를 통해 실제 엔티티 객체 조회 EntityManager.getReference() - 데이터베이스 ..

Backend/JPA

[JPA] 상속관계 매핑, @MappedSuperclass

🤔 상속관계 매핑? 관계형 데이터베이스는 상속관계라는 개념이 없다. 하지만 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하기 때문에 이점을 이용하여 상속관계 매핑을 하고있다. (객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑) DB에서 슈퍼타입과 서브타입의 논리모델을 디자인 했을때 실제 물리 모델로 구현하는 전략은 3가지가 있다. ✔ 조인전략(JOINED) 가장 정규화된 방법으로 각테이블을 join하는 방식으로 데이터 를 저장하게되며 데이터가 정규화 되어 저장되기 때문에 중복되는 데이터(name, price)를 줄일 수 있고, 객체의 관계와 가장 유사하다. @Inheritance(strategy = InheritanceType.JOINED)과 객체의 상속(extends)을 사용하..

Backend/JPA

[JPA] 다양한 연관관계 매핑 ( ManyToOne, OneToMany, OneToOne, ManyToMany )

✔ 연관관계 매핑시 고려사항 3가지 다중성 : @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 단방향, 양방향 연관계의 주인 어노테이션을 사용하여 관계를 정확히 매핑해주고, 객체(Entity)를 단방향 또는 양방향으로 사용할지 충분히 고려한 후 양방향으로 설정 했다면 연관관계 주인을 설정함으로써 한쪽에서만 등록,수정이 일어날 수 있도록 한다. 🔎 @ManyToOne 다대일 [N:1] 💡 단방향 가장 많이 사용되는 연관관계로 한쪽(Member)에서만 조회, 등록, 수정 하도록 매핑 💡 양방향 양방향으로 설정하게 되면 Member와 Team객체에 서로 참조할 수 있는 필드를 생성하여 각각의 관계를 설정해준다. 이렇게되면 양쪽에서 등록, 수정이 일어날 수 있기 때문에 연관관..

Backend/JPA

[JPA] 객체 지향 모델링과 양방향,단방향 연관관계 매핑

🤔 기존의 문제점 객체를 테이블에 맞추어 모델링 try{ //팀 등록 Team team = new Team(); team.setName("TeamA"); em.persist(team); //맴버 등록 Member member = new Member(); member.setUsername("member1"); member.setTeamId(team.getId()); // **외래키 식별자를 직접 다루고 있다.** em.persist(member); //조회 Member findMember = em.find(Member.class, member.getId()); Long findTeamId = findMember.getTeamId(); // 맴버객체에 저장된 팀아이디 즉 외래키를 찾는다 Team findTe..

Backend/JPA

[JPA] JPA 가장 중요한 2가지 - 엔티티 매핑

🤔 엔티티 매핑? 🔎 Entity 직역하면 '실체', '독립체' 라는 뜻으로 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 '어떤 것(Thing)'이라고 말할 수 있다. (DB에 저장되거나 가져와지는 객체라고 생각하면 편할것 같습니다. ) 🔎 Mapping 일반적인 의미로는 하나의 요소를 다른 요소와 대응시키거나 연결하는 프로세스를 말합니다. 📌 Entity(객체)와 관계형 데이터베이스(테이블, 컬럼, 관계 등)를 Mapping 즉 서로 대응시켜 연결하는 과정으로 보통 어노테이션(Annotation)을 사용하여 이루어지며 Mapping을 통해 JPA는 객체와 데이터베이스 간의 변환을 자동으로 처리할 수 있게 됩니다. ✔ Mapping 구분 Annotation 객체와 테이블 매핑 @Entity, @..

Project/SpringBoot+JPA 게시판

[SpringBoot + JPA 게시판 만들기] 요구사항 및 프로젝트 설계 - 1

💡 시작하기 전에 " 완벽주의를 경계하라 " 완벽을 추구한 나머지 실수와 실패를 두려워 하게되고, 과정은 생각지 않고 결과에만 집중한다. 라는 뜻으로 해석했다. 지금의 나처럼 필요한 스택을 모두 배워서 거창한 프로젝트를 해야지 라는 생각만 할 뿐 시작조차 안하고 있는 나에게 해주고 싶은 말이다. 그래서 일단은 시작하기로 했다 🔥 💻 사용 기술 - 프레임워크 : Spring - ORM : JPA - 데이터베이스 : MariaDB - 템플릿 엔진 : thymeleaf ✔ 게시판 기능 회원가입 로그인/로그아웃 게시물 목록 조회 게시물 상세 조회 게시물 등록 게시물 수정 게시물 삭제 게시물 목록 페이징 게시물 검색 🔎 페이징, 검색 과 같은 더 필요한 기능들은 추후에 기능확장을 통해 추가해볼 생각입니다. ✔ E..

장용석
'JPA' 태그의 글 목록