일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- webjar
- Application Runner
- application.properties
- HttpMessageConverters
- 스프링부트
- EnableAutoConfiguration
- Application Argument
- 리소스 서버
- Spring Security
- 백트래킹
- cors
- JsonSerializer
- 다익스트라
- Application Event
- 스프링 부트
- 알고리즘
- @ConfigurationProperties
- 외부설정
- HATEOAS
- AuthenticationPrincipal
- 브루트포스
- @Profile
- 리소스핸들러
- 백기선
- 백준
- 정적 리소스
- JPA
- WebApplication Type
- rest api
- OAuth2
- Today
- Total
목록분류 전체보기 (114)
아카이브
JPQL (HQL) Java Persistence Query Language / Hibernate Query Language 데이터베이스 테이블이 아닌, 엔티티 객체 모델 기반으로 쿼리 작성 JPA 또는 하이버네이트가 해당 쿼리를 SQL로 변환해서 실행함 https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#hql Hibernate ORM 5.2.18.Final User Guide Fetching, essentially, is the process of grabbing data from the database and making it available to the application. Tuning ..
Fetch 연관 관계의 엔티티를 어떻게 가져올 것이냐... 지금 (Eager)? 나중에(Lazy)? @OneToMany의 기본값은 Lazy : 자식 값들을 한 번에 다 가져오는 것은 불필요하고 사용될지도 모르니까 나중에 가져온다. @ManyToOne의 기본값은 Eager : 부모값은 한 번에 바로 가져온다. JpaRunner에서 테스트 package me.jumen.springdatajpa; import org.hibernate.Session; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Comp..
Cascade 엔티티의 상태변화를 전파시키는 옵션 Transient: JPA가 모르는 상태 데이터베이스에 들어갈지 안 들어갈지도 전혀 모르는 상태 new Object() save()를 호출하기 전 Persistent: JPA가 관리중인 상태 1차 캐시: Persistent Context(EntityManager, Session)에 인스턴스를 넣은 것 아직 저장이 되지 않은 상태에서 다시 인스턴스를 달라고 하면 이미 객체가 있으므로 데이터베이스에 가지 않고 캐시 하고 있는 것을 줌 save()를 호출한다고 바로 Insert 쿼리가 실행되는 것은 아니다. save()를 호출하면 PersistentContext에 Instance를 넣어서 1차 캐싱한다. Dirty Checking: 이 객체의 변경사항을 계속 ..
관계에는 항상 두 엔티티가 존재합니다. 둘 중 하나는 그 관계의 주인(owning)이고 다른 쪽은 종속된(non-owning) 쪽입니다. 해당 관계의 반대쪽 레퍼런스를 가지고 있는 쪽이 주인. 단방향에서의 관계의 주인은 명확하다 관계를 정의한 쪽이 그 관계의 주인입니다. 단방향 @ManyToOne 기본값은 FK 생성 Study 도메인 클래스 public class Study { @Id @GeneratedValue private Long id; private String name; @ManyToOne // 어떤 study를 만든 사람은 여러 개를 만들 수 있다. // 단방향에서의 관계의 주인은 관계를 정의한 쪽이다. private Account owner; } 단방향 @OneToMany 기본값은 조인 테이..
엔티티 타입과 Value 타입 구분 식별자가 있어야 하는가 (Account 도메인 클래스) 독립적으로 존재해야 하는가 (Address Composite Value 클래스) Value 타입 종류 다른 타입에 종속적인 타입을 Value 타입이라고 보면 됨 (Address 클래스는 Account 도메인 클래스에 종속적이다.) 기본 타입 (String, Date, Boolean,...) Composite Value 타입 Collection Value 타입 기본 타입의 컬렉션 컴포짓 타입의 컬렉션 Composite Value 타입 맵핑 @Embadable: Composite Value 클래스에 지정하면 해당 클래스를 Composite Value로 만듦 @Embadded: Entity에서 Composite Valu..
@Entity 엔티티는 객체 세상에서 부르는 이름 기본적으로 @Table을 포함하고 있음 보통 클래스와 같은 이름을 사용하기 때문에 값을 변경하지 않음 JPQL에서 사용된다. @Table 릴레이션 세상에서 부르는 이름 @Entity의 이름이 기본값 SQL에서 쓰인다. @Id 엔티티의 주키를 맵핑할 때 사용 자바의 모든 primitive 타입과 그 래퍼 타입을 사용할 수 있음 Date랑 BigDecimal, BigInteger도 사용 가능 복합 키를 만드는 맵핑하는 방법도 있지만 그건 논외로.. @GeneratedValue 주키의 생성 방법을 맵핑하는 애노테이션 생성 전략과 생성기를 설정할 수 있다 다른 전략을 임의로 지정할 수 있음 보통은 기본값을 사용 @Column unique: unique 설정 여부..
데이터베이스 실행 PostgreSQL 도커 컨테이너 재사용 docker start postgres_boot 스프링 부트 스프링 부트 v2.* 스프링 프레임워크 v5.* 스프링 부트 스타터 JPA JPA 프로그래밍에 필요한 의존성 추가 JPA v2.* Hibernate v5.* 자동 설정: HibernateJpaAutoConfiguration (JPA에 필요한 모든 빈 들이 자동으로 등록됨) JpaBaseConfiguration의 하위 클래스(EntityManagerFactoryBuilder, LocalContainerEntityManagerFactoryBean) 컨테이너가 관리하는 EntityManager (프락시) 빈 설정 PlatformTransactionManager 빈 설정 application...
객체 릴레이션 밀도(Granularity) 문제 다양한 크기의 객체를 만들 수 있음 커스텀한 타입 만들기 쉬움 테이블 기본 데이터 타입 (UDT는 비추) 서브타입(Subtype) 문제 상속 구조 만들기 쉬움 다형성 테이블 상속이라는게 없음 상속 기능을 구현했다 하더라도 표준 기술이 아님 다형적인 관계를 표현할 방법이 없음 식별성(Identity) 문제 레퍼런스 동일성 (==) 인스턴스 동일성 (equals() 메소드) 주키 (primary key) 관계(Association) 문제 객체 레퍼런스로 관계 표현 근본적으로 '방향'이 존재한다 다대다 관계를 가질 수 있음 외래키(foreign key)로 관계 표현 '방향'이라는 의미가 없음 그냥 join으로 아무거나 묶을 수 있음 태생적으로 다대다 관계를 못만..
ORM(Object Relation Mapping) ORM은 애플리케이션의 클래스와 SQL 데이터베이스의 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여, 자바 애플리케이션의 객체를 SQL 데이터베이스의 테이블에 자동으로 (또 깨끗하게) 영속화 해주는 기술입니다. /* 도메인 모델을 사용하는 코드를 Object 라고 함 */ /* Connection을 사용한 방법보다 훨씬 깔끔하게 작성할 수 있다. */ Account account = new Account(“keesun”, “pass”); accountRepository.save(account); JDBC 대신 도메인 모델을 사용하는 이유? 객체 지향 프로그래밍의 장점을 살릴 수 있다. 여러가지 디자인 패턴도 적용할 수 있다. 코드의 재사용성도 ..
RDBMS와 JAVA Persistence(영속성)이란 어떤 정보를 어딘가에 저장하고 애플리케이션을 껐다가 켜도 그 데이터는 유지가 됨 JDBC (관계형) 데이터베이스와 자바의 연결 고리 DataSource / DriverManager Connection PreparedStatement SQL DDL DML 무엇이 문제인가? SQL을 실행하는 비용이 비싸다. SQL이 데이터베이스마다 다르다. 스키마를 바꿨더니 코드가 너무 많이 바뀌네... 반복적인 코드가 너무 많아. 당장은 필요가 없는데 언제 쓸 줄 모르니까 미리다 읽어와야 하나... Postgresql Driver 의존성 추가하기 org.postgresql postgresql PostgreSQL 설치 및 서버 실행 (Docker) /* Docker를 ..