Skip to content

Commit

Permalink
231213 Java 비동기 호출, BaseEntity
Browse files Browse the repository at this point in the history
  • Loading branch information
suzieep committed Dec 13, 2023
1 parent 8788f43 commit fbae441
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 35 deletions.
2 changes: 1 addition & 1 deletion TIL/230411.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [PART 1 기초] Chap 1) 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
# 230411 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?

## Java 8 설계의 밑바탕 개념

Expand Down
55 changes: 24 additions & 31 deletions TIL/230727.md
Original file line number Diff line number Diff line change
@@ -1,69 +1,62 @@
# 230727
# 230727 Async, Cascade, Entity 상태, propagation

## @Async

- Spring에서 제공하는 Thread Pool을 활용하는 비동기 메소드 지원 Annotation
- 각기 다른 쓰레드로 실행이 된다. 즉, 호출자는 해당 메서드가 완료되는 것을 기다릴 필요x

## Cascade

- JPA 영속성 전이, 부모 엔티티부터 연관된 자식 엔티티까지 상태를 전파
- mappedby: 연관관계 주인 1:N에서 N(fk있는 곳)에 설정
(OneToMany에서 자신이 연관관계의 주인이 아님을 설정)
- mappedBy를 사용하지 않으면,
- mappedBy를 사용하지 않으면 다대일 관계의 경우 중간 테이블이 생성
- 일대일 관계의 경우 각각의 테이블에 서로를 참조하는 FK가 설정
(OneToMany에서 자신이 연관관계의 주인이 아님을 설정)
- mappedBy를 사용하지 않으면,
- mappedBy를 사용하지 않으면 다대일 관계의 경우 중간 테이블이 생성
- 일대일 관계의 경우 각각의 테이블에 서로를 참조하는 FK가 설정

## Entity의 상태

1. Transient: 객체를 생성하고, 값을 주어도 JPA나 hibernate가 그 객체에 관해 아무것도 모르는 상태. 즉, 데이터베이스와 매핑된 것이 아무것도 없다.
2. Persistent: 저장을 하고나서, JPA가 아는 상태(관리하는 상태)가 된다. 그러나 .save()를 했다고 해서, 이 순간 바로 DB에 이 객체에 대한 데이터가 들어가는 것은 아니다. JPA가 persistent 상태로 관리하고 있다가, 후에 데이터를 저장한다.(1차 캐시, Dirty Checking(변경사항 감지), Write Behind(최대한 늦게, 필요한 시점에 DB에 적용) 등의 기능을 제공한다)
3. Detached: JPA가 더이상 관리하지 않는 상태. JPA가 제공해주는 기능들을 사용하고 싶다면, 다시 persistent 상태로 돌아가야한다.
4. Removed: JPA가 관리하는 상태이긴 하지만, 실제 commit이 일어날 때, 삭제가 일어난다.

### Cascade Type

- ALL
- 상위 엔터티에서 하위 엔터티로 모든 작업을 전파
- 상위 엔터티에서 하위 엔터티로 모든 작업을 전파
- PERSIST
- 하위 엔티티까지 영속성 전달
- 하위 엔티티까지 영속성 전달
- MERGE
- 하위 엔티티까지 병합 작업을 지속
- 하위 엔티티까지 병합 작업을 지속
- REMOVE
- 하위 엔티티까지 제거 작업을 지속
- 하위 엔티티까지 제거 작업을 지속
- REFRESH
- 데이터베이스로부터 인스턴스 값을 다시 읽어 오기(새로고침)
- 데이터베이스로부터 인스턴스 값을 다시 읽어 오기(새로고침)
- DETACH
- 영속성 컨텍스트에서 엔티티 제거
- 영속성 컨텍스트에서 엔티티 제거

## Lombok
- RequiredArgsConstructor

- RequiredArgsConstructor

@Builder

@ArgsConstructor
- @NoArgsConstructor : 매개 변수가 없는 기본 생성자를 생성
- @RequiredArgsConstructor : final, @NonNull이 있는 필드만 포함된 생성자를 생성
- @AllArgsConstructor : 모든 필드를 포함한 생성자를 생성
@ArgsConstructor - @NoArgsConstructor : 매개 변수가 없는 기본 생성자를 생성 - @RequiredArgsConstructor : final, @NonNull이 있는 필드만 포함된 생성자를 생성 - @AllArgsConstructor : 모든 필드를 포함한 생성자를 생성

