본문 바로가기

Spring boot

(33)
[spring boot] test시 (H2 DB의) 메모리모드 사용 test할 때 DB까지 왔다갔다하기 번거롭다면, 메모리를 사용하자. (DB를 꺼놔도 Test 실행가능) 1. H2 DB 메모리 모드사용 main>resources > application.yml 을 복사해 test > resources > application.yml에 붙이고 url만 변경하기(아래 참고) //test > resources > application.yml 내용 spring: datasource: url: jdbc:h2:mem:test username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: tru..
[spring boot] 3차 정리 (프록시, 즉시 로딩, 지연 로딩) 프록시 쓰는 이유 member조회하는데 아주 가끔만 team까지 조회하고 보통은 name만 조회할때 team을 계속 조회하는건 낭비니까! ----------------------- 1. getReference하면 프록시 생성 2. getName()호출 : proxy target이 null이면 영속성 컨텍스트가 DB를 조회하고 실제 entity를 생성해 proxy와 연결해줌. proxy target이 있으면 실제 entity인 target에 연결돼 속성 사용가능 초기화 : DB를 통해 진짜 entity를 만들어내는 과정 --------------------------- proxy의 타입은 instanceof를 사용해야함. (ex. m1 instanceof Member) em.find() -> em.getR..
[spring boot] 2차 정리 (연관관계 매핑 기초, 다양한 연관관계 매핑, 고급 매핑) 단방향 연관관계 persist하면 pk값 생성됨. 객체를 DB에 맞춰 셋팅하면 문제 생김 : MEMEBER 첫번재 데이터_ID가 2인 이유: 공용 sequence를 사용해서 TEAM의 첫번째 데이터 _ID가 1이기 때문에...! => 따로따로 ID를 1부터 사용하려면 식별자 맵핑해주면 됨. ------------ 객체지향 : 객체를 참조해서, 객체 대상으로 쿼리 (JPQL) DB : 외래키를 가지고, 테이블 대상으로 쿼리 (SQL) MEMBER는 객체인 TEAM을 가지고 있지만 DB는 TEAM의 키를 가지고 있음. MEMBER의 팀을 b팀으로 바꾸면 jpa는 객체가 바뀌는데 DB는 키값만 바뀜 ---------- persist 하고 바로 find 하면 1차캐시에서 들고오기 때문에 select 쿼리 안 날..
[spring boot] 1차 정리(jpa 시작, 영속성관리, 엔티티 매핑) 준영속 상태 tx.commit(); : 쿼리 날리기. 맨 마지막에 한번만 실행하면 됨. detach : 준영속 상태로 만듦 setName으로 name을 변경하고 detach를 하면 setName때문에 select 쿼리는 날라가지만 commit 때 setName으로 인한 update 쿼리는 안 날라감. detach를 함으로써 영속성 컨텍스트를 날려버린 것. (변경 감지 일어나지 않음) 객체와 테이블 매핑 @Table(name = "MBR") public class Member{ } 는 table명을 MBR로 정한다. MBR table과 맵핑되어 쿼리가 insert 쿼리 from MBR; 로 날라감. 데이터베이스 스키마 자동 생성 application 로딩시 DB를 자동으로 생성해 객체중심으로 개발가능. -..
[spring boot] flush란? persist, flush, commit 비교 플러시(flush)란? 영속성 컨텍스트의 변경내용을 DB에 반영하는 것. 영속성 컨텍스트(1차 캐시)를 비우지 않음 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 (변경감지) 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화(flush) 하면 됨 (commit 하면 자동으로 flush 먼저 실행) 플러시 모드 옵션 (보통 AUTO, 건들지 X) em.setFlushMode(FlushModeType.COMMIT) FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시 (기본값) FlushModeType.COMMIT : 커밋할 때만 플러시 persist, flush, commit 비교 em.persist(entity); 1차 캐시에 저장 및 쓰기 지연 SQL 저장소에 SQL 쌓음..
[spring boot] 영속성 컨텍스트 영속성 컨텍스트란? application과 DB사이에 논리적으로 존재하며, 엔티티를 영구 저장하는 환경을 뜻함. EntityManager.persist(entity); entity를 영속성 컨텍스트에 저장한다. EntityManager 속에 있는 영속성 컨텍스트를 통해 entity가 관리된다. 쓰기 지연 SQL 저장소에 SQL을 쌓는다. 이점 1차 캐시 동일성(identity) 보장 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) 변경 감지(Dirty Checking) 지연 로딩(Lazy Loading) 엔티티의 생명주기 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 더보기 //객체를 생성한 상태(비영속) Member member = new Member(); m..
[Spring boot] H2 DB 연결 & JPA 실행 & 기타 설정, JPQL이란? H2 DB 연결준비 1. pom.xml (library 셋팅) 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 1.8 1.8 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 javax.xml.bind jaxb-api 2.3.0 더보기 hibernate version 찾기 spring > spring boot > LEARN > Reference Doc. > Dependency Versions > (ctrl+f) org.hibernate 검색 오른쪽에 버전 확인 후 작성 H2 DB 버전 찾기 설치된 h2 DB와 같은 version으로 작성 설치할 때 Download 아래 써있는 version 확인 2. ..
[spring boot] 정적 컨텐츠, MVC와 템플릿 엔진, API 정적 컨텐츠 정적 컨텐츠는 파일을 그대로 웹브라우저로 전달하는 것으로, 맨 처음 controller에서 파일을 찾아보고 없다면 resource에서 찾는다. 찾는대로 바로 반환하는 것이 특징이다. (/ 페이지에 접속했을 때 resources/static/index.html 파일이 있다면 이걸 반환, /페이지에 접속했을 때 다른 파일로 연결되도록 지정해줬다면 지정된 파일로 반환) MVC와 템플릿 엔진 MVC와 템플릿 엔진은 서버에서 HTML 템플릿이 있으면 thymeleaf(템플릿엔진)가 view라는 템플릿(html)을 변경, 조작하여 내려주는 방식이다. 소스코드를 보면 변환 된 데이터와 html코드가 보인다는 특징이 있다. 로직을 살펴보자면, 1. 내장 톰켓서버가 "hello-mvc라는게 왔어" 하고 sp..