일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- REACT
- OpenStack
- cloud native
- tasklet
- UsernamePasswordAuthenticationFilter
- vue
- Flyway
- MFA
- Spring Security
- vuejs
- axios
- AuthenticatoinProvide
- SpringBoot
- MSA
- T-OTP
- Crawling
- openapi3
- SpringRESTDocs
- Filter
- preventdefault
- cheerio
- Reduxpender
- Spring Batch
- gradle
- stopPropogation
- JavaScript
- 리액트
- SWAGGER
- Spring REST Docs
- Pender
- Today
- Total
목록IT 기술/[JAVA] Spring Boot (29)
Miracle Morning, LHWN
지금까지 공부했던 것들을 직접 코딩하며 살펴본다. 우선 Spring 프로젝트의 생성은 Spring initializer 의 도움을 받았다. (URL : start.spring.io) 프로젝트를 열고 application.properties 의 설정 내용은 아래와 같다. // application.properties #H2 spring.h2.console.enabled=true spring.h2.console.path=/h2 spring.datasource.hikari.jdbc-url=jdbc:h2:~/test spring.datasource.username=sa spring.datasource.password= spring.datasource.initialization-mode=always #JPA sp..
트랜잭션 범위의 영속성 컨텍스트 # 스프링 컨테이너의 기본 전략 동일 트랜잭션엔 동일 영속성 컨텍스트를 사용한다. 트랜잭션이 다르면 영속성 컨텍스트도 다르다. # 트랜잭션 종료 이후 지연로딩 속성에 접근할 경우? (1) 뷰가 필요한 엔티티를 미리 로딩하는 방법 글로벌 페치 전략 수정 사용하지 않는 엔티티를 로딩 N + 1 문제 발생 JPQL 페치 조인 무분별한 사용 시 리포지토리 메서드가 증가한다. →프리젠테이션 계층이 데이터 접근 계층을 침범한다. 강제 초기화 프록시 초기화 역할을 서비스 계층이 담당하면 뷰가 필요한 엔티티에 따라 서비스 계층의 로직을 변경해야 한다. →프리젠테이션 계층이 서비스 계층을 침범한다. FACADE 계층 추가 (2) OSIV 를 사용하여 엔티티를 항상 영속 상태로 유지하는 방..
Spring Data JPA 스프링 프레임워크에서 JPA 를 편리하게 사용할 수 있도록 지원하는 프로젝트이다. 인터페이스만 작성하면 실행 시점에서 구현 객체를 동적으로 생성해서 주입해주기 때문에 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발이 가능하다. # 주요 메서드 save(S) : 새로운 엔티티는 저장, 기존 엔티티는 수정한다. 엔티티에 식별자가 없으면 새로운 엔티티로 판단해서 EntityManager.persist() 를 호출, 엔티티에 식별자가 있으면 EntityManager.merge() 를 호출 delete(T) : 엔티티 하나를 삭제한다. EntityManager.remove() 를 호출한다. findOne(ID) : 엔티티 하나를 조회한다. EntityMana..
# INNER JOIN String query = "SELECT" + "NEW com.jpapeeknapply.service.UserAndGroupDto(user.name, group.name)" + "FROM User user INNER JOIN user.userGroup group"; List userAndGroupDtoList = em.createQuery(query, UserAndGroupDto.class).getResultList(); String query = "SELECT user, group" + "FROM User user INNER JOIN user.userGroup group"; # OUTER JOIN String query = "SELECT" + "NEW com.jpapeeknapp..
객체지향 쿼리언어 복잡한 검색 조건을 사용하여 엔티티 객체를 조회할 수 있는 다양한 쿼리기술이다. JPQL : Java Persistence Query Language Criteria 쿼리 : JPQL 을 편하게 작성하도록 도와주는 API 혹은 빌더 클래스 모음 네이티브 SQL : JPA 에서 JPQL 대신 쿼리를 직접 사용할 수 있다. QueryDSL : 쿼리처럼 JPQL 을 편하게 작성하도록 도와주는 빌더 클래스이며, 비표준 오픈소스 프레임워크이다. 그 외 JDBC, MyBatis 와 같은 SQL 매퍼 프레임워크 # JPQL 엔티티 객체를 조회하는 객체 지향 쿼리이다. 문법은 SQL 과 유사하지만 좀 더 간결하며, SQL 을 추상화하기 때문에 특정 DB 에 의존하지 않는다. String jpql = ..
# 프록시 데이터가 실제 필요할 때 데이터를 불러오는 지연 로딩을 사용하는 경우 실제 엔티티 객체 대신 사용되는 가짜 객체이다. - 처음 사용할 때 한번만 초기화된다. - 프록시 객체가 초기화되면 실제 엔티티에 접근할 수 있다. - 프록시 객체는 원본 엔티티를 상속받은 객체이므로 타입체크 시 주의해야한다. - 영속성 컨텍스트에 실제 엔티티가 존재하는 상황이라면 프록시가 아닌 실제 엔티티를 반환한다. - 초기화는 영속성 컨텍스트의 도움을 받아야 한다. 따라서 준영속 상태의 프록시를 초기화하면 문제가 발생한다. # 즉시 로딩 (EAGER LOADING) 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. # 지연 로딩 (LAZY LOADING) 연관된 엔티티를 실제 사용할 때 조회하며, 연관된 엔티티는 프록..
연관관계 매핑 객체의 참조와 테이블의 외래키를 매핑하는 것이다. 연관관계 매핑하는 방법은 아래와 같다. (1) ORM : 참조를 사용, 방향성이 있다. (2) RDB : 외래키 (Join Key) 를 사용하며 항상 양방향이다. (3) 방향은 단방향/양방향이 있다. (4) 1:1, N:1, 1:N, N:N 관계로 다중성이 있다. (5) 객체를 양방향 연관관계로 만들려면 연관관계의 주인이 필요하다. # 다대일 (N:1) 연관관계 - user 와 team 이 있고, user 는 하나의 team 만 소속 가능하다. - user 와 team 은 다대일 관계이다. (1) 객체 연관관계 - User 객체는 User.team 필드로 team 객체와 연관관계를 맺는다. - User 객체와 Team 객체는 단방향 관계이다..
엔티티 매니저 특정 작업을 위해 데이터베이스에 액세스하는 역할을 담당한다. 엔티티를 DB 에 등록/수정/삭제/조회(CRUD) 하는 역할이며, 엔티티와 관련된 일을 처리하는 엔티티 관리자이다. - 엔티티 매니저 팩토리는 설정 정보를 읽어와 DB 커넥션 풀도 생성하기 때문에 엔티티 매니저 팩토리를 생성하는 비용이 크다. 따라서 엔티티 매니저 팩토리는 어플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용해야 한다. - 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용하면 안된다. - 사용이 끝난 엔티티 매니저는 반드시 종료해야 한다. 엔티티 매니저 팩토리 엔티티 매니저 엔티티 매니저 팩토리는 생성 비용이 크기 때문에 DB 를 하나만 사용하는 어플리케이션이라면 일반적으로..
ORM (Object Relational Mapping) : 객체 - 관계 매핑 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑 (연결) 해주는 것이다. ORM DataBase 데이터 객체 (클래스) 테이블 연관 관계 속성 (관계 매핑) FK 혹은 Join Key # ORM 의 장점 - 객체 지향적이기 때문에 개발자가 비즈니스 로직 및 코드 자체에 집중할 수 있다. - 관념적 코드 (Boilerplate code) 가 없거나 적어진다. (선언문, 할당 등) → 객체에 대한 코드를 작성하기 때문에 가독성이 올라간다. - 코드의 재사용, 유지보수의 편리성이 증대된다. - DBMS 의 종속성이 줄어든다. (객체의 관계를 바탕으로 SQL 을 자동으로 생성하기 때문) ※ Boilerplate code : 각종..