인프런

    [JPA] 값 타입 (기본값, 임베디드 타입, 불변객체, 비교, 컬렉션)

    자바 ORM 표준 JPA 프로그래밍 섹션9. 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체로 데이터가 변해도 식별자로 지속해서 추적이 가능하다. 예를 들어 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식이 가능한 경우이다. 추가로 공유가 가능하며 생명 주기 관리가 가능하다. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체이다. 식별자가 없고 값만 있기 때문에 변경 시 추적이 불가능하다. 예를 들면 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체되는 경우이다. 추가로 생명 주기가 엔티티에 의존되며 공유하지 않는 것이 안전하며 불가피할 경우 복사해서 사용할 수 있다. 이런 특성 때문에 불변 객체로 만드는 것이 ..

    [JPA] 엔티티 매핑 (매핑 어노테이션, DDL, 기본키 전략)

    자바 ORM 표준 JPA 프로그래밍 섹션4. 엔티티 매핑 매핑 어노테이션 1. 객체와 테이블을 매핑하는 어노테이션 : @Entity, @Table 2. 필드와 컬럼을 매핑하는 어노테이션 : @Column 3. 기본키를 매핑하는 어노테이션 : @Id 4. 연관관계를 매핑하는 어노테이션 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 달린 클래스는 JPA가 관리한다. 따라서 JPA를 사용하여 테이블과 매핑할 클래스는 @Entity를 필수적으로 사용해야 한다. 이때 주의점은 파라미터가 없는 public 또는 protected 기본 생성자는 필수로 있어야 한다. final, enum, interface, inner 클래스는 @Entity를 붙여 사용할 수 없다. ..

    [자바 ORM 표준 JPA 프로그래밍] 섹션3. 영속성 관리 - 내부 동작 방식

    영속성 컨텍스트 영속성 컨텍스트의 의미 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 의미를 가진다. 이는 DB에 저장한다는 의미보다는 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 의미를 가진다. 따라서 엔티티를 영속성 컨텍스트에 저장한다는 뜻이다. 이후 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다. 엔티티매니저와 영속성 컨텍스트는 N:1의 관계를 가진다. 엔티티의 생명주기 1. 비영속 (new, transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 2. 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 엔티티 매니..

    [자바 ORM 표준 JPA 프로그래밍] 섹션2. JPA 시작하기

    Hello JPA - 프로젝트 생성 강의와 다르게 진행한 점 DB 사용을 H2가 아닌 MySQL 사용 pom.xml 설정 dependency에 사용할 라이브러리를 적는다. 4.0.0 org.example ex1-hello-jpa 1.0-SNAPSHOT Archetype - ex1-hello-jpa http://maven.apache.org org.hibernate hibernate-entitymanager 5.3.10.Final mysql mysql-connector-java 8.0.28 라이브러리 버전 선택하는 방법 아래 페이지에서 내가 선택한 스프링 부트 버전의 Reference Docs > Dependency Versions를 확인한다. https://spring.io/projects/spring-..

    [자바 ORM 표준 JPA 프로그래밍] 섹션1. JPA 소개

    개요 JPA가 하는 일 반복적이고 단순한 SQL을 자동화하여 처리해준다. 과거에는 SQL을 직접 작성해야 했지만, 이제는 JPA에게 시키면 된다. JPA를 사용해서 얻는 이점 개발 생산성, 개발 속도가 증가하고 유지 보수에 용이하다. JPA를 실무에서 사용하기 어려운 이유 객체와 테이블을 올바르게 맵핑하고 설계하기 어렵기 때문이다. SQL 중심적인 개발의 문제점 SQL에 의존적인 개발 우리가 만드는 객체는 관계형 DB에 보관한다. 이 객체를 관계형 DB에 보관하려면, (저장하고/수정하고/삭제하고/조회하고 하려면) 수많은 쿼리 작성이 필요하다. 이게 바로 SQL 중심적인 개발의 문제점이다. 계속해서 INSERT INTO, UPDATE, SELECT, DELETE 쿼리를 무한 반복해야 하기 때문에 지루하다...

    [스프링부트와 JPA 활용 2] Section2. API 개발 고급 - 준비

    API 개발 고급 소개 조회용 샘플 데이터 입력 지연 로딩과 조회 성능 최적화 컬렉션 조회 최적화 페이징과 한계 돌파 OSIV와 성능 최적화 조회용 샘플 데이터 입력 userA JPA1 BOOK JPA2 BOOK userB SPRING1 BOOK SPRING2 BOOK 두 건의 주문이 접수된 것이다. jpashop/src/main/java/jpabook/jpashop/InitDb.java 추가 package jpabook.jpashop; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; import jpabook.jpashop.domain.*; import jpabook.jpashop.domain.item...

    [스프링부트와 JPA 활용 2] Section1 중 "회원 삭제 API"

    JPA 활용2를 듣던 도중, 회원 등록, 조회, 수정 API는 강의에서 다루나 삭제 API를 강의에서 안 다루어 직접 코드를 짜 보았다. MemberApiController.java 에 코드 추가 //회원 삭제 API @DeleteMapping("/api/v3/members/{id}") public ResponseEntity deleteMemberV1(@PathVariable ("id") Long id) { memberService.delete(id); return new ResponseEntity("회원이 성공적으로 삭제되었습니다", HttpStatus.OK); } MemberService.java 에 코드 추가 //회원 삭제 API @Transactional public void delete(Long..

    [스프링부트와 JPA 활용 2] Section1. API 개발 기본

    회원 등록 API 단순히 SQL로 API를 끌어오지 않아도 된다. JPA는 Entity가 있기 때문에 API를 설계할 때 주의해야 한다. API를 test 하기 위해 Postman을 설치한다. Download Postman | Get Started for Free Download Postman | Get Started for Free Try Postman for free! Join 25 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster. www.postman.com 템플릿 엔진을 사용하여 렌더링 하는 Controller와 API 스타일의 Controll..

    [스프링부트와 JPA 활용 1] Section7. 웹 계층 개발

    홈 화면과 레이아웃 jpashop/src/main/java/jpabook/jpashop/controller/HomeController.java 생성 package jpabook.jpashop.controller; import lombok.extern.slf4j.Slf4j; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home(){ log.info..

    [스프링부트와 JPA 활용 1] Section6. 주문 도메인 개발

    주문, 주문상품 엔티티 개발 구현 기능 상품 주문 주문 내역 조회 주문 취소 순서 주문 엔티티, 주문 상품 엔티티 개발 주문 리포지토리 개발 주문 서비스 개발 주문 검색 기능 개발 주문 기능 테스트 Order.java 수정 package jpabook.jpashop.domain; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Entity @Table(name="orders") @Getter @Setter public class Order { @Id @GeneratedVal..