JPA 탄생 배경 SQL 중심적인 개발의 문제점 코드의 반복, SQL에 의존적인 개발 SQL 확인 전까지는 엔티티를 신뢰하기 어려움 (객체들을 서로 join을 통해 계속 묶어줘야 함, NULL값 발생 가능) ORM으로 그 문제를 해결하자! (MyBatis, JPA 등) MyBatis의 한계 결국 쿼리를 만드는 건 개발자 Oracle을 쓰다가 MySQL을 쓰는 상황 등의 발생 시 쿼리 수정해야 함 JPA 장점 SQL 중심적인 개발에서 객체 중심으로의 개발 생산성, 유지보수 필드 추가 시 SQL은 JPA가 알아서 처리 패러다임의 불일치 해결 데이터 접근 추상화와 벤더 독립성 vendor: 여기서는 DB 제품 등을 의미 (Oracle, MySQL 등) 일관성 유지 (표준화) JPA 기초 객체 매핑하기 @Ent..
JPA 이용 기본적인 DB 생성 확인 // MainApp.java package exam; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class MainApp { public static void main(String[] args) { System.out.println("** JPA 시작"); // 인수 unitName: 대소문자 구분 EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAProject"); } } // Customer.java package exam; import javax.persistence...
Transaction 트랜잭션은 DB와 Java 언어 데이터를 주고받는 과정에 원자성을 부여하는 수단 어떤 작업 프로세스를 하나로 묶어 실행 중인 하나의 작업이라도 실패하면 모두 실패처리하고, 전체 작업이 성공하면 성공처리 ex. 결제와 동시에 좌석 할당 결제 수행 + 결제내역 저장 + 구매내역 저장 Transaction ACID 원자성 Atomicity 트랜잭션은 하나 이상의 동작을 논리적으로 한 개의 작업단위로 묶는다. 원자성은 트랜잭션 범위에 있는 모든 동작이 모두 실행되거나 모두 실행 취소됨을 보장하는 것 일관성 Consistency 트랜잭션이 종료되면 시스템은 비즈니스에서 기대하는 상태가 된다. 예를 들어, 서적 구매 트랜잭션이 성공적으로 실행되면 결제 내역, 구매 내역, 잔고 정보가 비즈니스에..
예외처리 @RequestMapping 메서드는 모든 타입의 예외를 발생시킬 수 있다. 예외를 발생시킬 경우 웹 브라우저는 500 응답코드와 함께 서블릿 컨테이너가 출력한 에러 페이지가 출력된다. 예외 타입에 따라 스프링 MVC와 연동된 뷰를 이용해서 에러 페이지를 출력할 수 있다. 예외 발생시 사용자에게 보여줄 특정 페이지를 만들어 출력한다. (공통의 예외를 한 페이지에서 처리 가능) 처리 방법 @ExceptionHandler 어노테이션을 이용한 예외처리 @ExceptionHandler 메소드를 만든 Controller 영역에서만 유효함 @ExceptionHandler(ArrayIndexOutOfBoundsException.class) public String arithmetic(ArrayIndexOut..
@Autowired: 객체 주입 xml에서 ref="" @Value("Spring 01"): 기본형 주입 + String xml에서 value=""
IoC (Inversion of Control) IoC(제어의 역전)이란 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미 컴포넌트 간의 의존관계 결정(Component dependency resolution), 설정(configuration) 및 생명 주기(lifecycle)를 해결하기 위한 디자인 패턴(Design Pattern) DI (Dependency Injection) 각 클래스간의 의존관계를 빈 설정 (Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것 개발자들은 빈 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다. 객체 레퍼런스를 컨테이너로부터 주입받아서 실행 시에 동적으로 의존관계가 생성된다. 컨테이너가 흐름의 주체가..