본문 바로가기

항해99

23.08.28 항해 99 16기 주특기 Spring 3일차

오늘 공부한 것

* Spring 입문주차 1주차 강의 듣기

* Spring 입문주차 2주차 강의 듣기

 

1주차 강의만 듣고 LV1 테스트를 시작해보려했다하지만 다른 분들께 들어보니 2주차 강의도 들어야잘 진행이 된다고 하셨다 그래서 1주차 강의 다 듣고 2주차 강의도 모두 들었다

 

Ioc(제어의 역전) 설계원칙

                            예) 맛있는 김치볶음밥을 만들기 위한 원칙

 

DI(의존성 주입) 디자인 패턴

                           예) 맛있는 김치볶음밥을 만들기 위한 레시피

 

Bean Spring이 관리하는 객체 @Component 사용하면 Bean 객체 등록 가능

 

Spring IoC 컨테이너 Been을 모아둔 컨테이너

 

ORM 객체와 데이터베이스를 맵핑해주는 도구

 

JPA JAVA ORM 기술의 대표적인 표준 명세

        어플리케이션과 JDBC 사이에서 동작됨 객체를 통해 DB데이터를 다룰 수 있어 매우 쉽게 DB 작업 처리가능

        영속성 컨텍스트로 관리하고 있는 변경이 발생한 객체들의 정보를 쓰기 지연 저장소에 전부 가지고 있다가 마직막에

        SQL을 한번에 DB에 요청해 변경을 반영함

 

하이버네이 JPA를 구현하는 프레임워크

 

Entity JPA에서 관리되는 클래스 즉 객체 DB 테이블과 매핑되어 JPA에 의해 관리됨

           1) 비영속 new 연산자를 통해 인스턴스화 된 Entity 객체 아직 영속성 컨텍스트에 저장되지 않았기에 JAP 관리를

                           받지않음

           2) 영속 em.persist() 비영속 EntityEntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로

                        만듬

           3) 준영속 영속성 컨텍스트에 저장되어 관리되다가 분리된 상태

                              (1) em.detach(entity) 특정 Entity를 준 영속 상태로 전환

                              (2) em.clear() 컨텍스트를 완전 초기화함 영속성 켄텍스트의 모든 Entity를 준영속 상태로 전환 틀은

                                                     유지하지만 내용은 비워 새로만든 것과 같은 상태가 됨 따라서 영속성 컨텍스트를

                                                     계속 이용가능

                              (3) em.close() 영속성 컨텍스트가 관리하던 Entity들을 모두 준영속 상태로 변경 종료되었기 때문에

                                                     계속해서 영속성 컨텍스트 사용 불가

                              (4) em.merge(entity) 준영속 상태에서 다시 영속상태로 바꿈

                                                                  전달받은 entity를 사용하여 새로운 영속 상태의 Entity를 반환함

            4) 삭제 em.remove(entity) 조회해온 영속상태의 Tntity를 파라미터로 전달 받아 삭제 상태로 전환

 

영속성 컨텍스트 객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할 수 있는 개체의

                           성질

                           Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간

                           1) 1차 캐시 저장하는 Entity 객체들이 1차 캐시 즉 캐시 저장소에 저장됨

                                               Map 자료구조 형태임

                                               key에는 @id로 매핑한 기본키 즉 식별자 값 저장

                                               value에는 해당 Entity 클래스 객체 저장

                                               캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리함

                            2) 쓰기 지연 저장소 SQL을 모아두고 있다가 트랜직션 commit 후 한번에 DB 반영

                 em.flush() 쓰기 지연 저장소의 SQL을 데이터베이스에 요청해주는 메서드

                            3) 변경 감지 Entity가 변경될 때 마다 Update SQL 이 쓰기 지연 저장소에 저장되는건 비효율적이기에

                                                이를 막아주는 것

 

EntityManagerFactory /resources/META-INF/persistence.xml을 만들어 정보를 넣어두어서 DB에 대한 정보 전달해야함

 

트랜젝션 DB데이터들을 안전하게 관리하기 위해서 생겨난 개념 여러개의 SQL이 하나의 트랜잭션에 포함될 수 있다

                SQL이 성공적으로 수행되면 DB에 영구적으로 변경을 반영하지만 단하나라도 실패하면 모든 변경을 되돌림

 

Spring 컨테이너 영속성 컨텍스트와 트랜잭션의 생명주기가 일치 트랜잭션이 유지되는 동안 영속성 컨텍스트도 계속 유지되므로 기능을 사용할 수 있다

 

Spring부트 JPA JPA를 쉽게 사용할 수 있게 만들어 놓은 하나의 모듈

                           JPA 추상화 시킨 Repository 인터페이스를 제공함