본문 바로가기

준비중

토비의 스프링 vol2 필요한 부분 공부하기(2)

반응형

해당 내용은 토비의 스프링을 참조하여 공부한 내용을 작성했습니다.

 

데이터 액세스 계층은 DAO 패턴이라 불리는 방식으로 부니하는 것이 원칙이다.

의미있는 비즈니스 로직을 가진 엔터프라이즈 애플리케이션이라면 데이터 액세스 계층을 DAO 패턴으로 분리해야 한다.

 

DAO는 인터페이스를 이용해 접근하고 DI 되도록 만들어야 한다. DAO 인터페이스에는 구체적인 데이터 액세스 기술과

관련된 어떤 API나 정보도 노출하지 않는다. 인터페이스를 만들 때 습관적으로 DAO 클래스의 모든 public 메소드를 추가하지 않도록 주의하자.

 

데이터 액세스 중에 발생하는 예외는 대부분 복구할 수 없다. 따라서 DAO 밖으로 던져질 때는 런타임 예외여야 한다.

 

JDBC는 자바의 데이터 액세스 기술이 되는 로우레벨의 API다. JDBC는 모든 자바의 데이터 액세스 기술의 근간이 된다.

엔티티 클래스와 애노테이션을 이용하는 최신 ORM 기술도 내부적으로는 DB와의 연동을 위해 JDBC를 이용한다.

안정적이고 유연한 기술이지만 점차 로우레벨 기술로 취급되고 있는 추세이다.

 

iBatis는 자바오브젝와 SQL 문 사이의 자동매핑 기능을 지원하는 ORM 프레임워크다. iBatis는 코드 내에서 자바오브젝트만을 이용해 데이터 로직을 작성할 수 있게 해주고, SQL을 별도의 파일로 분리해서 관리하게 해주며, 오브젝트 - SQL 사이의 파라미터 매핑 작업을 자동으로 해주기 때문에 많은 인기를 얻고 있는 기술이다.

본격적인 SQL 매핑 기법을 활용하고 iBatis가 제공하는 고급 기능을 사용하고 싶다면 iBatis를 사용하면 된다.

 

JPA는 persistence 관리와 ORM을 위환 표준 기술이다.

SQL을 만들어 DB와 주고받으면서 데이터 액세스 로직을 처리하는 방식이다.

 

*ORM 기술을 사용하면 SQL문장을 직접 작성하지 않아도 된다.

 

JPA 퍼시스턴스  컨텍스에 접근하고 엔티티 인스턴스를 관리하려면 JPA의 핵심 인터페이스인 EntityManager를 구현한 오브젝트가 필요하다. 

JPA를 사용할 때는 어떤 방식을 사용하든 반드시 EntityManagerFactory를 빈으로 등록해야 한다.

스프링의 EntityManager를 사용하려면 적절한 트랜잭션 매니저가 등록되어 있어야 한다. 

스프링의 JDBC는 자동 트랜잭션 모드를 갖고 있기 때문에 명시적으로 트랜잭션 관리를 하지 않고 트랜잭션 매니저가 없어도 동작하지만 JPA는 반드시 트랜잭션 안에서 동작하도록 설계되어 있다.

 

하이버네이트는 가장 크게 성공한 오픈소스 ORM 프레임워크다. 

POJO 프로그래밍을 전면에 내세우면서 가볍고 단순한 코드로 객체지향 기술을 살렸다.

하이버네이트는 그 자체로 독립적인 API와 기능을 가진 ORM 제품이면서 동시에 JPA의 핵심 구현 제품이기도 하다.

 

하이버네이트에는 JPA의 EntityManagerFactory처럼 핵심 엔진 역할을 하는 SessionFactory가 있다.

 

templete에 대한 고찰적론이 필요함.  또한 이에 맞춰서 하이버네이트 다 읽고 JPA랑 비교 분석이 들어가야 될 것 같음

public class MemberDAO {
    private HibernateTemplate hibernateTemplate;
    
    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory){
        hibernateTemplate = new HibernateTemplate(sessionFactory);
    }
    public void addMember(Member member) {
        hibernateTemplate.save(member);
    }
}

하이버네이트 사용시 이러한 code를 사용

 

허나 나의 repository를 보면 

package pinlib_studio2.pinlibstudiosecurityspring.data.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import pinlib_studio2.pinlibstudiosecurityspring.data.entity.Member;

import java.util.Optional;

@Repository
public interface MemberRepository extends JpaRepository <Member, Long> {

    Optional<Member> findByMemberId(String memberId);
    boolean existsByMemberId(String memberId);
}

JPA를 사용하는 것을 알 수 있다.

그렇다면 토비의 스프링을 추가적으로 더 돌파하기전에 

토비의 스프링 VOL1. templete call/back 이런거 좀 봐주고 VOL2 로 돌아와서 JPA 다시 구체적으로 싹 조지자

 

반응형

'준비중' 카테고리의 다른 글

자바 복습하기 (연산자, 조건문과 반복문편)  (0) 2023.07.31
자바 복습하기 (변수편)  (0) 2023.07.30
ios와 aws  (0) 2023.07.11
토비의 스프링 vol2 필요한 부분 공부하기(1)  (0) 2023.07.05
Spring Security + jwt  (0) 2023.06.30