본문 바로가기

Spring Study44

[JPA] 엔티티 매핑 (Entity Mapping) 엔티티 매핑 종류 · 객체와 테이블 매핑: @Entity, @Table · 필드와 컬럼 매핑: @Column · 기본 키 매핑: @Id · 연관관계 매핑: @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity · @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. · JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 · 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) · final 클래스, enum, interface, inner 클래스 사용 X · 저장할 필드에 final 사용 X 속성 · name - JPA에서 사용할 엔티티 이름 지정 - 기본값: 클래스 이름을 그대로 사용 - 같은 클래스 이름이 없으면 가급적 기본값 사용 .. 2023. 10. 17.
[JPA] 영속성 관리 JPA에서 가장 중요한 2가지 · 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) · 영속성 컨텍스트 영속성 컨텍스트 · JPA를 이해하는데 가장 중요한 용어 · "엔티티를 영구 저장하는 환경" 이라는 뜻 · EntityManager.persist(entity); J2SE 환경 J2EE, 스프링 프레임워크 같은 컨테이너 환경 엔티티 매니저와 영속성 컨텍스트가 N : 1 엔티티의 생명주기 · 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 · 영속(managed): 영속성 컨텍스트에 관리되는 상태 · 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 · 삭제(removed): 삭제된 상태 영속 / 비영속 / 준영속 .. 2023. 10. 17.
[JPA] JPA 기본 개념 JPA(Java Persistence API)란? Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함 JPA 구동 방식 JPA - CRUD - C(Create): jpa.persist(member) - R(Read): Member member = jpa.find(memberId) - U(Update): member.setName(". . .") - D(Delete): jpa.remove(member) 객체와 테이블 생성, 매핑 import javax.persistence.Entity; imp.. 2023. 10. 14.
[DataBase] 스프링 트랜잭션 이해 트랜잭션(Transaction) 이란? · 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. · 스프링은 PlatformTransactionManager라는 인터페이스를 통해 트랜잭션을 추상화한다. PlatformTransactionManager 인터페이스 package org.springframework.transaction; public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException; void commit(Transaction.. 2023. 10. 6.
[DataBase] JPA / Spring Data JPA JPA란? - Java Persistence API - 자바 진영의 ORM 표준 기술 - JPA는 인터페이스 모음 - Hibernate, EclipseLink, DataNucleus 3가지 구현체 사용 JPA를 사용해야 하는 이유 - SQL 중심적인 개발에서 객체 중심으로 개발 - 생산성, 유지보수 편리함 / 성능 최적화 기능 1. 1차 캐시와 동일성(identity) 보장 2. 트랜잭션을 지원하는 쓰기 지연 3. 지연 로징(Lazy Loading) - 패러다임 불일치 해결 JPA - CRUD - Create(저장): jpa.persist(. . .) - Read(조회): jpa.find(. . .) - Update(수정): member.setName(". . .") - Delete(삭제): jpa.re.. 2023. 10. 3.
[DataBase] 데이터 접근 기술 - 테스트 테스트 - 데이터베이스 분리 로컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용하면 테스트에서 문제가 발생한다. 이를 해결하기 웨해 테스트를 다른 환경과 철저하게 분리해야 한다. 가장 간단한 방법으로는 테스트 전용 데이터베이스를 별도로 운영하는 것이다. 테스트에서 매우 중요한 원칙 1. 테스트는 다른 테스트와 격리해야 한다. 2. 테스트는 반복해서 실행할 수 있어야 한다. 테스트가 끝날 때마다 추가한 데이터에 DELETE SQL을 사용해도 되지만, 가장 좋은 방법은 트랜잭션, 롤백이다. 테스트 - 데이터 롤백 테스트가 끝나고 트랜잭션을 강제로 롤백해버리면 데이터가 제거된다. 테스트를 하면서 데이터를 이미 저장했는데, 중간에 테스트가 실패해 롤백을 호출하지 못해도 트랜잭션을 커밋하지 .. 2023. 9. 25.
[DataBase] 데이터 접근 기술 데이터 접근 기술 적용 데이터 접근 기술 - JdbcTemplate - MyBatis - JPA, Hibernate - 스프링 데이터 JPA - Querydsl 이 기술들은 크게 2가지로 나눌 수 있다. SQLMapper - 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다. - JDBC를 직접 사용할 때 발생하는 여러가지 중복을 제거해주고, 기타 개발자에게 여러가지 편리 기능을 제공한다. ex) JdbcTemplate, MyBatis ORM 관련 기술 - SQLMapper는 SQL을 개발자가 직접 작성해야 하지만, JPA는 기본적인 SQL을 대신 작성하고 처리해준다. 개발자는 저장하고 싶은 객체를 마치 자바 컬렉션에 저장하고 조회하듯이 사용하면 ORM 기술이 데이터베이스에 해당.. 2023. 9. 22.
[DataBase] 예외 처리 체크 예외와 인터페이스 [DataBase] 자바 예외 (Exception) 예외 계층 예외 계층 그림 Error는 언체크 예외이며, 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 이 예외는 잡으려고 해서는 안된다. 따라서 E wodlszz.tistory.com 이전 글에서 말한 것처럼 서비스 계층은 가급적 특정 구현 기술에 의존하지 않고, 순수하게 유지하는 것이 좋다. 이렇게 하려면 예외에 대한 의존도 함께 해결해야 하는데, 예를 들어 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면 SQLException 체크 예외를 RuntimeException(언체크 예외)로 전환해서 서비스 계층에 던지면 된다. 이렇게 하면 예외를 무시할 수 있게.. 2023. 9. 21.
[DataBase] 자바 예외 (Exception) 예외 계층 예외 계층 그림 Error는 언체크 예외이며, 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 이 예외는 잡으려고 해서는 안된다. 따라서 Error의 상위인 Throwable 예외도 잡으면 안된다. 애플리케이션은 이러한 이유로 Exception부터 필요한 예외로 생각하고 잡아야 한다. Exception은 체크 예외이며, 애플리케이션 로직에서 사용할 수 있는 실직적인 최상위 예외이다. Exception과 그 하위 예외는 모두 체크 예외이지만 RuntimException은 언체크 예외이다. 예외 기본 규칙 1. 예외는 잡아서 처리하거나 던져야 한다. 2. 예외를 잡거나 던질 때는 지정한 예외 뿐 아니라 자식들도 함께 처리된다. 예외 처리 예외 던짐 예외를.. 2023. 9. 20.
[DataBase] 트랜잭션 (Transaction)2 애플리케이션 구조 애플리케이션은 3가지 계층으로 나눌 수 있다. Controller, Service, Repository 프레젠테이션 계층 (Controller) - UI와 관련된 처리 담당 - 웹 요청과 응답 - 사용자 요청을 검증 - 사용 기술: Servlet, HTTP 같은 웹 기술, 스프링 MVC 서비스 계층 (Service) - 비즈니스 로직 담당 - 사용 기술: 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이터 접근 계층(Repository) - 실제 데이터베이스에 접근하는 코드 - 사용 기술: JDBC, JPA, File, Redis, Mongo ... 이 중 가장 중요한 곳은 서비스 계층이다. 서비스 계층은 시간이 흘러 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술이 다른 .. 2023. 9. 19.