목록Programing/Spring (73)
T_era
기존 JPA 코드 방식직접 EntityManagerFactory 및 EntityManager 생성 및 관리.각 트랜잭션 시작/종료(begin(), commit(), rollback()) 직접 관리.사용 후 EntityManager 및 EntityManagerFactory의 close() 메서드를 직접 호출하여 연결 종료 필요.public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("test"); EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransa..
객체지향 모델과 관계형 데이터베이스 모델 간의 불일치를 해결하고, 데이터베이스 테이블 간의 관계를 객체 간의 관계로 표현하는 데 사용된다.연관관계 매핑의 종류일대일(One-to-One): 하나의 엔티티가 다른 엔티티 하나와 연관되는 관계다. @OneToOne 어노테이션을 사용하여 매핑한다. 주 테이블에 외래 키를 두거나, 대상 테이블에 외래 키를 두는 방식이 있다.일대다(One-to-Many): 하나의 엔티티가 여러 개의 다른 엔티티와 연관되는 관계다. @OneToMany 어노테이션을 사용하며, 일반적으로 대상 테이블에 외래 키를 가진다. 컬렉션(List, Set 등)을 사용하여 연관된 엔티티들을 관리한다.다대일(Many-to-One): 여러 개의 엔티티가 하나의 다른 엔티티와 연관되는 관계다. @Man..
JPA Entity 생성 시 기본 키는 필수적으로 정의되어야 한다.사용되는 Annotation@Id: 해당 필드를 기본 키(Primary Key)로 지정한다.@GeneratedValue: 기본 키 값 자동 생성을 설정한다.기본 키 생성 방식수동 생성: 개발자가 직접 기본 키 값을 할당한다.@Idprivate Long id;// ...Tutor tutor = new Tutor(1L, "wonuk");자동 생성: @GeneratedValue 어노테이션을 이용하여 데이터베이스 또는 JPA 구현체에 기본 키 생성을 위임한다.@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;// ...@GeneratedValue 속성 (PK 생성 전략)영..
@Entity@Table(name = "board")public class Board { @Id private Long id; private Integer view; // @Column 생략 시 필드명과 동일 컬럼 자동 매핑 @Column(name = "title") // 객체 필드명과 DB 컬럼명 상이하게 매핑 private String bigTitle; @Enumerated(EnumType.STRING) // Enum 타입 매핑 (EnumType.STRING: Enum 이름 저장) private BoardType boardType; @Column(columnDefinition = "longtext") // DB 컬럼 타입 직접 정의 (대용량 문자열 저장) ..
@EntityJPA를 이용한 객체-테이블 매핑 시 필수 어노테이션.클래스 레벨에 적용하여 해당 클래스를 Entity로 명시.필수 조건:@Id 어노테이션을 통한 PK 필드 지정 필수.기본 생성자(No-args Constructor) 필수.final, enum, interface, inner 클래스 사용 불가.필드에 final 키워드 사용 불가.속성:name: Entity 이름 지정. 기본값은 클래스 이름. 혼동 방지를 위해 기본값 사용 (생략) 권장.@Entity // 해당 클래스를 Entity로 명시@Table(name = "tutor") // 매핑 테이블 이름 지정public class Tutor { @Id // PK 필드 지정 private Long id; private String ..
persistence.xml 설정 파일 정리 org.entity.Tutor 주요 설정 항목 요약: EntityManagerFactory 생성 시 사용될 이름 정의. 현재 값은 "test"임.org.entity.Tutor: JPA가 관리할 Entity 클래스 명시. 현재 org.entity.Tutor 클래스를 Entity로 등록함.: JPA 구현체(여기서는 Hibernate로 추정)의 상세 설정 정의.jakarta.persistence.jdbc.driver: 사용할 JDBC 드라이버 클래스 명시. MySQL Connector/J ..
영속성 컨텍스트는 Entity의 초기 상태를 저장하고, 트랜잭션 커밋 시 현재 상태와 비교하여 변경 사항 유무를 확인하는 기능이다.try { EntityManagerFactory emf = Persistence.createEntityManagerFactory("your_persistence_unit"); EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); Tutor tutor = em.find(Tutor.class, 1L); tutor.setName("수정된 이름"); // 객체 값 변경 시 변경 감지 Sy..
1. 동일성 보장 (Identity Guarantee)동일 트랜잭션 내 조회된 Entity는 동일 인스턴스 반환.영속성 컨텍스트의 1차 캐시 활용.DB 조회 후 1차 캐시에 저장, 이후 동일 조회 시 1차 캐시에서 반환.try { EntityManagerFactory emf = Persistence.createEntityManagerFactory("your_persistence_unit"); EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); // DB 조회, 1차 캐시에 저장 Tutor findTutor1 = ..
영속성 컨텍스트 (Persistence Context)Entity 객체를 영속 상태로 관리하는 일종의 캐시 공간.저장된 Entity는 데이터베이스와 자동 동기화됨.동일 트랜잭션 내에서는 동일한 객체 유지.Entity데이터베이스에서 저장 가능한 데이터의 집합.JPA에서는 데이터베이스 테이블을 나타내는 클래스.애플리케이션과 데이터베이스 사이의 Entity 관리 작업 공간.Entity 생명주기비영속 (new/transient): 영속성 컨텍스트가 모르는 새로운 상태, 데이터베이스와 무관.영속 (managed): 영속성 컨텍스트에 저장 및 관리되는 상태, 데이터베이스와 동기화.준영속 (detached): 영속성 컨텍스트에 저장되었다가 분리되어 더 이상 관리되지 않는 상태.삭제 (removed): 영속성 컨텍스트..
공통 관심사 (횡단 관심사)여러 코드 영역에서 공통적으로 사용되는 부가적인 기능.Filter는 공통 관심사 처리를 위해 등장함.핵심 기능 vs 부가 기능핵심 기능: 애플리케이션의 주된 목적 수행 (CRUD 등).부가 기능: 핵심 기능에 추가적인 기능 제공 (로깅, 보안, 인증 등).예시: 로그인 사용자만 특정 API 접근 허용 요구사항Controller마다 로그인 확인 로직 반복 시 코드 중복 및 유지보수 어려움 발생.@RestController@RequestMapping("/post")public class PostController { @PostMapping public PostResponseDto create(PostCreateRequestDto request) { // 로그..