JPA 영속성 컨텍스트 내부 동작의 흐름 깊게 파헤치기
·
Java & Kotlin/JPA
🧐 들어가기 전... 영속성 관리 (영속성 컨텍스트, 엔티티 매니저, 엔티티 생명주기)🧐 들어가기 전...JPA : Java Persistence API, 자바의 ORM 기술 표준으로 애플리케이션과 JDBC 사이에서 동작한다. JPA가 제공하는 기능은 크게 두 가지로 나뉜다.엔티티와 테이블을 매핑 엔티티를 실제jhzlo.tistory.com🔍 JPA란?: Java 애플리케이션에서 데이터베이스와 객체 간의 매핑을 효율적으로 관리하기 위한 표준 ORM(Object-Relational Mapping) 기술이다.JPA는 관계형 데이터베이스와 객체지향 언어 사이의 불일치를 해결하기 위한 매우 강력한 도구이다. 객체 지향 패러다임과 관계형 데이터 모델 간의 불일치는 개발 과정에서 빈번한 문제를 야기하며, 이는..
레디스 캐싱 전략, 캐시 만료, maxmemory-policy
·
Redis
🔸캐시로서의 레디스캐시로서의 레디스는 다음과 같은 이점을 지니고 있다.간편한 사용:키-값 형태로 데이터를 저장하고 반환하는 방식이 간단하며, 다양한 자료 구조(list, hash 등)를 변환 과정 없이 바로 저장할 수 있다.빠른 속도: 모든 데이터를 메모리에 저장하기 때문에 데이터 검색과 반환 속도가 매우 빠르다.평균 읽기 및 쓰기 속도가 1ms 미만으로 초당 수백만 건의 작업이 가능하다.고가용성(HA): 클러스터 기능을 통해 장애 발생 시 자동으로 장애를 감지하고 페일오버를 수행하여 운영자의 개입 없이 정상적으로 유지된다유연한 확장성(레디스의 클러스터): 레디스의 클러스터를 활용하면 캐시의 스케일 아웃이 쉬워 서비스 규모에 따라 캐시 자체의 규모를 쉽게 확장할 수 있습니다.🚨따라서 레디스는 캐시 저..
Redis란? (레디스가 싱글쓰레드로 동작하는 이유)
·
Redis
🔸Redis란?레디스는 Remote dictionary server의 약자로 오픈소스, 고성능 key-value 인메모리 NoSQL 데이터베이스이다.주로 캐싱, 세션 관리, 메시지 브로커, 실시간 데이터 분석 등의 목적으로 사용된다. 📌 핵심 특징:빠른 성능: 메모리 기반으로 동작하여 매우 빠른 데이터 읽기/쓰기 속도를 제공단순한 키-값(Key-Value) 저장소: 다양한 데이터 구조를 지원싱글 스레드 기반: 이벤트 루프를 이용한 높은 성능 유지지속성(Persistence) 지원: RDB 및 AOF 방식으로 데이터 영구 저장 가능분산 및 클러스터 지원: 여러 노드로 확장 가능🔸Redis의 특징 1️⃣  실시간 응답(빠른 성능) Redis는 RAM(메모리)에서 데이터를 저장하고 조회하기 때문에, 디스..
영속성 관리 (영속성 컨텍스트, 엔티티 매니저, 엔티티 생명주기)
·
Java & Kotlin/JPA
🧐 들어가기 전...JPA : Java Persistence API, 자바의 ORM 기술 표준으로 애플리케이션과 JDBC 사이에서 동작한다. JPA가 제공하는 기능은 크게 두 가지로 나뉜다.엔티티와 테이블을 매핑 엔티티를 실제 사용JPA는 엔티티 매니저를 통해서 엔티티를 사용하게 되는데,이때 엔티티 매니저는 저장, 수정, 삭제, 조회 등의 엔티티와 관련된 모든일을 처리한다. 개발자 입장에서는 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스라고 생각하면 된다.✅ 엔티티 매니저 팩토리와 엔티티 매니저☑️ 엔티티 매니저 팩토리 VS 엔티티 매니저Entity Manager Factory:엔티티 매니저를 생성한다Persistence Unit을 기반으로 생성되는 객체로, 데이터베이스와의 연결 설정, JPA ..
[Effective Java] Item05. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
·
Java & Kotlin/DesignPattern
🧐 들어가기 전...많은 클래스는 하나 이상의 기본 자원에 의존한다. 객체 지향 언어에서는 각각의 객체들이 서로를 필요로 하며, 비즈니스 로직을 수행해나간다. 객체는 서로의 메서드를 호출하거나 데이터를 교환하면서 협력하며,이러한 상호작용을 통해 애플리케이션의 주요 기능을 구현한다. 이 과정에서 하나의 객체가 다른 객체의 인스턴스를 생성하고 의존하는 구조는 자연스럽게 나타나지만, 잘못된 설계 방식으로 인해 코드의 유연성과 재사용성이 저하될 위험이 있다. 단순히 new 생성자를 통해서 인스턴스를 생성하는 것은 잘못된 방식일까?그렇다면 어떤 방식으로 객체의 인스턴스를 생성해야하고, 어떻게 의존성을 관리해야 올바른 설계를 할 수 있을까?✅ 기존의 문제점 1️⃣ 정적 유틸리티 클래스의 부적절한 사용public ..
[Effective Java] Item04. 인스턴스화를 막으려거든 private로 선언하라.
·
Java & Kotlin/DesignPattern
🧐 들어가기 전...코드를 구성하다 보면, 정적 메서드와 정적 필드의 묶음으로 클래스를 구성하고 싶을 때가 찾아온다.// 비인스턴스화 가능한 유틸리티 클래스public class MathUtility { // 상수 필드 public static final double PI = 3.14159; public static final double E = 2.71828; // 정적 메서드: 두 수의 최대값 계산 public static int max(int a, int b) { return (a > b) ? a : b; } // 정적 메서드: 두 수의 최소값 계산 public static int min(int a, int b) { return ..
J_hzlo
J_hzlo