Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #auto scailling #lauch template #ec2 instace #private #subnet
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #second nat #gateway #routing table #route53 #고가용성 #private subnet #
- 업로드 #lambda #함수 #모바일 이미지 #썸네일 이미지
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #vpc #인프라 구축 #t.g #target group #alb #application #load #balancer #web #server
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- aws #아키텍트 #과정 #vpc #인프라 구축 #alb #load balancer #t.g #target #group #haproxy #high ability #db #replica #region
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 스토리지 #objects storage #events #upload #알림
- 비트 #바이트 #이진수
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 #스토리지 #isci #이미지 #업로드
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #고가용성 #테스트 #alb #application #load balancer #application
- 쓰레드 #쓰레드풀 #프로세스
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #trigger #python3.9 #패키지 #
- aws #아키텍트 #과정 #vpc #인프라 구축 #aurora #database #rds #rdbs #load #balancer #web #page #haproxy
- aws #아키텍트 #과정 #vpc #인프라 구축
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- 썸네일 #이미지
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #alb #application #load #balancer #security #group #igw #ec2 #vpc #virtual #private #cloud
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #message #queue #sns구독
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #round robin #process #high ability #auto scailling #app server #launch template
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- aws #아키텍트 #과정 #vpc #인프라 구축 #ec2 #instance #launch #template #생성 #ami #amazone #machine #image
- aws #아키텍트 #과정 #vpc #인프라 구축 #db #장애조치 #reand only #replica #events
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #endpoint #cloudwatch #monitoring
- aws #아키텍트 #과정 #vpc #인프라 구축 #amazon sns #server #less #architecture
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #replica #복제본 #aurora #database #고가용성
Archives
- Today
- Total
요리사에서 IT개발자로
스파르타 부트캠프 Spring Master 2강 영속성 컨텍스트 본문
영속성 컨텍스트란
지속성을 의미한다(persistence)
Persisten를 객체의 관점으로 해석해보았을 경우
객체가 생명(객체가 유지되는 시간)이나
공간(객체의 위치)을 자유롭게 유지하고
이동할 수 있는 객체의 성질을 의미한다.
결국 Entity객체를 효율적으로 쉽게 관리하기 위하여 만들어진 공간이다.
개발자들은 직접SQL을 작성하지 않아도
JPA를 사용하여 DB에 데이터를 저장, 조회, 수정, 삭제가 가능하다.
이런 과정을 효율적으로 하기위해
JPA는 영속성 컨텍스트에 Entity객체들을 저장하여 관리하면서 DB와 소통한다.
영속성 컨텍스트에 접근하여
Entity객체를 조작하기 위해서는EntityManager가 필요하다.(관리자)
EntityManager를 통해 Entity를 저장, 조회, 수정, 삭제 가능하다.
EntityManager는 EntityManagerFactory를 통해 생성하여 사용할 수 있다.
EntityManagerFactory는 일반적으로
DB하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용된다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityManagerFactory emf = Persistence.createEntityManagerFactory()를 호출하면
persistence.xml의 정보를 토대로 EntityManagerFactory를 생성한다.
EntityManager em = emf.createEntityManager();코드를 호출하면
EntityManagerFactory를 사용하여 EntityManager를 생성할 수 있다.
트랜잭션이란
DB데이터들의 무결성과 정합성을 유지하기위한 하나의 논리적 개념이며
DB데이터들을 안전하게 관리하기 위해서 생긴 개념이다.
여러개의 SQL이 하나의 트랜잭션에 포함될 수 있다.(단 하나라도 실패하면 모든 변경을 되돌린다.
JPA는 DB의 이러한 트랜잭션 개념을 사용하여 효율적으로 Entity를 관리한다.
영속성 컨텍스트에 Entity객체들을 저장했다하여 DB에 바로 반영되지 않는다.
DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다면
마지막에 영구적으로 변경을 반영하는 것처럼
JPA에서도 영속성 컨텍스트로 관리하고 있는
변경이 발생한 객체들의 정보를 쓰기 지연 저장소에 전부 가지고있다가
마지막에 SQL을 한번에 DB에 요청해 변경을 반영한다.
즉 commit하기 전까지는 반영하지않는다.
@Test
@DisplayName("EntityTransaction 성공 테스트")
void test1() {
EntityTransaction et = em.getTransaction(); // EntityManager 에서 EntityTransaction 을 가져옵니다.
et.begin(); // 트랜잭션을 시작합니다.
try { // DB 작업을 수행합니다.
Memo memo = new Memo(); // 저장할 Entity 객체를 생성합니다.
memo.setId(1L); // 식별자 값을 넣어줍니다.
memo.setUsername("Robbie");
memo.setContents("영속성 컨텍스트와 트랜잭션 이해하기");
em.persist(memo); // EntityManager 사용하여 memo 객체를 영속성 컨텍스트에 저장합니다.
et.commit(); // 오류가 발생하지 않고 정상적으로 수행되었다면 commit 을 호출합니다.
// commit 이 호출되면서 DB 에 수행한 DB 작업들이 반영됩니다.
} catch (Exception ex) {
ex.printStackTrace();
et.rollback(); // DB 작업 중 오류 발생 시 rollback 을 호출합니다.
} finally {
em.close(); // 사용한 EntityManager 를 종료합니다.
}
emf.close(); // 사용한 EntityManagerFactory 를 종료합니다.
}
et.begin(); = > 트랜잭션 시작 명령어
et.commit(); => 트랜잭션의 작업들을 영구적 DB에 반영하는 명령어
et.rollback(); => 오류발생시 전부 취소하며 이전상태로 되돌리는 명령어
반응형