-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
78 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# [Java] int와 Integer | ||
# 230831 [Java] int와 Integer | ||
|
||
## int | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# [not containsKey] not working | ||
# 230921 [not containsKey] not working | ||
|
||
### issue | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(시계열 데이터베이스) | ||
-> 시계열 데이터 수집 및 처리에 특화 |