java
[JAVA] JMH(Java Microbenchmark Harness)를 사용하여 성능 테스트를 해보자
JMH(Java Microbenchmark Harness) 개발을 하다보면 이 로직보다 다른 로직이 더 빠를 것 같은데? 이 라이브러리 사용이 더 좋을 것 같은데? 하는 궁금증이 있다. 하지만 어플리케이션 단위로 성능을 측정하기엔 부수적인 로직들과 라이브러리가 들어가기 때문에, 함수 단위로 성능 측정을 하고 싶은 생각이 든다. 그렇다고 time함수를 사용해서 end time과 start time을 측정해서 성능 테스트 결과는 이러하다 라고 하기엔 warm up, 쓰레드 갯수 등 고려해야 할 사항들이 많다. 이러한 부분을 해결해주기 위한 성능 측정 프레임워크가 벤치마크 프레임워크이다. 특징 oracle의 jit compiler 개발자가 만들었기 때문에 타 benchmark framework보다 신뢰할 수 ..
[JPA] Spring Jpa Repository의 영속성 컨텍스트 동작방식
개발을 하다보면 Root 도메인에 종속적인 Sub 도메인을 어떻게 처리할지 고민이 될 때가 있다. 예를 들면, 재생 목록의 음악들은 재생 목록이라는 Root 도메인에 종속적인 Sub 도메인 들이다. Delete And Insert 방식을 실행할 수도 있고, Update 방식을 사용할 수도 있다. 그러다보니 JPA를 사용했을때, 각 개발 방식이 어떻게 동작하는지 알고 싶어서 직접 엔티티를 생성하며 테스트 코드를 작성해 보았다. 코드는 모두 깃허브에 작성해두었다. private SimpleEntity create(String name) { SimpleEntity entity = SimpleEntity.builder() .name(name) .build(); return repository.save(entit..
[JPA] Spring Data에서 save()와 saveAll()의 성능 차이
https://www.baeldung.com/spring-data-save-saveall 해당 글은 위 링크를 번역한 글입니다. Overview Spring Data의 save와 saveAll의 성능 차이를 알아보자. Application Book.java @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String title; private String author; // constructors, standard getters and setters } BookRepository.java public interface BookRepository extends JpaR..
[Design Pattern] 구조 패턴 - 컴포지트 패턴
github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural 컴포지트 패턴 복합 객체와 단일 객체를 동일하게 취급할 때 사용하는 패턴 객체들의 관계를 트리 구조로 구성하여 전체-부분 관계로 표현할 수 있다. Component 복합 객체와 단일 객체가 동일하게 가지는 속성과 기능을 가진 인터페이스 Leaf 컴포지트 패턴에서 단일 객체를 의미한다. 트리구조에서 Composite의 자식 역할을 한다. Composite 컴포지트 패턴에서 복합 객체로 Component 인터페이스를 통해 자식 객체를 관리한다. 컴포지트 패턴의 가장 대표적인 예가 폴..
[Design Pattern] 구조 패턴 - 데코레이터 패턴
github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural 데코레이터 패턴 주어진 상황 및 용도에 따라 객체에 대한 책임을 덧붙이는 패턴 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 대안 자바는 다중 상속을 지원하지 않기 때문에 추가해야 할 기능의 종류가 많은 경우 데코레이터 패턴을 사용할 수 있다. 데코레이터 클래스와 데코레이터를 적용할 클래스는 합성 관계를 통해 표현된다. 합성(has-a) 관계 생성자에서 필드에 대한 객체를 생성하는 경우 전체 객체가 없어지면 부분 객체도 없어진다. 상속에 의해 코드를 재사용하는 것 대신, 객..
[Design Pattern] 생성 패턴 - 싱글톤 패턴
github 코드 https://github.com/yaini/Spring_Study/blob/spring-2-oop-design-pattern/design-pattern/src/main/java/creational 싱글톤 패턴 한 클래스에 한 인스턴스만 존재하도록 제한하는 패턴 특징 기본 생성자가 private static 팩토리 메소드인 getInstance 인스턴스를 저장할 static 필드 장점 하나의 인스턴스만 생성하므로 메모리 낭비를 방지할 수 있다. static으로 전역으로 사용되는 인스턴스이기 때문에 데이터 공유가 쉽다. 단점 여러 스레드에서 동시에 접근 할 수 있으므로 동시성 문제 유의하여 설계해야 한다. 단위 테스트는 격리된 환경에서 실행되어야 하지만, 싱글톤 패턴은 전역에서 사용하기 ..