가비지 컬렉션(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 클래스를 통해 해당 코드들을 자동으로 생산하도록 하여 개발자의 생산성을 크게 향상시킬 수 ..
테스트 코드 작성후 글 업데이트 예정1. 시작하기한번의 클릭으로도 동작하는 기능이라도, 사용자는 빠른 응답을 기대하며 다중 요청을 보내는 경우가 있습니다.예를 들어 티켓예매, 선착순 경품 행사, 수강신청은 의도치 않은 과도한 요청이 서버를 대상으로 발생합니다.또는 한명의 사용자가 초당 1000번의 API 호출을 할 때, 다른 사용자는 초당 1번의 API 호출을 한다면 API 사용관점에서 공정하지 않을 수 있습니다. 과도한 요청과 클라언트별 형평성있는 API 사용을 보장하기 위해 사용자별 요청을 제한할 필요가 있으며, Gateway에서 이를 관리할 수 있습니다. 이번 프로젝트에서는 Spring Cloud Gateway와 Redis를 이용하여 사용자의 요청을 제한하는 Rate Limiting을 구현 해보았습..
시작하기남부끄럽지만, 5년차 개발자가 된 이 시점에 나의 SQL 실력은 어느정도일까 궁금해졌다.마침 SQLD 시험이 멀지 않은 시점에 있었고, 자격증이라고는 대학교때 따놓은 '정보처리기사' 뿐인지라, 이참에 내 SQL 실력을 테스트해보고, 나를 어필할 수 있는 자격증 하나를 더 얻어두면 좋겠다는 생각에 시험을 준비했다. 우선 한국 데이터 산업 진흥원 사이트에서 3월 8일에 예정된 SQLD 시험을 접수하였다.부끄러운 실력이지만 그래도 내가 몇년차인데라는 생각으로 기출문제를 풀어보고, 실무와는 또다른 문제들에 낯부끄러운 점수를 가지고 시험준비를 시작했다.공부방법 합격 후기나 시험을 준비한 많은 분들이 흔히 말하는 '노랭이책' SQL 자격검정 실전문제로 공부를 했다는 내용을 토대로 해당 책으로 공부를 시작했다..
동시성 제어의 중요성데이터베이스나 분산 시스템에서는 여러 트랜잭션이 동시에 하나의 데이터에 접근할 때, 데이터의 일관성과 무결성을 보장하기 위해 동시성 제어가 필수적입니다.올바른 동시성 제어가 이루어지지 않으면 더티 리드(Dirty Read), 레이스 컨디션(Race Condition)과 같은 동시성 관련 문제가 발생할 수 있습니다.낙관적 락과 비관적 락낙관적 락과 비관적 락은 트랜잭션 제어를 통한 동시성 제어의 대표적인 락 기법으로, 데이터 무결성과 일관성을 유지하기 위해 사용됩니다.이 글에서는 낙관적과 비관적 락에 대한 정의와 동작원리 그리고 구현 방법에 대해 정리해 보겠습니다.낙관적 락 (Optimistic Lock)정의와 동작 원리낙관적 락은 동시성 제어 방식 중 하나로, 데이터의 충돌 가능성이 ..
주절주절2025년 올해는 대학을 졸업한 직후 작은 회사에서 시작한 개발자로써의 커리어가 5년차가 되는 해입니다.첫입사때 당시 나의 지식으로는 도저히 이해하기에 어렵던 코드와 쿼리들 그리고 주어지는 업무속 여러가지 IT 용어들이 무슨말인지 조차 알지못해 용어의 뜻을 하나하나 검색하며 일했던 초창기에 비해, 지금의 저는 물론 아직 부족하지만 그때에 비해 많이 성장한 것 같습니다. 올 한해는 특히 많은 일들이 있었고, 그 많았던 일들 만큼 새로운 지식과 생각들 저에게 다시 한겹 쌓이고 앞으로 살아갈 삶의 방향성을 되돌아보게 되었습니다.최근들어 제 또래의 지인들과 하는 말 가운데 "내가 느끼는 나의 모습은 아직 고등학교, 대학교때의 모습인데 몸만 이렇게 늙은것 같다."는 이야기를 농담으로 하곤합니다. 마찬가지..
MSA 환경에서 서비스 간의 데이터 일관성을 보장하는 것은 복잡한 문제입니다. 특히 여러 서비스에 각각 다른 데이터베이스가 존재하며 트랜잭션을 유지해야하는 상황에서 ACID 원칙을 지키는 것은 쉽지 않습니다. 이 기술적 문제를 해결하기 위하여 SAGA 패턴을 적용하여 Kafka 기반의 분산 트랜잭션을 구현하는 미니 프로젝트를 진행하고 글로 정리하였습니다. 프로젝트 전체 코드는 아래 github을 통해 확인할 수 있습니다.https://github.com/kwj2435/spring-redis-stock-managerSAGA 패턴SAGA는 '이야기' 혹은 '서사'라는 뜻을 가진 영어단어입니다. 단어의 뜻과 같이 SAGA 패턴의 분산 트랜잭션은 2PC(Two-Phase Commit)와 같은 전통적인 트랜잭션 ..
프로젝트 개요이번 프로젝트에서는 분산 시스템 환경에서 발생하는 다양한 문제 상황중, 서로 다른 요청이 하나의 데이터에 몰리게 되어 발생하는 레이스 컨디션(Race Condition) 문제를 분산 락을 이용해 해결하는 미니 프로젝트를 진행하고 이를 정리했습니다.이전글 - [Redis] Redis 분산락(Distributed Lock)을 이용한 재고관리 구현 - 1저번 글에서는 프로젝트를 위한 환경설정과 애플리케이션 시작시 Redis Warmup, 서비스 시점 DB - Redis 실시간 동기화를 위한 처리등을 진행했습니다.이번 글에서는 재고 관리 관련 API 개발 및 예외처리 그리고 Jedisson을 이용한 Redis 분산락을 적용하고 테스트 했던 내용을 정리했습니다.프로젝트 전체 코드는 아래 github을..