프로젝트하다보니 import java.util.*;과 같은 임포트 문이 메모리를 많이 차지한다는 사실을 알게되었다. 어쩌면 그냥 넘어갈 수도 있었는데, 섬세한 코드리뷰를 받으면서 자동 임포트도 설정해서 메모리를 절약할 수 있다는 것을 깨달았다. 인텔리제이에서 와일드카드 임포트를 방지하기 위해 다음과 같은 설정을 거치면 된다. 설정 - Editor - Kotlin(설정 언어) - Imports - Use single name import 로 둘다 설정! - 끝
오늘은 코드리뷰를 받다가 조회용 서비스단에 @Transactional(readOnly = true)를 붙일 때 성능이 향상된다 하여 공부를 해보려고 한다. 엔티티를 조회할 때 영속성 컨텍스트(Persistence Context)는 초기 상태에 대한 스냅샷을 저장하여 트랜잭션 commit 될 때마다 스냅샷과 엔티티의 상태를 비교하여 update query를 생성하여 쓰기 지연 저장소에 저장한다 = dirty checking = 변경 감지더티란, 상태의 변화가 생긴 정도..를 의미! 1. readOnly = true로 설정하면 플러시 모드가 MANUAL로 설정되고, 트랜잭션 내에서 flush()를 호출하지 않는 한 수정내역이 DB에 자동저장되지 않는다. 자동 flush가 방지되기 때문에 조회용으로 가져온 ..
이번 프로젝트에서 CQRS 패턴을 적용하여 서버단 코드를 구현하고 있다. 낯선 개념이지만 이해하니까 어렵게 다가오지 않았다. 1. CQRS란? : Command and Query Responsibility Segregation 의 약어로 Command와 Query의 책임을 분리하는 디자인 패턴이다. Command는 CRUD 중 Create, Update, Delete와 같은 쓰기Query는 CRUD 중 Read와 같은 데이터 조회 기능 2. Query Service Layer데이터값 조회만을 위해 사용하는 서비스단더티체킹이 필요없기 때문에 readOnly transaction을 사용한다플러시를 하지 않기 때문에 더티 체킹과 같은 작업을 수행하지 않아도 되어 성능이 비교적 향상된다. 3. Comman..
코틀린 프로젝트 하던 중 entity 설계 시, MutableSet이 문득 궁금해졌다. 내가 가지고 있는 해시태그들의 리스트들이다. (해시태그 묶음)@ElementCollectionvar hashtags: MutableSet = mutableSetOf() Set : 집합처럼 중복되지 않는, 고유한 원소만을 갖는다. 불변적이다. MutableSet: 말 그대로 가변적인 집합 (Set을 상속받는다). 즉, 가변적으로 요소를 변경할 수 있다. - mutableSetOf는 MutableSet을 선언할 때 사용하는 메서드다. 오늘도 코딩하다가 하나 알았으니 기쁘게 출근~