JPA 1차 캐시와 2차 캐시 — 캐시 전략으로 DB 부하를 줄이는 방법
·
JPA
들어가며안녕하세요.JPA에는 캐시(Cache) 가 두 단계로 존재합니다. 바로 1차 캐시와 2차 캐시입니다.이전 글에서 영속성 컨텍스트와 엔티티 상태를 다루면서 1차 캐시를 잠깐 언급했습니다. 처음엔 "캐시가 왜 두 개나 필요하지?" 싶었는데 공부하면서 각각의 역할이 꽤 다르다는 걸 알게 됐습니다.이번 글에서는 1차 캐시가 정확히 어떻게 동작하는지, 그리고 1차 캐시만으로는 왜 부족한지, 그 한계를 2차 캐시가 어떻게 보완하는지 정리해보려 합니다. 캐시를 잘못 쓰면 데이터 불일치 같은 버그로 이어질 수 있어서 언제 써야 하고 언제 쓰면 안 되는지도 함께 정리했습니다.1. 1차 캐시란?1차 캐시는 영속성 컨텍스트 내부에 있는 Map 형태의 저장소입니다.별도 설정 없이 JPA를 사용하는 순간부터 항상 동작하..
JPA 영속성 컨텍스트와 엔티티 상태 관리 — 마법 같은 동작의 원리
·
JPA
들어가며JPA를 사용하면 데이터베이스를 객체지향적으로 다룰 수 있을 뿐만 아니라 반복적인 SQL 작성 시간을 줄여 비즈니스 로직 개발에 더욱 몰입할 수 있습니다. 하지만 내부적으로 엔티티가 어떻게 관리되고 동작하는지 정확히 모른 채 사용한다면 복잡한 비즈니스 상황에서 의도치 않은 쿼리가 발생하거나 데이터 정합성이 깨지는 결과를 초래할 수 있스빈다. 결국 JPA를 '잘' 쓰기 위해서는 내부적으로 엔티티가 어덯게 관리되고 동작하는지 잘 알고 있어야 합니다.이번 글에서는 JPA의 핵심 중의 핵심인 영속성 컨텍스트(Persistence Context)의 개념과 엔티티의 상태 관리에 대해 다루어 보겠습니다.1. 영속성 컨텍스트란 무엇인가?영속성 컨텍스트(Persistence Context) 는 한 마디로 ..
[StyleHub #1]프로젝트 주제 선정 이유 - feat : 무신사
·
stylehub 프로젝트
들어가며그동안 프로젝트를 하며 항상 마음 한구석에 아쉬움이 있었습니다."동시 요청이 몰리면 어떻게 하지? 장애가 나서 데이터가 꼬이면?" 같은 질문들을 머리로는 알고 있었지만, 정작 해결할 줄 몰랐기 때문입니다.그저 기능이 돌아가는 것에 만족하며 '공부해야 할 숙제'로만 남겨두고 있었습니다. 하지만 ccommit 개발자 멘토링을 계기로 이 숙제를 정면으로 마주하기로 했습니다. 이번 프로젝트는 단순한 기능 구현을 넘어 데이터 안전성, 대용량 트래픽 처리, 테스트 코드 기반 검증, 배포 자동화, 그리고 코드 리뷰를 통한 객체지향 리팩토링을 핵심에 두고 진행하려 합니다. 그리고 그 출발점으로 무신사와 같은 패션 커머스 플랫폼을 프로젝트 주제로 선택한 이유를 이번 글에서 정리해보려 합니다. 왜 커머스인가..
스프링을 스프링답게 만드는 진짜 이유: IoC·AOP·PSA 삼각형의 정체
·
스프링
0. 들어가며 스프링은 자바 기반의 오픈소스 프레임워크입니다.그리고 스프링은 단순히 편리한 기능을 제공하는 프레임워크가 아니라 자바로 객체지향 프로그래밍을 더 잘 할 수 있도록 도와주는 프레임워크입니다. 그 이유는 스프링의 뼈대에 IoC/DI, AOP, PSA, 그리고 POJO라는 핵심 개념들이 있기 때문입니다.이 개념들은 각각 독립적인 기능처럼 보이지만 결국 공통된 목적을 가지고 있습니다.바로 객체가 자신의 역할과 책임에만 집중할 수 있도록 만드는 것입니다. 그래서 스프링을 제대로 이해하기 위해서는 어노테이션이나 사용법을 익히는 것보다이른바 ‘스프링 삼각형’ 이라 불리는 IoC/DI, AOP, PSA 그리고 POJO를 먼저 이해하는 것이 중요하다고 느꼈습니다. 이 글은 「토비의 스프링」을 읽으며 스프..
SOLID 원칙 - 객제지향을 잘 하려면 SOLID를 기억해라
·
자바
0. 들어가며객체지향의 4대 특성(캡슐화, 상속, 추상화, 다형성)은 요리를 만들기 위한 불, 물, 칼과 같은 주방 도구라고 할 수 있습니다.물의 수압을 높이면 과일이나 채소를 자를 수도 있고 가스레인지 대신 과자 한 봉지의 열량으로도 물을 끓일 수 있으며, 젓가락 대신 나뭇가지를 깎아 사용할 수도 있습니다.하지만 과일이나 채소를 자를 때는 칼을 사용하는 것이 가장 좋은 방법이고, 음식을 조리할 때는 가스레인지와 냄비가 가장 적합합니다.아무리 좋은 도구가 있어도 올바르게 사용하지 않으면 요리를 만드는 과정은 비효율적일 수밖에 없습니다.도구를 올바르게 사용하는 법이 있는 것처럼 객체지향의 특성을 올바르게 사용하는 방법 역시 존재합니다.객체지향 언어를 이용해 객체지향 프로그램을 어떻게 설계해야 하는지에 대한..
Java 개발자가 꼭 알아야 할 버전별 특징 – 8 vs 11 vs 17
·
자바
0. 들어가며 자바는 비교적 역사가 오래된 언어로 1995년에 출시되어 30년에 가까운 오랜 시간 동안 다양한 환경과 요구에 맞추어 꾸준히 발전해 왔습니다.한 번 배우면 오랫동안 사용하게 되는 경우가 많은 만큼 자바를 둘러싼 기술 생태계 역시 한 세대의 변화로 끝나지 않고여러 버전이 공존하는 형태로 유지되고 있습니다.이러한 특성 때문에 자바를 사용하는 프로젝트를 진행할 때마다 어떤 자바 버전을 선택해야 할지에 대한 고민을 많이 하게 되었습니다.최신 버전을 사용하는 것이 최선일지, 아니면 안정성과 호환성을 고려해 기존 버전을 선택하는 것이 더 적절할지에 대해서는상황에 따라 판단이 필요하다고 느꼈습니다. 이 글에서는 자바의 주요 분기점이라 할 수 있는Java 8, Java 11, Java 17을 중심으..