스프링이나 J2EE 컨테이너 환경에서 JPA를 사용하면 영속성과 트랜잭션을 대신 관리해주므로 편리하게 애플리케이션을 개발할 수 있다. 하지만, 컨테이너 환경에서 동작하는 JPA의 내부 동작 방식을 이해하지 못하면 문제가 발생했을 때 해결하기 쉽지 않다. 트랜잭션 범위의 영속성 컨텍스트 스프링이나 J2EE 컨테이너 환경에서는 컨테이너가 제공하는 전략을 따라야 한다. 스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 사용한다. 말 그대로 트랜잭션과 영속성 컨텍스트의 생명주기가 같다라는 의미이다. 트랜잭션이 시작되면 영속성 컨텍스트가 생성되고 트랜잭션이 종료되면 영속성 컨텍스트가 종료된다. 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 스프링 프레임워크를 사..
JPA
대부분의 데이터 접근 계층 Data Access Layer 은 CRUD 코드를 반복해서 개발해야 한다. JPA를 사용해서 데이터 접근 계층을 개발할 때도 이 같은 문제가 발생한다. 이런 문제를 해결하려면 제네릭과 상속을 적절히 사용해 공통 부분을 처리하는 부모 클래스를 만들면 된다. 스프링 데이터 JPA 소개 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트이다. 이 프로젝트는 데이터 접근 계층을 개발할 때 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결한다. 우선 CRUD를 처리하기 위한 공통 인터페이스를 제공한다. 그리고 리포지토리를 개발할 때, 인터페이스만 작성하면 실행시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다. 따..
496p까지 11장_웹 애플리케이션 제작 사용할 기술 뷰 → JSP, JSTL 웹 계층 → Spring MVC 데이터 기반 저장 → JPA, 하이버네이트 기반 프레임워크 → 스프링 빌드 → 메이븐 프로젝트 환경설정 진행 순서 프로젝트 구조 분석 메이븐과 라이브러리 설정 스프링 프레임워크 설정 메이븐 build IntelliJ - Maven Build 하기 처음에 mvn tomcat7:run을 해도 계속 오류가 떴다. 여러가지 찾아봤었는데 자바 버전 문제나 플러그인 문제인가 싶었는데 결국은 프로젝트가 잘못설정되어 있어서 그런거였다. mvn goal 실행할 때 프로젝트가 잘 설정되어있는지 꼭 확인하자.. pom.xml : POM 모델 버전 : 프로젝트 그룹명 : 프로젝트를 식별하는 아이디 : 프로젝트 버전 ..
10장_객체지향 쿼리 언어 이 장 중심 내용은 아래와 같다. 객체지향 쿼리 소개 JPQL Criteria QueryDSL Native SQL 객체지향 쿼리 심화 JPQL은 가장 중요한 객체지향 쿼리 언어이다. Criteria, QueryDSL 등은 JPQL을 좀 더 쉽게 사용할 수 있게 해주는 것에 불과하다. 따라서, 개발자는 JPQL에 능숙해야 한다. 객체지향 쿼리 소개 EntityManager.find() 메소드를 이용하면 하나의 엔티티를 조회할 수 있고, 여기서 연관된 정보를 조회하려면 객체 그래프 탐색을 하면된다. 하지만, 이 기능만으로는 부족하다. 그렇다고 해서 처음 조회할 때 모든 엔티티를 조회하는 것도 현실적이지 않다. 결국, 데이터는 데이터베이스에 있으므로 SQL을 사용해서 필요한 정보를 ..