💡"Auto Increment 전략"은 데이터베이스에서 테이블의 기본 키(primary key) 값을 자동으로 증가시키는 전략이다. 기본 키 값은 보통 숫자로 표현되며, 각 새로운 레코드(행)이 추가될 때마다 자동으로 증가한다. ✅ IDENTITY 전략IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임하는 전략이다. 데이터베이스가 기본 키를 자동으로 생성해준다. Entity Classpackage jpabook.start; import javax.persistence.*; @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String userName; ..
✅ 더티체킹이란?Dirty Checking은 영속성 컨텍스트(Persistence Context)에서 엔티티(Entity)의 변경 사항을 자동으로 감지하고, 변경된 내용만을 데이터베이스에 동기화하는 기능이다. 이는 영속성 컨텍스트에서 Entity를 스냅샷으로 상태 변화를 추적하고 있기 때문에 가능하다. 💡—파일시스템의 Dirty Checking JPA의 Dirty Checking의 개념은 파일 시스템의 Dirty Checking의 개념에서 나왔다. 디스크에 데이터를 저장하는 것은 많은 리소스 비용이 발생하기 때문에 파일 시스템은 메모리에 변경된 데이터를 모아서 디스크에 일괄 쓰거나 적절한 시간에 쓰도록 조절함으로써, 비용이 많이 드는 디스크 쓰기 작업의 수를 줄일 수 있다. @Slf4j @Required..
✅ 영속성 컨텍스트란?우리말로 간단하게 이야기하면 ‘엔티티를 영구 저장하는 환경’이라는 뜻으로 번역하고 있다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍트에 인티티를 보관하고 처리한다. EntityManagerFactory(엔티티 매니저 팩토리):EntityManagerFactory는 EntityManager 인스턴스를 생성하고 관리하는 역할을 한다. 일반적으로 JPA 애플리케이션이 시작될 때 하나만 생성된다.EntityManagerFactory는 어떤 영속성 유닛(보통 persistence.xml 파일에 정의됨)을 사용할 것인지와 관련 설정을 제공하여 생성된다. EntityManager(엔티티 매니저):EntityManager는 엔티티에 대한 CRUD(Create, Rea..
✅ Dialect란? Dialect는 방언이라는 뜻이다. SQL의 표준을 지키지 않거나 특정 데이터베이스에서만 사용하는 기술을 dialect라고 한다. 다른 데이터베이스 시스템에서 찾을 수 없는 고유한 기능, 확장 및 문법을 포함한다. ➡️ 예를 들면데이터 타입 : 가변 문자 타입으로 MySQL은 VARCHAR, 오라클은 VARCHAR2를 사용한다.다른 함수명 : 문자열을 자르는 함수로 SQL 표준은 SUBSTRING()을 사용하지만 오라클은 SUBSTR()을 사용한다페이징 처리 : MySQL은 LIMIT를 사용하지만 오라클은 ROWNUM을 사용한다 JPA 구현체들은 이런 문제를 해결하려고 다양한 데이터베이스 방언 클래스를 제공한다. 이로써 특정 데이터 베이스의 의존적인 방언 처리는 JPA를 사용하게 되..
✅ JPA란? JPA는 "Java Persistence API"의 약자로, Java 언어를 사용하여 객체 지향 프로그래밍과 관계형 데이터베이스 간 상호 작용을 지원하는 자바 표준 스펙이나 API이다. JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다. 애플리케이션과 JDBC 사이에서 동작한다. #Spring Data JPA와는 다르다. Spring Data JPA를 JPA를 조금 더 편리하게 사용하기 위해 확장한 기술이다. 🔹ORM 기술이란?ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. ORM은 SQL문의 수행 결과를 매핑하는 것이 아닌 DB 테이블의 데이터 그 자체와 객체를 매핑한다. 개발자가 직접 SQL을 작성..
✅ 테스트용 컨텍스트 분리TestApplicationContext를 실제 서비스할 DI 설정 정보라 생각하고 AppContext로 이름을 변경합니다. 그리고 Test용으로 DI 설정을 새롭게 구성하기 위해 TestAppContext 클래스를 생성합니다. TestAppContextpackage vol1.jhcode.ch7; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.mail.MailSender; import vol1.jhcode.ch7.user.service.DummyMailSender; import ..
✅ XML 설정에서 Java-based-Configuration 설정으로지금까지 XML 설정이 아닌 Java-based-Configuration 설정을 사용해 왔습니다. 그래서 크게 바꿀 것이 없고, 다만 복습한다는 생각으로 다시 한 번 코드를 구성해보겠습니다. pom.xml 4.0.0 toby toby 0.0.1-SNAPSHOT org.mariadb.jdbc mariadb-java-client 3.1.4 mysql mysql-connector-java 8.0.26 org.springframework spring-core 5.3.20 org.springframework spring-context 5.3.20 org.springframework spring-test 5.3.20 org.aspectj asp..
✅ DI와 기능의 확장애플리케이션을 새로 시작하지 않고 특정 SQL의 내용만을 변경하고 싶다면 어떻게 해야 할까요? 그에 앞서서 먼저 DI와 인터페이스의 상속에 대해서 알아보겠습니다. DI를 적용할때 가능한한 인터페이스를 사용해야 한다.인터페이스의 사용으로 다형성을 얻기 위함이다.인터페이스 분리 원칙을 통해 클라이언트와 의존 오브젝트 사이의 관계를 명확하게 해줄 수 있다.각기 다른 관심과 목적에 따라 명확하게 구분이 가능하며, 하나의 오브젝트가 여러 개의 인터페이스를 구현할 수 있으므로, 하나의 오브젝트를 바라보는 창이 여러 가지일 수 있게 된다. 인터페이스 분리 원칙이 주는 장점은 모든 클라이언트가 자신의 관심에 따른 접근 방식을 불필요한 간섭 없이 유지할 수 있다는 점기존 클라이언트에 영향을 주지 않..
✅ OXM(Object-XML Mapping)JAXB가 JavaSE와 JavaEE 표준에 포함되어 있지만 JAXB 외에도 아래와 같은 XML과 오브젝트 매핑 기술이 있습니다.Castor XML : 설정파일이 필요 없는 인트로스펙션 모드를 지원하기도 하는 매우 간결하고 가벼운 바인딩 프레임워크JiBX : 뛰어난 퍼포먼스를 자랑하는 XML 바인딩 기술XmlBeans : 아파치 XML 프로젝트의 하나, XML의 정보셋을 효과적으로 제공Xstream : 관례를 이용해서 설정이 없는 바인딩을 지원하는 XML 바인딩 기술의 하나 이렇게 XML과 자바 오브젝트를 매핑해서 상호 변화해주는 기술을 OXM이라고 합니다. 기능이 같은 여러 가지 기술이 존재한다면 추상화를 적용할 수 있습니다. 스프링이 제공하는 OXM 추상 ..
✅ XML 파일을 이용하는 SQL 서비스UserDaoJdbc에서 사용했던 SQL문을 이전에 학습했던 JAXB를 통하여 매핑하여 사용할 수 있도록 해보겠습니다. SQL문을 UserDao와 동일한 패키지에서 xml 파일로 작성합니다. sqlmap.xml insert into users(id, name, password, email, level, login, recommend) values(?,?,?,?,?,?,?) select * from users where id = ? select * from users order by id delete from users select count(*) from users update users set name = ?, password = ?, email = ?, leve..