전체 글
-
spring Transaction aop 의 동작 원리카테고리 없음 2023. 4. 20. 09:53
이번 포스팅은 spring Transaction aop의 동작 원리를 간단하게 한번 살펴 보겠다. 깊게 들어가면 나도 어렵고 보는사람도 어렵고 다시 보는 나도 또 어렵다. 그러니 간단하게 동작 원리만 살펴 보겠다. 일단 @Transactional 어노테이션은 보통 일반적으로 Service 계층에 넣는다. 그리고 Controller에서 Service를 호출한다. facade 계층이 있으면 facade 에서 호출하겠지만 보통은 Controller에서 호출하는게 대부분이다. 그럼 Controller에서 Service를 Autowired받으면 Service 객체에 프록시 객체가 주입된다. (물론 AOP 어노테이션이 있으면) AOP 프록시 객체가 주입되었으면 AOP가 동작한다는 의미다. 필자는 jpa트랜잭션 기준..
-
Spring Transactional aop ASPECTJ카테고리 없음 2023. 4. 20. 09:52
요즘들어 Transactional 처리에 대해서 글을 많이 남기는 것 같다. 금일 포스팅은 Spring Transactional 처리를 Proxy가 아닌 Aspectj 로 설정한 트랜잭션을 알아보겠다. 계속 포스팅했던 @Transactional은 동일한 클래스의 메서드들을 호출 할때를 말하였다. 예전 포스팅 중 2번 @Transactional이 적용되지 않은 메서드에서 적용된 메서드를 호출하면 Transaction이 무시된다. 이 내용을 한번 보자 만약 @Transactional 적용 되지 않은 메서드에서 적용된 메서드를 호출할때 무시된다고 나와있다. 맞다 무시된다. 무시되는 것도 맞지만 그 상태에서 R을 제외하고 CUD를 2번 이상 할 경우에는 에러도 내뱉는다. 왜냐하면 Proxy모드에서는 외부 메서드..
-
spring boot Transaction(@Transactional) (수정)카테고리 없음 2023. 4. 20. 09:52
spring boot Transaction(@Transactional) 여기에 잘못된 정보가 있다. 그래서 다시 포스팅을 한다. 여기 보면 3번 @Transactional(readOnly = true)가 적용된 메서드에서 @Transactional 혹은 @Transactional(readOnly = false)가 적용된 메서드를 호출 할 경우 무조건 read-only Transaction이 적용된다. 만약 이때 R을 제외한 CUD를 할 경우 에러를 발생한다. 이런 내용이 있었다. 영 찜찜해서 다시 해봤는데 역시나 잘못되었다. 분명히 저번에 테스트 할때는 에러가 났는데 방금 해보니까 위와 같이 되지 않았다. 테스트를 잘 못했나? 아무튼 각성하고 다시 설명을 하겠다. 일단 중요한건 에러가 나지 않는다. 근데..
-
확장 가능한 enum을 만들어야 한다면 인터페이스를 이용하라카테고리 없음 2023. 4. 20. 09:52
enum 자료형은 형 안전 enum 패턴보다 거의 모든 면에서 월등하다. 그러나 형 안전 enum 패턴은 계승을 통한 확장이 가능했단 반면 enum 자료형은 그 렇지 않다. 다시 말해서 형 안전 enum 패턴을 쓸 경우에는 다른 열거 자료형을 계승해서 새로운 열거 자료형을 만드는 것이 가능하지만 enum 자료형으로는 그럴 수 없다는 이야기다. 그러나 이것을 단점이라 볼 수 는 없는데 enum 자료형을 계승한다는 것을 대체로 바람직하지 않기 때문. 확장된 자료형의 상수들이 기본 자료형의 상수가 될 수 있다는 것, 그러나 그 반대는 될 수 없다는 것이 혼란 스럽다. 게다가 기본 자료형과 그 모든 하위 자료형의 enum 상수들을 순차적으로 살펴볼 좋은 방법도 없다. 마지막으로 계승을 허용하게 되면 설계와 구현..
-
JPA 고급매핑 (4)카테고리 없음 2023. 4. 20. 09:52
JPA 고급매핑의 마지막 시간이다. 조인 테이블 데이터베이스 테이블의 연관관계를 설계하는 방법은 크게 2가지이다. 1. 조인 컬럼 사용 2. 조인 테이블 사용 조인 컬럼 사용 테이블 간에 관계는 주로 조인 컬럼이라 부르는 외래 키 컬럼을 사용해서 관리한다. 예를 들어 회원과 사물함이 있는데 각각 테이블에 데이터를 등록했다가 회원이 원할 때 사물함을 선택할 수 있다고 가정해보자. 회원이 사물함을 사용하기 전까지는 아직 둘 사이에 관계가 없으므로 Member 테이블의 외래 키에 null을 입력해두어야 한다. 이렇게 외래 키에 null을 허용하는 관계를 선택적 비식별 관계라 한다. 조인 테이블 사용 이방법은 조인 테이블이라는 별도의 테이블을 사용해서 연관관계를 관리한다. 조인 컬럼을 사용하는 방법은 단순히 외..
-
JPA 고급매핑 (3)카테고리 없음 2023. 4. 20. 09:52
복합키 식별 관계 매핑 부모, 자식, 손자까지 계속 기본 키를 전달하는 식별관계가 있다고 치자 식별 관계에서 자식 테이블은 부모 테이블의 기본 키를 포함해서 복합 키를 구성해야 하므로 @IdClass 나 @EmbeddedId를 사용해서 식별자를 매핑해야 한다. (일대일 관계랑은 약간 다르다.) @IdClass @Entity @Data public class Parent { @Id @Column(name = "PARENT_ID") private String id; private String name; } @Entity @Data @IdClass(ChildId.class) public class Child { @Id @ManyToOne @JoinColumn(name = "PARENT_ID") private ..
-
JPA 고급매핑 (2)카테고리 없음 2023. 4. 20. 09:52
복합 키와 식별 관계 매핑 데이터베이스 테이블 사이에 관계는 외래 키가 기본 키에 포함되는지 여부에 따라 식별 관계와 비식별 관계로 구분한다. 식별 관계 식별관계는 부모 테이블의 기본키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계다. 비식별 관계 비식별 관계는 부모 테이블의 기본 키를 받아서 자식 테이블의 외래 키로만 사용하는 관계이다. - 필수적 비식별 관계 : 외래 키에 null을 허용하지 않는다. 연관관계를 필수적으로 맺어야 한다. - 선택적 비식별 관계 : 외래 키에 null을 허용한다. 연관관계를 맺을지 말지 선택 할 수 있다. 데이터베이스 테이블을 설계할 때 식별관계나 비 식별관계 중 하나를 선택한다. 최근에는 비식별 관계를 주로 사용하고 꼭 필요한 곳에만 식별 관계를 사용..
-
JPA 고급매핑 (1)카테고리 없음 2023. 4. 20. 09:52
상속 관계 매핑 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 1. 각각의 테이블로 변환 : 각각을 테이블로 만들고 조회 할 때 조인을 사용한다. JPA에서는 조인 전략이라 한다. 2. 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합한다. JPA에서는 단일 테이블 전략이라 한다. 3. 서브타입 테이블로 변환 : 서브타입마다 하나의 테이블을 만든다. JPA에서는 구현 클래스마다 테이블 전략이라 한다. 조인 전략 @Entity @Inheritance(strategy = InheritanceTyp..