전체 글
-
@Transactional(readOnly = true) 는 Flush 가 동작안할꺼라 믿었다JPA 2024. 4. 23. 23:26
public class MarineService { WeaponService weaponService; @Transactional public Marine getMarine(){ Factory factory = factoryRepository.findById(1L).get(); Marine marine = factory.createMarine("marine"); Weapon weapon = weaponService.getWeapon(); marine.setWeaponName(weapon.getName()); return marine } } public class WeaponService { @Transactional(readOnly = true) public Weapon getWeapon(){ retur..
-
c 와 java 에서 call by reference는 없다ETC 2024. 4. 4. 18:38
Call by Reference(Pass by Reference) call by reference는 프로그래밍 언어 설계에서 사용되는 용어로, 함수에 인수를 전달할 때 값의 복사본 대신 원래 값의 참조를 전달 받는 것을 의미한다. 함수 내에서 참조를 통해 직접 값을 접근함으로써 원본을 변경할 수 있게 된다. 예를 들어 다음과 같은 Java 코드를 살펴보면 public static void main(String[] args) { List list = new ArrayList(); add(list); System.out.println(list.size()); //output: 1 } public static void add(List collection){ collection.add("1"); } 위 코드는 ..
-
깃허브 잔디 조작해서 아스키 아트 그리기Tools 2023. 12. 7. 16:10
로컬에만 커밋을 해 두고 푸시 안 하고 있다가 며칠이 지난 나중에 푸시하니 로컬에 커밋한 시간에 깃허브 잔디가 심어진것을 보았다. 그걸 본 나는 이상한 생각이 들었다 깃 커밋 구조를 파악하면 깃허브 잔디로 재미좀 보겠는걸? 그러기 위해서는 github 가 어떤 정보를 보고 잔디를 생성해 주는지 알아보아야 한다. 먼저 알아야 할 것은 git이 데이터를 관리하는 위치는. git/objects 디렉터리인데 여기에는 파일 해시, 커밋 해시 등 git 이 특정 상태를 기록하기 위한 모든 것을 해시로 관리하고 있다 먼저 문제의 커밋이다 commit 0f6f8949e6dbc748b098d88377c806dbd341e196 (HEAD -> main, origin/main) Author: birariro Date: Mo..
-
QueryDSL에서 SubQuery 에는 limit 를 사용 할 수 없다.JPA 2023. 11. 15. 16:56
SubQuery 종류 중from 절에 사용하는 인라인뷰는 지원하지 않으니 당연히 limit를 사용할 수 없고select의 Scalar SubQuery 나 where 절 SubQuery에 limit 사용이 안된다는 것을 알게 되었다. Scalar SubQuery에서 limit 분실select( new QModel( orders.orderId, JPAExpressions.selectDistinct(orderHistory.message) .from(orderHistory) .where(orderHistory.orderId.eq(orders.orderId)) .orderBy(orderHistory.createDateTime..
-
Mysql(Maraidb) 실행 계획 살펴보기DB 2023. 11. 12. 14:09
TL;DR 쿼리문 앞에 explain을 붙여 실행하는 것으로 실행 계획을 볼 수 있다. key 항목에 있는 값이 동작한 인덱스이다 type 항목의 있는 값은 const(좋음) -> eq-ref -> ref -> range -> index -> all(안 좋음) 순이다. extra 항목의 값은 동작 방식을 알려주며 인덱스만을 사용했는지, 디스크까지 접근했는지 등을 알려준다. MySQL(Mariadb) 서버는 클라이언트로부터 오는 요청을 처리하기 위해 Parser, Optimizer, Chches 등 수행하는 DB(MySQL, Mariadb) Engines과 실제 데이터를 디스크에 저장하고 조회하는 Storage Engines로 구성되어 있으며 옵티마이저는 요청한 쿼리를 어떤 실행 계획으로 실행했을 때 비..
-
JpaRepository 가 아닌 Repository를 상속 받아 CQRS 로 분리하기Spring-Boot 2023. 11. 6. 17:20
@Repository public interface MemberRepository extends JpaRepository, CustomMemberRepository { } 위같이 흔히 볼 수 있는 JpaRepository + CustomRepository 조합에서 데이터베이스는 하나지만 왠지 모르게 저 인터페이스를 CQRS로 분류하고 싶은 순간이 다들 한 번쯤 올 것이다.(아님 말고) CQRS의 Command를 담당할 Repository의 이름을 MemberCommandRepository로 Query를 담당할 Repository의 이름을 MemberQueryRepository라고 한다면 어떻게 구성할수있을까? @Repository public interface MemberQueryRepository ex..
-
[보이지 않는 동료] 목적을 통일시키고 인정을 기다리며ETC 2023. 10. 27. 20:23
원본이 있는 글이며 좋은 한글 번역 게시글이있습니다. 조금 더 쉽고 편하게 읽을 수 있도록 수정하였으며 원문의 내용을 해치지 않도록 하였습니다. 스티브 마퀴스는 텔레비전도 없고 휴대전화 신호도 없는 워싱턴 주변의 작은 나무집에 은둔하고 있다. 그는 15년 동안 전 세계의 수십 명의 프로그래머와 함께 인간의 개인 정보를 보호하기 위한 큰 프로젝트를 비밀리에 개발하고 있다. 그러나 그들은 서로를 거의 본 적이 없으며 각각 마치 유령처럼 존재한다. 그러던 중 어느 날, 중국 기업이 갑자기 "대량의 기부금"을 보내기 전까지는.. 스티브 마퀴스 스티브 마퀴스는 워싱턴 주변의 작은 나무집에 은둔하고 있다. 서비스 제공업체는 매년 그의 집 앞에 신호 탑을 세울 것을 약속했지만 한 번도 이행한 적이 없고 나무집 주변은..
-
QueryDSL-JPA에서 인라인뷰를 써야 한다면 도망치자JPA 2023. 10. 18. 00:07
Query DSL JPA을 사용도중 select, where에 Sub Query는 자주 사용하였지만 from 절에 Sub Query를 작성하려다가 문제를 만나게 되었다. QueryDSL로 from절 SubQuery, 즉 inline view를 작성하려 하니 지원하지 않는다는 말을 듣게 되었고 이게 Query DSL 이 제공 안 하는 건지, 하이버네이트가 지원 안 하는 건지 알아보니 예전 하이버네이트 이슈 중 inline view 관련 이슈를 확인해 볼 수 있었다. But! Hibernate 6.1 버전에서부터는 지원을 시작하였다. 그렇지만.. 사용 중인 프로젝트의 Hibernate 버전은 5 버전이었다. 즉 이 프로젝트에서는 Hibernate로 인라인뷰를 사용할 수 없었고 즉 이 문제를 해결할 수는 없었..