Spring 72

21. Spring Data JPA란 무엇일까?

Spring Data JPA는 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈입니다.JPA를 추상화시킨 Repository 인터페이스를 제공합니다.Repository 인터페이스는 Hibernate와 같은 JPA구현체를 사용해서 **구현한 클래스를 통해 사용됩니다.개발자들은 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있게 되었습니다.    Spring Data JPA에서는 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해줍니다.Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면,해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고, 이 클래스를 Spring ..

20. Spring의 트랜잭션

Spring의 트랜잭션Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공합니다. @Transactional(readOnly = true)public class SimpleJpaRepository implements JpaRepositoryImplementation { ... @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (entityInformation.isNew(entity)) { em.persist(entity);..

19. 영속성 컨텍스트의 기능

1차 캐시  영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있습니다.우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하시면됩니다.캐시 저장소는 Map 자료구조 형태로 되어있습니다.key에는 @Id로 매핑한 기본 키 즉, 식별자 값을 저장합니다.value에는 해당 Entity 클래스의 객체를 저장합니다.영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리합니다.저장  em.persist(memo); 메서드가 호출되면 memo Entity 객체를 캐시 저장소에 저장합니다.     조회-캐시 저장소에 조회하는 Id가 존재하지 않은 경우캐시 저장소 조회DB SELECT 조회 후 캐시 저장소에 저장-캐시 저장소에 조회하는 Id가 ..

18-1. Persistence Context 와 Transaction

요약 : 1. 트랜잭션은 데이터베이스 작업의 논리적 단위입니다. 데이터베이스에 대한 작업 단위 속에 다수의 요청(CRUD)이 포함될 수 있습니다. 하나의 트랜잭션에 속한 요청들은 모두 성공하거나(commit) 또는 모두 실패하게(rollback) 됩니다. 2. 영속성 컨텍스트는 엔티티 객체들이 저장되는 임시 공간입니다. 동일한 트랜잭션 내에서 같은 엔티티에 여러 번 CRUD 요청이 들어오면, 데이터베이스에서 꺼내오지 않고 이곳에 저장된 엔티티 객체들을 가져옵니다. 3. 따라서 영속성 컨텍스트는 트랜잭션에 종속적입니다. 트랜잭션이 종료되면 영속성 컨텍스트도 함께 정리되거나, 영속 상태에서 준영속 상태로 바뀌는 식으로 트랜잭션과 깊은 연관성을 가집니다.   상세 내용 : 1. Persistence Conte..

18. 영속성 컨텍스트(Persistance Context)와 트랜잭션(Transaction)

영속성 컨텍스트(Persistance Context)Persistence를 영속성, 지속성 이라는 뜻입니다.Persistence를 객체의 관점으로 해석하자면 ‘객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질’을 의미합니다.영속성 컨텍스트를 쉽게 표현해 보자면 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간입니다.개발자들은 JPA를 사용하여 DB에 데이터를 저장, 조회, 수정, 삭제할 수 있습니다.이러한 일련의 과정을 효율적으로 처리하기 위해 JPA는 영속성 컨텍스트에 Entity 객체들을 저장하여 관리하면서 DB와 소통합니다. 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요합니다.개..

17. JPA란 무엇일까? Entity란 무엇일까?

ORM : Object-Relational Mapping, 객체 관계 맵핑Object : "객체"지향 언어 (자바, 파이썬)Relational : "관계형" 데이터베이스 (H2, MySQL)Mapping 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM 기술들이 등장 하게 됩니다.  JPA: Java Persistence API 자바 ORM 기술에 대한 표준 명세    JPA는 애플리케이션과 JDBC 사이에서 동작되고 있습니다.JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해줍니다.또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있습니다. 하이버네이트(Hibernate)란?JPA 는 표준 명세이고, 이를..

15. IoC와 DI

좋은 코드란 무엇일까요?논리가 간단해야 한다.중복을 제거하고 표현을 명확하게 한다.코드를 처음 보는 사람도 쉽게 이해하고 수정할 수 있어야 한다.의존성을 최소화해야 한다.새로운 기능을 추가 하더라도 크게 구조의 변경이 없어야 한다.…  좋은 코드를 작성하기 위해서 지켜져야 하는 여러 원칙과 원칙을 지키기 위한 방법 중 하나     DI(의존성 주입)를 이해하려면 ‘의존성’에 대한 이해가 필요합니다!예를들어 우리가 다리를 다쳐서 목발을 사용하여 걷게 된다면 우리는 걷기 위해 목발에 의존하고 있는 것입니다. 즉, 우리는 목발에 의존성을 두게 되었다고 할 수 있습니다.코드를 통해 의존성에 대해 이해해보겠습니다.아래는 강하게 결합되어 있는, 즉 의존성이 높게 작성된 코드입니다.public class Consum..

14. 3 Layer Architecture

Controller클라이언트의 요청을 받습니다.요청에 대한 로직 처리는 Service에게 전담합니다.Request 데이터가 있다면 Service에 같이 전달합니다.Service에서 처리 완료된 결과를 클라이언트에게 응답합니다. Service사용자의 요구사항을 처리 ('비즈니스 로직') 하는 실세 중에 실세입니다.따라서 현업에서는 서비스 코드가 계속 비대해지고 있습니다.DB 저장 및 조회가 필요할 때는 Repository에게 요청합니다. RepositoryDB 관리 (연결, 해제, 자원 관리) 합니다.DB CRUD 작업을 처리합니다.   https://tes1194.tistory.com/96 이전 포스트에서 Controller에 작성되었던 모든 로직을 3 layer archietecture에 따라 분리해보..

13. JDBC란 무엇일까?

우리는 애플리케이션 서버에서 요청을 받고, 해당 요청을 처리하기 위해 데이터베이스와 소통을 해야합니다.따라서 실제로 서버가 데이터베이스와 어떠한 방법을 통해 소통하고 있는지 알아보려고 합니다.  JDBC의 등장배경 애플리케이션 서버에서 DB에 접근 하기 위해서는 여러가지 작업이 필요합니다.DB에 연결하기 위해 커넥션을 연결해야합니다.SQL을 작성한 후 커넥션을 통해 SQL을 요청합니다.요청한 SQL에 대한 결과를 응답 받습니다.  기존에 사용하던 MySQL 서버를 PostgreSQL 서버로 변경한다면 무슨일이 발생할까요?MySQL과 PostgreSQL은 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법 모두 다를 수 있습니다.따라서 애플리케이션 서버에서 작성했던 DB 연결 로직들을 ..