본문 바로가기

전체 글47

Java Atomic Atomic 이란? Java에서 동시성을 보장해주는 자료형이다. Java docs에서 AtomicInteger에 대해 아래와 같이 설명하고 있다. An int value that may be updated atomically. (생략) An AtomicInteger is used in applications such as atomically incremented counters, and cannot be used as a replacement for an Integer. However, this class does extend Number to allow uniform access by tools and utilities that deal with numerically-based classes. 원자적으.. 2022. 12. 3.
Java Closure Closure란? MDN에서는 Closure를 아래와 같이 설명하고 있다. A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). 클로저는 주변 상태에 대한 참조와 함께 묶인(포함된) 함수의 조합입니다. 네..? 무슨 말인지 잘 모르겠다. 간단한 예시로 closure에 대해 이해해보자. public int lambda() { BiFunction function = (x, y) -> x + y; return function.apply(1, 2); } public int closure() { int z = 3; BiF.. 2022. 12. 3.
@Transactional 사용시 주의점(feat.AOP,Proxy) 트랜잭션은 ACID를 보장하기 위한 중요한 요소이다. 스프링에서는 @Transactional 을 메서드, 클래스 단에 지정하면 쉽게 트랜잭션을 적용할 수 있게 한다. 그런데 이렇게 쉽게 사용할 수 있는 @Transactional에도 주의할 점이 필요하다. 스프링으로 웹 개발을 한지 꽤나 되었다고 생각했는데, 지금까지 이러한 주의점을 모르고 있었다. 왜냐하면 이 주의점은 꽤나 깊은 지식을 이해해야 파악할 수 있는 부분이기 때문이다. 일단 시나리오를 두 가지 준비해 보았다. Scenario 1. 같은 클래스 내에서 트랜잭션이 적용되지 않은 메서드 A가 트랜잭션이 적용된 메서드 B를 호출하고 있다. 외부에서 A를 호출했다면 B는 트랜잭션이 제대로 동작할까? @Service public class Product.. 2022. 11. 13.
Querydsl의 이론적인 부분 About Querydsl 이란? Querydsl은 타입에 안전한 방식으로 HQL 쿼리를 실행하기 위한 목적으로 탄생. 현재는 JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, 콜렉션 그리고 RDFBean을 지원. 원칙 타입 안정성 기존의 HQL(Hibernate HQL)은 String 타입의 연결로 구현할 수 밖에 없는데, 이는 컴파일 시점에 문법 오류, 오타를 잡아줄 수 없음. Querydsl은 도메인 타입의 프로퍼티를 반영해서 생성한 쿼리 타입을 이용해서 쿼리를 작성. 일관성 기반 기술에 상관 없이 (JPA를 사용하든, JDBC를 사용하든 상관없이) 쿼리 경로와 오퍼레이션이 동일. Query interface는 공통의 상위 인터페이스를 갖게 됨. (뇌피셜) .. 2022. 10. 31.
[JPA/Querydsl] 깊은 연관관계에서 query 개수 줄이기 학습 동기 Member가 @OneToMany 관계로 InventoryProducts를 가지고 있는 상황이고, InventoryProduct @ManyToOne으로 Product를 갖고 있는 상황이다. Member의 목록을 페이징하면서 InventoryProducts와 Product까지 불어와야 하는 상황이었는데, 모두 fetch join 하여 가져오기에는 paging 처리에 성능상 문제가 있었다. @OneToMany 관계에서 fetch join을 사용하게 되면 DB 레코드 상에서 카티션 프로덕트가 발생하기 때문에 limit offset 키워드가 쿼리에 포함되지 않는다. 즉, 모든 데이터를 애플리케이션단에 불러온 후 pagination 처리를 하게 된다. 그리하여 Member와 InventoryProduc.. 2022. 10. 26.
nullable한 값을 반환하는 집계함수 학습 주제 Mysql 집계함수 중 null을 반환하는 것들 학습 동기 팀원들이랑 페어 프로그래밍 중, AVG 키워드가 null을 반환하여 primitive 타입에 바인딩이 되지 않는 문제가 발생했다. 학습 내용 MySql 집계함수 COUNT 데이터 행의 개수를 추출하는 키워드 NULL 이 반환되지 않음 public class Keyboard { // ... @Formula("(SELECT COUNT(1) FROM review r WHERE r.product_id = id)") private int reviewCount; } @Test void COUNT_키워드는_NULL을_반환하지_않는다() { // given Keyboard keyboard = 키보드_저장("키보드1", "이미지 URL"); entit.. 2022. 10. 14.