Redis는 메모리 기반 데이터베이스로, 빠른 응답속도와 높은 처리량 덕분에 캐싱, 세션 관리, 실시간 분석 등 다양한 분야에서 널리 사용됩니다. 하지만 Redis는 메모리 상에서 데이터를 관리하기 때문에, 메모리 사용량이 급증하면 성능 저하나 OOM(Out Of Memory) 문제가 발생할 수 있습니다. 따라서 Redis를 효율적으로 운영하기 위해서는 메모리 최적화와 관리 전략이 필수적입니다. 1. Redis 메모리 구조 이해Redis 메모리 최적화의 첫 단계는 메모리 구조를 이해하는 것입니다. Redis는 모든 데이터를 메모리에 올리고 관리하므로, 데이터를 어떻게 저장하는지가 곧 메모리 사용량에 직결됩니다.1.1 데이터 구조별 메모리 사용Redis는 다양한 자료구조를 지원합니다. 각 자료구조는 내부적..
자바는 전통적으로 객체지향 프로그래밍(OOP) 언어로 알려져 있습니다. 하지만 Java 8부터 함수형 프로그래밍(Functional Programming, FP) 을 지원하면서 코드의 간결성과 유지보수성을 높일 수 있는 새로운 패러다임이 도입되었습니다.이번 글에서는 기초 개념부터 고급 활용까지 자세히 살펴보며, 실제 예제와 함께 자바에서 함수형 프로그래밍을 어떻게 적용할 수 있는지 알아보겠습니다.1. 함수형 프로그래밍이란?함수형 프로그래밍은 부수 효과(side-effect)를 최소화하고, 상태를 변경하지 않으며, 함수를 일급 객체로 다루는 프로그래밍 스타일입니다.일급 객체(First-class Citizen): 함수도 변수처럼 다룰 수 있습니다.순수 함수(Pure Function): 동일한 입력에 대해 ..
들어가며통합회원 서비스: 기존 3개 도메인별 회원 DB CRUD 변경 사항을 통합회원 DB와 동기화기존 도메인 서비스가 통합회원 DB로 완전히 전환되지 않아, 사이드이펙트 발생 가능성을 고려JTA 기반 분산 트랜잭션으로 3개 도메인 DB + 통합회원 DB 묶어 동기화 처리2PC 패턴으로 인한 성능 저하 및 서비스 지연 다수 발생개선 방향: 비동기 이벤트 기반 아키텍처로 전환 검토Spring Event 비교한 도입시 장점현재 Spring Event를 사용할 경우, 이벤트 발생 후 내부에서 여전히 대상 서버의 API를 호출하여 처리가 이루어지고 있음.반면, 별도의 Streams를 사용할 경우, 통합회원 시스템에서는 이벤트만 발행하면 이후 처리 과정은 별도로 신경 쓰지 않아도 되며, 시스템 간 의존성이 낮아짐..
들어가며최근 팀에서 회원가입 로직 리팩토링 중, 기존 테스트 케이스 정리하는 작업 담당이상하게도 어떤 테스트는 단독 실행 시 성공하지만, 전체 테스트를 돌리면 실패하는 현상 발생로그를 뒤져보고, 디버깅까지 해도 로직에는 문제가 없었음, 원인은 Spring의 ApplicationContext 공유 때문으로 확인문제 상황예시코드 (회원가입 성공)@SpringBootTestclass MemberServiceTest { @Autowired private MemberService memberService; @Test void 회원가입_성공() { MemberRequest req = new MemberRequest("uijin", "pass123"); Member me..
가비지 컬렉션(Garbage Collection)가비지 컬렉션은 프로그래밍에서 더 이상 사용하지 않는 메모리, 즉 "쓰레기"가 된 메모리를 자동으로 회수하여 재활용하는 프로세스이다. 이는 개발자가 명시적으로 메모리를 해제해야 하는 부담을 덜어주고, 메모리 누수와 같은 문제를 예장하는 데 중요한 역할을 한다.가비지 컬렉션의 기본 원리가비지 컬렉션의 핵심 원리는 어떤 메모리 객체가 아직 사용되고 있는지, 아닌지를 판단하고 사용되지 않는 객체가 차지하고 있는 메모리를 회수하는 것이다. 가비지 컬렉션의 기본 원리는 다음과 같다.객체 추적 : 가비지 컬렉터는 프로그램 내의 모든 객체를 추적하고 관리한다. 각 객체가 어떤 변수나 다른 객체에 의해 참조되고 있는지 여부를 파악한다.도달 가능성 판단 : 가비지 컬렉터는..
Java 17의 등장Java 17 버전은 2021년 9월에 공개된 LTS(Long Term Supports) 버전으로 Java 11 LTS 등장이후 3에 등장한 LTS 버전이다.이번 Java 17버전의 다양한 변화사항중 눈에 띄는 점은 새로운 객체지향 패러다임을 제시하는 문법이 추가되었다는 점인데, 각각 Record, Seald Class이다. 이번 글에서 각각의 문법에 대해 자세히 알아보려 한다.RecordRecord 클래스는 데이터를 보유하는 데 특화된 간결한 클래스 선언 방식이다.전통적인 Java 클래스에서는 반복적으로 작성해야하는 보일러 플레이트(Boiler Plate)코드들이 다수 존재하는데, Record 클래스를 통해 해당 코드들을 자동으로 생산하도록 하여 개발자의 생산성을 크게 향상시킬 수 ..
시작하기남부끄럽지만, 5년차 개발자가 된 이 시점에 나의 SQL 실력은 어느정도일까 궁금해졌다.마침 SQLD 시험이 멀지 않은 시점에 있었고, 자격증이라고는 대학교때 따놓은 '정보처리기사' 뿐인지라, 이참에 내 SQL 실력을 테스트해보고, 나를 어필할 수 있는 자격증 하나를 더 얻어두면 좋겠다는 생각에 시험을 준비했다. 우선 한국 데이터 산업 진흥원 사이트에서 3월 8일에 예정된 SQLD 시험을 접수하였다.부끄러운 실력이지만 그래도 내가 몇년차인데라는 생각으로 기출문제를 풀어보고, 실무와는 또다른 문제들에 낯부끄러운 점수를 가지고 시험준비를 시작했다.공부방법 합격 후기나 시험을 준비한 많은 분들이 흔히 말하는 '노랭이책' SQL 자격검정 실전문제로 공부를 했다는 내용을 토대로 해당 책으로 공부를 시작했다..
동시성 제어의 중요성데이터베이스나 분산 시스템에서는 여러 트랜잭션이 동시에 하나의 데이터에 접근할 때, 데이터의 일관성과 무결성을 보장하기 위해 동시성 제어가 필수적입니다.올바른 동시성 제어가 이루어지지 않으면 더티 리드(Dirty Read), 레이스 컨디션(Race Condition)과 같은 동시성 관련 문제가 발생할 수 있습니다.낙관적 락과 비관적 락낙관적 락과 비관적 락은 트랜잭션 제어를 통한 동시성 제어의 대표적인 락 기법으로, 데이터 무결성과 일관성을 유지하기 위해 사용됩니다.이 글에서는 낙관적과 비관적 락에 대한 정의와 동작원리 그리고 구현 방법에 대해 정리해 보겠습니다.낙관적 락 (Optimistic Lock)정의와 동작 원리낙관적 락은 동시성 제어 방식 중 하나로, 데이터의 충돌 가능성이 ..