diff --git a/TIL/230411.md b/TIL/230411.md index 823f45f..823cbc3 100644 --- a/TIL/230411.md +++ b/TIL/230411.md @@ -1,4 +1,4 @@ -# [PART 1 기초] Chap 1) 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? +# 230411 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? ## Java 8 설계의 밑바탕 개념 diff --git a/TIL/230727.md b/TIL/230727.md index 71c36fc..2c6ee41 100644 --- a/TIL/230727.md +++ b/TIL/230727.md @@ -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 \ No newline at end of file + +https://n1tjrgns.tistory.com/266 diff --git a/TIL/230831.md b/TIL/230831.md index 936d178..8533a99 100644 --- a/TIL/230831.md +++ b/TIL/230831.md @@ -1,4 +1,4 @@ -# [Java] int와 Integer +# 230831 [Java] int와 Integer ## int diff --git a/TIL/230913.md b/TIL/230913.md index 2ee7aa0..b6a847d 100644 --- a/TIL/230913.md +++ b/TIL/230913.md @@ -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 diff --git a/TIL/230921.md b/TIL/230921.md index c1d2078..cdc286f 100644 --- a/TIL/230921.md +++ b/TIL/230921.md @@ -1,4 +1,4 @@ -# [not containsKey] not working +# 230921 [not containsKey] not working ### issue diff --git a/TIL/231211.md b/TIL/231211.md index a3d6253..35c9e3e 100644 --- a/TIL/231211.md +++ b/TIL/231211.md @@ -1,4 +1,4 @@ -### Reflection +# 231211 Reflection Java Reflection은 Java에서 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능입니다. Reflection을 사용하면 런타임 중에 Java 프로그램의 클래스, 인터페이스, 필드, 메서드 및 기타 요소를 검사할 수 있습니다. diff --git a/TIL/231213.md b/TIL/231213.md new file mode 100644 index 0000000..ea2b100 --- /dev/null +++ b/TIL/231213.md @@ -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>타입을 받음 + +```java +ListenableFuture> res = asyncRestTemplate.exchange(uri, httpMethod, requestEntity, Void.class); +res.addCallback(new ListenableFutureCallback>() { + @Override + public void onFailure(Throwable th){...} + @Override + public void onSuccess(ResponseEntity 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(시계열 데이터베이스) + -> 시계열 데이터 수집 및 처리에 특화