Spring-Boot
-
3. 엔티티 매핑Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 11. 16. 18:11
- 엔티티 매핑 소개 ㆍ객체와 테이블 매핑 : @Entity, @Table ㆍ필드와 컬럼 매핑 : @Column ㆍ기본 키 매핑 : @Id ㆍ연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity - @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - 주의 ㆍ기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) ㆍfinal 클래스, enum, interface, inner 클래스 사용X ㆍ저장할 필드에 final 사용X - 속성 : name ㆍJPA에서 사용할 엔티티 이름을 지정한다 ㆍ기본값 : 클래스 이름을 그대로 사용 (예: Member) ㆍ같은 클래스 이..
-
2. 영속성 관리 - 내부 동작 방식Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 11. 16. 14:56
영속성 컨텍스트 - JPA에서 가장 중요한 2가지 ㆍ객체와 관계형 데이터베이스 매핑하기 ( Object Relational Mapping ) ㆍ영속성 컨텍스트 - 영속성 컨텍스트 ㆍJPA를 이해하는데 가장 중요한 용어 ㆍ"엔티티를 영구 저장하는 환경" 이라는 뜻 ㆍEntityManager.persist(entity); ㆍ영속성 컨텍스트는 논리적인 개념 ㆍ눈에 보이지 않는다 ㆍ엔티티 매니저를 통해서 영속성 컨텍스트에 접근 - 엔티티의 생명주기 ㆍ비영속 (new/transient) - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 ㆍ영속 (managed) - 영속성 컨텍스트에 관리되는 상태 ㆍ준영속 (detached) - 영속성 컨텍스트에 저장되었다가 분리된 상태 ㆍ삭제 (removed) - 삭제된 상태 ..
-
1. JPA 소개 & JPA 시작하기Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 11. 14. 16:52
목표1 - 객체와 테이블 설계 매핑 - 객체와 테이블을 제대로 설계하고 매핑하는 방법 - 기본 키와 외래 키 매핑 - 1:N, N:1, 1:1, N:M 매핑 - 실무 노하우 + 성능까지 고려 - 어떠한 복잡한 시스템도 JPA로 설계 가능 목표2 - JPA 내부 동작 방식 이해 - JPA의 내부 동작 방식을 이해하지 못하고 사용 - JPA 내부 동작 방식을 그림과 코드로 자세히 설명 - JPA가 어떤 SQL을 만들어 내는지 이해 - JPA가 언제 SQL을 실행하는지 이해 객체와 관계형 데이터베이스의 차이 1. 상속 - 객체 상속관계 VS Table 슈퍼타입 서브타입 관계 2. 연관관계 - 객체는 참조를 사용 : member.getTeam() ㆍ엔티티신뢰문제 & 모든 객체를 미리 로딩할 수는 없다. - 테이..
-
1. SpringBoot & JPA & TESTSpring-Boot/스프링부트와 AWS로 혼자 구현하는 웹 서비스 2022. 10. 26. 17:40
build.gradle - ext : 전역변수 설정 - repositories : 각종 의존성( 라이브러리 )들을 어떤 원격저장소에 받을지를 정한다. - dependencies : 프로젝트 개발에 필요한 의존성들 선언 @RestController - 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 준다. - @ResponseBody 를 한번에 사용가능 @GetMapping - HTTP Method인 GET요청을 받을 수 있는 API 생성 @RunWith(SpringRunner.class) - 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다. - 여기서 SpringRunner라는 스프링 실행자를 사용 - 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 한다. @Web..
-
스프링 DB 데이터접근 기술 - 스프링 트랜잭션 전파 기본Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 27. 18:31
* 트랜잭션 2개가 실행 시 주의! * - 트랜잭션1과 트랜잭션2가 같은 `conn0` 커넥션을 사용중이다. 이것은 중간에 커넥션 풀 때문에 그런 것이다. - 트랜잭션1은 `conn0` 커넥션을 모두 사용하고 커넥션 풀에 반납까지 완료 - 이후에 트랜잭션2가 `conn0`를 커넥션 풀에서 획득함 - 따라서 둘은 완전히 다른 커넥션으로 인지하는 것이 맞다 - 히카리 커넥션 풀에서 커넥션을 다루는 프록시 객체의 주소가 트랜잭션1과 트랜잭션2는 서로 다르다. - 결과적으로 `conn0`을 통해 커넥션이 재사용 된 것이고 각각의 커넥션 풀에서 커넥션을 조회한 것을 확인 - 트랜잭션이 각각 수행되면서 사용되는 DB 커넥션도 각각 다르다 - 이 경우 트랜잭션을 각자 관리하기 때문에 전체 트랜잭션을 묶을 수 없다. ..
-
스프링 DB 데이터접근 기술 - 스프링 트랜잭션 이해Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 23. 17:47
* 선언적 트랜잭션 관리 vs 프로그래밍 방식 트랜잭션 관리 * 선언적 트랜잭션 관리 ( Declarative Transaction Management ) - @Transactional 애노테이션 하나만 선언해서 매우 편리하게 트랜잭션을 적용하는 것을 선언적 트랜잭션 관리라 한다. - 선언적 트랜잭션 관리는 과거 XML에 설정하기도 했다 - 이름 그대로 해당 로직에 트랜잭션을 적용하겠다 라고 어딘가에 선언하기만 하면 트랜잭션이 적용되는 방식이다 프로그래밍 방식의 트랜잭션 관리( programmatic transaction management ) - 트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드를 직접 작성하는 것을 프로그래밍 방식의 트랜잭션 관리라 한다. - 프로그래밍 방식의 트..
-
스프링 DB 데이터접근 기술 - 활용 방안Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 23. 13:59
* 트레이드 오프 * - DI, OCP를 지키기 위해 어댑터를 도입하고, 더 많은 코드를 유지한다 - 어댑터를 제거하고 구조를 단순하게 가져가지만, DI, OCP를 포기하고 서비스 코드를 직접 변경한다. - 결국 여기서 발생하는 트레이드 오프는 구조의 안전성 vs 단순한 구조와 개발의 편리성 사이의 선택 - 개발을 할 때는 항상 자원이 무한한 것이 아니다. 그리고 어설픈 추상화는 오히려 독이 되는 경우도 많다. 무엇보다 *추상화도 비용이 든다.* 인터페이스도 비용이 든다. 여기서 말하는 비용은 유지보수 관점에서 비용을 뜻한다. 이 추상화 비용을 넘어설 만큼 효과가 있을 때 추상화를 도입하는 것이 실용적이다 * 실용적인 구조 * - 기본 CRUD와 단순 조회는 스프링 데이터 JPA가 담당하고, 복잡한 조회..
-
스프링 DB 데이터접근 기술 - QuerydslSpring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 23. 11:03
QUERY의 문제점 - QUERY는 문자, Type-check 불가능 - 실행하기 전까지 작동여부 확인 불가 에러는 크게 2가지 - 컴파일 에러 ( 좋은 에러 ) - 런타임 에러 ( 나쁜 에러 ) * QueryDSL * - 쿼리를 Java로 type-safe하게 개발할 수 있게 지원하는 프레임워크 - 주로 JPA 쿼리(JPQL)에 사용 * JPA에서 QUERY 방법은 크게 3가지 * 1. JPQL(HQL) ㆍ장점 : SQL QUERY와 비슷해서 금방 익숙해짐 ㆍ단점 : type-safe 아님, 동적쿼리 생성이 어려움 2. Criteria API ㆍ장점 : 동적쿼리 생성이 쉬움? ㆍ단점 ㆍ1. type-safe 아님 ㆍ2. 너무 너무 너무 복잡함 ㆍ3. 알아야 할게 너무 많음 3. MetaModel Cri..