@Hyeonic
나누면 배가 되고

testcontainers

March 18, 2024

작성에 사용된 예제 코드는 testcontainers에서 확인해볼 수 있다. 대부분의 애플리케이션 서비스는 다른 서비스의 의존성을 가지고 운영된다. 간단한 예시로 데이터 저장을 위한 DB, 소셜 로그인을 위한 서버 호출 등을 통해 유기적으로 이루워져 있다. 즉 하나의 독립적인 서버 환경에서는 원할한 서비스를 운영하는 것은 어려운 일이다. 이러한 외부 의존…


Spring Data JPA Auditing

March 08, 2023

Spring Data JPA Auditing 작성에 사용된 예제 코드는 jpa-auditing에서 확인해볼 수 있다. 언어는 kotlin으로 작성하였다. Spring Data는 엔티티를 하거나 과 를 투명하게 추적할 수 있는 정교한 지원을 제공한다. 해당 기능을 사용하기 위해서는 애노테이션을 사용하거나 인터페이스를 구현하여 정의할 수 있는 auditing…


조금 늦은 2022년 회고

January 12, 2023

2022년은 내게 조금은 특별한 해이다. 단순히 기술적인 성장을 넘어 한 사람으로서의 가치관을 형성할 수 있었던 시기였다. 회고를 통해 지난 1년을 뒤돌아보며 점검할 수 있는 회고를 적어보려 한다. 우아한테크코스 2022년의 시작은 대부분의 시간을 할애한 우테코를 빼놓고 이야기할 수 없을 것 같다. 정말 하고 싶었던 교육이었기 때문에 2021년은 대부분의…


문자열 생성 방식 비교하기

December 11, 2022

Java는 객체지향 언어이기 때문에 기본적으로 제공하는 이 아닌 경우 모두 로 구성되어 있다. 이것은 문자열도 마찬가지다. 다만 은 여타 다른 객체와 차이점을 가지고 있다. 그것은 바로 을 지원한다는 것이다. 문자열 생성 방법 Java에서 문자열을 생성하는 방법에는 두 가지가 있다. 생성자를 활용한 방식 문자열 리터럴을 활용한 방식 생성자를 활용한 방식 …


스프링이 개선한 트랜잭션 (2)

December 10, 2022

작성에 사용된 예제 코드는 spring-transaction에서 확인해볼 수 있다. 이전 시간에 트랜잭션 추상화를 통해 여러 데이터 접근 기술 변경에 유연한 구조를 만들었다. 또한 트랜잭션 동기화를 통해 멀티 스레드 환경에서도 별도의 커넥션 객체를 사용하여 독립적으로 트랜잭션이 적용될 수 있도록 구현하였다. 이번 시간에는 템플릿 콜백 패턴을 활용한 과 …


스프링이 개선한 트랜잭션 (1)

December 09, 2022

작성에 사용된 예제 코드는 spring-transaction에서 확인해볼 수 있다. 트랜잭션은 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우 원래 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)을 막아준다. 또한 트랜잭션은 하나의 논리적인 작업 셋의 쿼리 개수와 관계없이 논리적인 작업 셋 자체가 전부 적용(CO…


낙관적 락과 동시성 테스트

December 03, 2022

동시성 이슈를 해결하기 위해서는 다양한 방법이 존재한다. 예를 들면 Java의 , 비관적 락과 낙관적 락, 분산 락 등이 존재한다. 이번에는 충돌이 발생하지 않는다고 낙관적으로 가정한 뒤 락을 처리하는 낙관적 락에 대해 알아보려 한다. 작성에 사용된 예제 코드는 optimistic-locking에서 확인해볼 수 있다. 낙관적 락 트랜잭션 충돌이 발생하지 …


SimpleJpaRepository의 save()는 어떻게 새로운 엔티티를 판단할까?

November 21, 2022

SimpleJpaRepository의 save()는 어떻게 새로운 엔티티를 판단할까? 를 사용하면 JPA 기반의 repository를 쉽게 구현할 수 있다. 대표적으로 를 통해 보다 더 정교한 기능들을 제공한다. 이를 통해 개발자는 데이터 접근 계층을 손쉽게 구현할 수 있다. SimpleJpaRepository 는 인터페이스의 기본 구현이다. 이것은 …


OSIV와 사용하며 직면한 문제

October 24, 2022

OSIV OSIV는 Open Session In View의 준말로, 영속성 컨텍스트를 뷰까지 열어둔다는 것을 의미이다. 영속성 컨텍스트가 유지된다는 의미는 뷰에서도 과 같이 영속성 컨텍스트의 이점을 누릴 수 있다는 것이다. 요청 당 트랜잭션 OSIV의 핵심은 뷰에서도 이 가능하도록 하는 것이다. 가장 단순한 방법은 요청이 들어오자 마자 혹은 를 거치는 …


커버링 인덱스

October 10, 2022

커버링 인덱스 MySQL 8.0 이상, InnoDB 스토리지 엔진을 기준으로 작성되었다. 인덱스를 사용하여 처리하는 쿼리 중 가장 큰 부하를 차지하는 부분은 어디일까? 바로 인덱스 검색에서 일치하는 키 값의 이다. 그림을 살펴보면 인덱스 검색에서 일치하는 키 값을 데이터 파일에서 읽을 때 비교적 느린 속도를 가진 디스크 I/O가 발생한다. N개의 인덱스…