
로깅 간단히 알아보기운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. 로깅 라이브러리스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리( spring-boot-starter-logging )가 함께 포함된다.스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용한다 SLF4J - http://www.slf4j.orgLogback - http://logback.qos.ch 로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리다.쉽게 이야기해서 SLF4J는 인터..
값 타입 엔티티(Entity)에 속하지 않고, 단순히 엔티티의 속성으로 사용되는 객체 JPA에서 임베디드(Embedded) 타입도 값 타입의 한 종류 임베디드 타입 여러 개의 속성을 하나로 묶어 하나의 객체로 표현할 수 있도록 하는 것 ex. 주소(Address) 객체를 임베디드 타입으로 사용 많이 함. 이러한 경우 주소는 엔티티가 아니라, 엔티티의 속성으로 존재 + 해당 엔티티와 생명주기를 공유한다. 임베디드 타입 사용 시 코드의 재사용성과 가독성 향상. 복합적 데이터를 간단하게 모델링할 수 있음. 필요한 경우 임베디드 타입을 재사용하여 중복을 피할 수 있음. JPA에서 임베디드 타입 사용하기 임베디드 타입으로 사용할 클래스를 정의. 해당 클래스에 @Embeddable 어노테이션을 붙여, JPA에게 이..

SpringData 구조 SpringData 기능 목록 강력한 리포지토리 및 사용자 지정 객체 매핑 추상화 리포지토리 메서드 이름에서 동적 쿼리 파생 기본 속성을 제공하는 구현 도메인 기본 클래스 명료한 추적기능 지원(생성일시, 마지막 변경일시, 생성자, 마지막 변경자) 사용자 지정 리포지토리 코드 통합 가능성 JavaConfig 및 사용자 지정 XML 네임스페이스를 통한 간편한 Spring 통합 Spring MVC 컨트롤러와의 고급 통합 교차 스토어 지속성에 대한 실험적 지원 SpringData Jpa 와 JpaRepository 원리 Repository 는 MarkerInterface 로 특별한 기능은 없음 Repository ~ JpaRepository 까지는 **@NotRepositoryBean*..

JPA는 귀찮은 작업들을 처리해주는 편리한 도구. 예를 들면, 지금 코드에 있는 Product라는 것도 관계형 데이터베이스에 있는 하나의 row인데 쿼리를 직접 짤 필요 없이 객체 단위로 저장을 하거나 조회를 하고, 객체 째로 주면 jpa가 알아서 Insert 쿼리를 날려주고, 조회를 한다고 하면 그 row를 다시 객체로 변환하는 귀찮은 작업들을 도와주는 것도 맞다. "패러다임 불일치" 데이터베이스에서 보는 객체는 하나의 row인데, 객체에서는 하나의 클래스(다름) 이 부분을 자동 변환을 통해 해결해줌. 그런데 이러한 작업을 하려면, 적어도 "데이터베이스에 있는 이 row는 클래스와 어떻게 매핑이 될 거야" 라고 하는 최소한의 정보는 줘야 해. 그게 이제 "매핑 관계 설정" 이 되는 거지. @Entity..
엔티티 매핑 관련 어노테이션 어노테이션 설명 @Entity 클래스를 엔티티로 선언 @Table 엔티티와 매핑할 테이블을 지정 @Id 테이블의 기본키에 사용할 속성을 지정 @GenerateValue 키 값을 생성하는 전략 명시 @Column 필드와 컬럼 매핑 @Lob BLOB, CLOB 타입 매핑 @CreationTimestamp insert 시 시간 자동 저장 @Enumerated enum 타입 매핑 @Transient 해당 필드 데이터베이스 매핑 무시 @Temporal 날짜 타입 매핑 @CreateDate 엔티티가 생성되어 저장될 때 시간 자동 저장 @LastModifiedDate 조회한 엔티티의 값을 변경할 때 시간 자동 저장 BLOB, CLOB의 의미 - CLOB이란 사이즈가 큰 데이터를 외부 파일..

* 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에 있는 중간 계층이다. - 이렇게 중간 계층을 만들면 버퍼링, 캐싱 등을 할 수 있다. 1차 캐시 - 영속성 컨텍스트에는 1차 캐시가 존재하며 Map 로 저장된다. - entityManager.find() 메소드 호출 시 영속성 컨텍스트의 1차 캐시를 조회한다. - 엔티티가 존재할 경우 해당 엔티티를 반환하고, 엔티티가 없으면 데이터베이스에서 조회 후 1차 캐시에 저장 및 반환한다. 동일성 보장 - 하나의 트랜젝션에서 같은 키값으로 영속성 컨텍스트에 저장된 엔티티 조회 시 같은 엔티티 조회를 보장한다. - 이는 1차 캐시에 저장된 엔티티를 조회하기 때문에 가능하다. 트랜젝션을 지원하는 쓰기 지연 - 영속성 컨텍스트에는 쓰기 지연 SQL 저장소가 존재한..