분류 전체보기

    2차 캐시를 이용한 최적화 기록

    2차 캐시를 이용한 최적화 기록

    개인 프로젝트에 2차 캐시를 적용하면서 데이터 최적화를 시도한 기록을 기록합니다. 🔍 자바의 표준 캐시 (JCache) JCache는 자바 애플리케이션을 위한 표준화된 캐싱과 매커니즘을 제공합니다. 캐싱 표준으로 설계되었기 때문에, 벤더 중립적입니다. 즉, JCache API를 사용하여 애플리케이션을 개발하면 다른 캐시 API로의 전환이 용이합니다. JCache는 다음과 같은 표준 인터페이스를 제공하고 공급자를 제공받음으로써 벤더 중립적인 개발을 가능하게 도와줍니다. CacheManager - 캐시 설정, 구성 및 종료를 담당하는 인터페이스 CachingProvider CacheManager의 생명 주기를 생성하고 관리하는 인터페이스 대표적인 공급자로 Ehcache, Hazelcast, Caffeine,..

    [프로젝트 기록] fetch-join을 이용해 쿼리 최적화하기

    [프로젝트 기록] fetch-join을 이용해 쿼리 최적화하기

    프로젝트를 진행하면서 쿼리 최적화한 과정을 기록하려고 한다. SpringBoot3.x , JPA를 사용한 프로젝트이다. 🔍 연관관계 기본적으로 JPA를 사용하여 프로젝트를 진행하면 Delete, Update, 맵핑관계가 설정되어 있는 조회 로직에서 쿼리를 확인하고 최적화를 진행하고 있다. 이번에는 일대다 관계를 가진 엔티티를 조회할 때의 쿼리 최적화를 진행하였다. @AllOpen @Entity class Product( @ManyToOne @JoinColumn var category: ProductCategory, ) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null } @Entity class ProductCat..

    [JPA] JPA의 장점과 그 원리

    [JPA] JPA의 장점과 그 원리

    이전 포스팅에서 객체지향프로그래밍과 데이터베이스간 패러다임 불일치로 발생하는 문제들을 알아봤다. 이번에는 JPA가 이런 문제를 어떻게 해결하는지 알아보자. 새로운 계층: JPA 레이어 JPA는 데이터베이스와 애플리케이션 사이에서 동작한다. 계층이 하나 더 있기 때문에 최적화 관점에서 시도해 볼 수 있는 것이 많다. 1. 지연 로딩 Customer를 조회할 때 Orders속성에 명시적으로 액세스할 때까지 SELECT 쿼리가 나가지 않는다. @Entity public class Customer { @OneToMany(mappedBy = "customer") private List orders; } 2. Batch Fetching 관련 엔티티를 일괄적으로 로드하여 쿼리 수를 최소화한다. @Entity publ..

    [JPA] JPA의 필요성: 객체와 데이터베이스 간의 격차 해소하기

    객체 지향 프로그래밍의 도전 과제 객체 지향 프로그래밍의 영역에서는 추상화, 상속, 다형성이라는 3박자가 복잡한 시스템의 제어를 조율한다. 그러나 이러한 원칙을 데이터 저장으로 확장하면 수많은 과제가 발생한다. JDBC API 사용 시 불편한 점을 고려하여 그 복잡성을 자세히 살펴보자. 예를 들어 User객체를 조회해보자. // 저장 class UserJdbcTemplate { public User findUserByUsername(String username) { String sql = "SELECT * FROM users WHERE username = ?"; return jdbcTemplate.queryForObject(sql, new Object[]{username}, (resultSet, rowN..

    [프로젝트 기록] Redis 메인/레프리카 서버 만들기

    [프로젝트 기록] Redis 메인/레프리카 서버 만들기

    [ Redis 레프리카 서버 만들기 ] 이용하고 있던 Redis EC2의 이미지를 복제하여 새로운 인스턴스를 생성해주었다. 복제한 레디스의 정보를 확인해보자. redis-cli info Role설정이 master로 되어있는 것을 확인할 수 있다. 이를 replica로 설정해주자. replicaof (사설 IP) (포트번호) Ex ) replicaof 172.1.1.1 6379 다시 info를 입력하여 확인해보면 slave로 바뀐 것을 확인할 수 있다. 하지만 master_link_status: down임을 확인할 수 있다. /var/log/redis/redis-server.log의 기록을 살펴보면 다음과 같이 Connection refused가 발생하고 있음을 알 수 있다. 3291:S 11 Nov 20..