[LOATODO] JPA 영속성 컨텍스트 더티체킹 VS JPQL로 벌크업데이트
·
Project/LOATODO
1. 서론프로젝트에서 JPA를 사용하여 CRUD 중 Update를 구현할 때,보통 변경감지(Dirty Checking)를 이용합니다.Entity를 조회하여 조회된 Entity 데이터를 변경만 하면 데이터 베이스에 자동으로 반영이 되도록 하는 기능입니다. 1 - 1. 영속성 컨텍스트JPA에서는 Entity Manager를 통해 데이터 베이스 작업을 처리합니다.Entity Manager는 내부적으로 영속성 컨텍스트라는 메모리 영역을 가지며 이 안에 데이터베이스로부터 조회한 Entity 객체들이 저장되어 있습니다. 1 - 2. 영속성 컨텍스트 변경감지(더티 체킹) JPA는 트랜잭션 되는 순간 내부적으로 flush()가 호출됩니다.그때 엔티티와 1차 캐시 내의 스냅샷(최초 상태)을 비교합니다.비교했을 때, 변경..
[책 정리] 디자인 패턴 - 옵저버 패턴
·
책&강의 정리
1. 옵저버 패턴 옵저버 패턴(Observer Pattern)은 주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴 여기서 주체란 객체의 상태 변화를 보고 있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체들을 의미한다. -> 위의 그림처럼 주체와 객체를 따로 두지 않고 상태가 변경되는 객체를 기반으로 구축하기도 한다. 1) 트위터 옵저버 패턴을 활용한 서비스 내가 어떤 사람인 주체를 '팔로우'했다면 주체가 포스팅을 올리게 되면 알림이 '팔로워'에게 가야한다. 2) MVC 패턴 주체라고 볼 수 있는 모델(model)에서 변경..
[책 정리] 디자인 패턴 - 전략 패턴
·
책&강의 정리
전략 패턴은 정책 패턴이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 컨텍스트 프로그래밍에서의 컨텍스트는 상황, 맥락, 문맥을 의미하며 개발자가 어떠한 작업을 완료하는 데 필요한 모든 관련 정보를 말한다 1. 자바의 전략 패턴 어떤 것을 살 때 네이버페이, 카카오페이 등 다양한 방법으로 결제하듯이 어떤 아이템을 살 때 LUNACard로 사는 것과 KAKAOCard로 사는 것을 구현한 예제 결제 방식의 '전략'만 바꿔서 두 가지 방식으로 결제하는것 구현 import java.text.DecimalFormat; import java.util.ArrayList; import java.u..
[Java] Java8 표준 함수형 인터페이스
·
Language/Java
Java 8에서 기본으로 제공하는 함수형 인터페이스는 무엇이 있을까? 참고링크 1. 표준 함수형 인터페이스 Java 8부터 기본으로 제공하는 함수형 인터페이스 Java.lang.function 패키지 활용 예시 ArrayList 클래스의 forEach 메소드를 보면 Consumer를 매개 값으로 활용하고 있는 것을 알 수 있다 Consumer : T를 받아서 아무 값도 리턴하지 않는 함수형 인터페이스 public class ArrayList extends AbstractList @Override public void forEach(Consumer
[Java] ::new 는 무엇일까? Java 8 메소드 레퍼런스 (Method Reference)
·
Language/Java
온라인 상의 자바 예시 코드를 보면 종종 Member::new 이런식으로 ::new 혹은 다른 메소드로 코드가 짜여진 경우가 있다 1. 메소드 레퍼런스 람다 표현식을 구현할 때 쓸 수 있는 방법으로 기존에 있던 다른 메소드를 참조하여 그 메소드 자체를 함수형 인터페이스의 구현체로 사용 람다의 구현 자리를 기존에 이미 있는 어떤 메서드를 참조하는 방식 람다 표현식이 단 하나의 메소드만을 호출하는 경우에 해당 람다 표현식에서 불 필요한 매개변수를 제거하고 사용할 수 있다. :: 연산자를 이용해 메소드 이름과 클래스를 분리하거나, 메소드 이름과 객체의 이름을 분리한다. 클래스::메소드 객체::메소드 클래스::new 2. 유형 1) 스태틱 메소드 참조(Static Method Reference) 클래스::정적메..
[LOATODO] 주간 숙제 완료 시 수치가 초과되는 에러
·
Project/LOATODO
1. 서론주간 숙제 완료(체크)시 수치가 초과되는 에러가 있다  오른쪽 상단 주간 수익 107.4%...2. 개발2 - 1. 백엔드 원인골드 획득 리스트랑 상관없이, 캐릭터에 저장된 컨텐츠가 수익으로 더해짐 character.getTodoV2List()를 반복문을 돌려서 todoResponseDtoList 만들고 난 후토탈 골드 획득 높은 순으로 3개를 정렬하여 4번째 부터는 0골드로 변경-> 여기서 characterDto.setWeekGold 할 때, todoResponseDtoList랑 상관없이 character.getTodoV2List()여기에 있는게 더해짐 2 - 2. 백엔드 수정 -> todoResponseDtoList 생성 후 character.getTodoV2List() 반복문 한번 더 돌림..
[Java] Java8 Optional : orElse, orElseThrow, orElseGet
·
Language/Java
Optional의 예외처리 - orElse(default)는 Optional 값에 null이 들어올 경우에 orElse의 default 값으로 return - orElseGet(() -> default)은 Optional 값에 null이 들어올 경우에 default 값으로 return - orElseThrow는 Optional 객체가 비어있을 경우에 예외를 던짐 -> 그렇다면 orElse와 orElseGet의 차이가 없는건가? 이거에 대한 내용은 "Optional을 올바르게 사용하기 위한 방법을 제공하는 26가지" 글에 나와있다. 26 Reasons Why Using Optional Correctly Is Not Optional - DZone We take a look at the top 25 most ..
[책 정리] 디자인 패턴 - 팩토리 패턴
·
책&강의 정리
시작하기전 질문 ✏️ 9. 팩토리 패턴이 무엇인가요? 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴입니다. 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴입니다. ✏️ 10. 팩토리 패턴은 그럼 왜 사용하나요? 객체 생성 로직을 추상화하여 유지보수성을 향상하고, 클라이언트 코드와 객체 생성을 분리하기 위해 사용합니다. 주로 다양한 객체 유형을 생성해야 하고, 생성 과정이 복잡하거나 변경 가능한 경우에 유용하게 사용됩니다. ✏️ 11. 팩토리 패턴은 어떻게 사용하나요? Java의 경우, 팩토리 메서드나 추상 팩토리 인터페이스를 정의하고, 서브클래스에서 구체적인 객체를 생성하도록 구현합니다. ✏️ 12...
[책 정리] 디자인 패턴 - 싱글톤 패턴
·
책&강의 정리
시작하기전 질문 ✏️ 1. 디자인 패턴에 대해 설명해주세요. 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책입니다. 이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진과 비슷합니다. 디자인 패턴 계의 교과서로 불리는 GoF의 디자인패턴에서는 객체지향적 디자인 패턴의 카테고리를 "생성 패턴(Creational Pattern)", "구조 패턴(Structural Pattern)", "행동 패턴(Behavioral Pattern)" 3가지로 구분하고 있습니다. 생성패턴에는 싱글톤 패턴, 팩토리 메서드 패턴, 빌더 패턴등이 있고 구조패턴에는 어댑터 패턴, 프록시 패턴 행동 패턴에는 전략 패턴, 옵저버 패턴 등이 있습니다. ✏️ 2. ..