@Data
- @Getter : Getter를 자동으로 생성
- @Setter : Setter를 자동으로 생성
- @ToString : toString 메소드를 자동으로 생성
- @EqualsAndHashCode
- @RequiredArgsConstructor
@Data - @Getter : Getter를 자동으로 생성 - @Setter : Setter를 자동으로 생성 - @ToString : toString 메소드를 자동으로 생성 - @EqualsAndHashCode - @RequiredArgsConstructor

@With

@Value





new() builder 차이,
new() builder 차이,

https://jyami.tistory.com/55
https://sedangdang.tistory.com/305

@RestControllerAdvice


## @Transctional propagation 전파레벨
https://n1tjrgns.tistory.com/266

https://n1tjrgns.tistory.com/266
2 changes: 1 addition & 1 deletion TIL/230831.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [Java] int와 Integer
# 230831 [Java] int와 Integer

## int

Expand Down
2 changes: 2 additions & 0 deletions TIL/230913.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# 230913 캐스팅, SQL Exception, static

### References

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%97%85%EC%BA%90%EC%8A%A4%ED%8C%85-%EB%8B%A4%EC%9A%B4%EC%BA%90%EC%8A%A4%ED%8C%85-%ED%95%9C%EB%B0%A9-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
Expand Down
2 changes: 1 addition & 1 deletion TIL/230921.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [not containsKey] not working
# 230921 [not containsKey] not working

### issue

Expand Down
2 changes: 1 addition & 1 deletion TIL/231211.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
### Reflection
# 231211 Reflection

Java Reflection은 Java에서 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능입니다.
Reflection을 사용하면 런타임 중에 Java 프로그램의 클래스, 인터페이스, 필드, 메서드 및 기타 요소를 검사할 수 있습니다.
Expand Down
48 changes: 48 additions & 0 deletions TIL/231213.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# 231213 Java 비동기 호출, BaseEntity

## Java 비동기 호출

1. AsyncRestTemplate: callee 메서드 쪽에서 @Async를 붙여서 비동기로 동작
-> 이 경우 callee가 외부일 경우 진행 어려움(callee가 내부에 있으면 쓸 수 있음)
2. ListenableFuture : caller가 직접 비동기로 호출
-> callee가 어떻게 처리하던지 caller는 신경X

ListenableFutureCallback (cf. https://keichee.tistory.com/456)

응답을 ListenableFuture<ResponseEntity<T>>타입을 받음

```java
ListenableFuture<ResponseEntity<Void>> res = asyncRestTemplate.exchange(uri, httpMethod, requestEntity, Void.class);
res.addCallback(new ListenableFutureCallback<ResponseEntity<Void>>() {
@Override
public void onFailure(Throwable th){...}
@Override
public void onSuccess(ResponseEntity<Void> voidResponseEntity){...}
});
```

## BaseEntity

- @MappedSuper : created_by,updated_at 등 default로 컬럼 설정하고 싶을 때 BaseEntity에 @MappedSuper 달고, 다른 JPA Entity클래스 extends BaseEntity
- @EntityListeners : 엔티티의 변화를 감지하고 테이블의 데이터 조작
@EntityListener( value = AuditingEntityListener.class)

ex) @CreatedBy(작성자) , @CreatedDate(작성일) @LastModifiedDate(수정일) @LastModifiedBy(수정자)를 자동으로 넣어줌

메서드 어노테이션(prepersist, preupdate등으로 created_at 등 업데이트에 셋팅)

```
@PrePersist : Persist(insert)메서드가 호출되기 전에 실행되는 메서드
@PreUpdate : merge메서드가 호출되기 전에 실행되는 메서드
@PreRemove : Delete메서드가 호출되기 전에 실행되는 메서드
@PostPersist : Persist(insert)메서드가 호출된 이후에 실행되는 메서드
@PostUpdate : merge메서드가 호출된 후에 실행되는 메서드
@PostRemove : Delete메서드가 호출된 후에 실행되는 메서드
@PostLoad : Select조회가 일어난 직후에 실행되는 메서드
```

### etc.

- DAO(Data Access Object): DB의 data에 접근하기 위한 객체(DB접근 관련 로직), 실제로 DB에 접근하는 객체(Repository)
- InfluxDB: 많은 쓰기 작업과 쿼리 부하를 처리하기 위해 사용하는 Time Series Database(시계열 데이터베이스)
-> 시계열 데이터 수집 및 처리에 특화

0 comments on commit fbae441

Please sign in to comment.