Backend

3장에서는 엔티티 매핑에 대한 내용을 다루고 있습니다. 엔티티 매핑: 객체와 관계형 데이터베이스의 테이블을 매핑하는 것을 의미합니다. 이를 통해 객체를 데이터베이스에 저장하고 조회할 수 있습니다. 영속성 컨텍스트: 엔티티를 영구 저장하는 환경입니다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다. 엔티티의 생명주기 비영속: 영속성 컨텍스트와 전혀 관계가 없는 상태 (저장을 안 한 상태) 영속: 영속성 컨텍스트에 저장된 상태 (저장한 상태 //em.persist()) 준영속: 영속성 컨텍스트에 저장되었다가 분리된 상태 (//em.detach(), em.clear(), em.close()) 삭제: 삭제된 상태 (//em.remove()) 영속성 ..
1장에서는 객체지향적인 설계와 관계형 데이터베이스를 매핑하는 ORM(Object-Relational Mapping)의 등장 배경과 이점, 그리고 JPA(Java Persistence API)를 알 수 있었습니다. 객체지향적인 설계와 관계형 데이터베이스의 불일치 문제 객체지향적인 설계와 관계형 데이터베이스 간의 불일치 문제 등록, 수정, 삭제, 조회용 SQL을 반복해서 작성 객체지향의 장점을 포기하고 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 함 ORM 기술의 등장 배경 객체 모델링을 적용하였으나 세밀화 될 수록 객체 저장 및 조회가 점점 어려워 짐 관계형 데이터베이스와 객체 간의 차이를 메우기 위해 더 많은 SQL 작성 객체 모델이 점점 데이터 중심의 모델로 변해감 ORM: 객체와 관계형 ..
docker-compose.yml version: '3' services: db: container_name: db image: mysql restart: on-failure environment: MYSQL_DATABASE: mysqldb MYSQL_ROOT_HOST: '%' MYSQL_ROOT_PASSWORD: 1234 TZ: 'Asia/Seoul' ports: - "3306:3306" volumes: - data_mysqldb:/var/lib/mysqldb networks: - app-tier tty: true api-server: container_name: api-server build: context: ./ command: gradle bootRun ports: - "8080:8080" net..
엔티티에는 가급적 Setter를 사용하지 말자 * Setter가 모두 열려있으면 변경 포인트가 너무 많아서 유지 보수가 힘들어진다. 모든 연관관계는 지연로딩으로 설정하자 * 즉시로딩( EAGER )은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. * 실무에서 모든 연관관계는 지연로딩( LAZY )으로 설정해야 한다. * 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다. * @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다. @ManyToOne(fetch = FetchType.LAZY) 컬렉션은 필드에서 초기화 하자. * 컬..
lim.dev
'Backend' 카테고리의 글 목록 (4 Page)