전체 글132 이벤트 소싱(Event Sourcing) 이해 저는 데이터를 다루는 대부분의 상황에서, 사용자 유스케이스에 따라 데이터를 저장하거나 수정하는 작업을 RDB 기반의 CRUD 방식으로 처리해 왔습니다. 자연스럽게 테이블을 만들고, INSERT, UPDATE, DELETE 같은 쓰기 작업을 통해 상태를 변경하는 것이 저에겐 너무나 익숙하고 당연한 일이었죠. 그러던 중 “이벤트 소싱 이해” 번역서의 베타리더를 모집한다는 소식을 접했고, 운 좋게 정식 출간 전 원고를 먼저 읽어볼 수 있는 기회를 얻게 됐습니다. 책을 읽던 중, 옮긴이의 말에서 이런 문장이 눈에 들어왔어요.“망치를 든 사람에겐 모든 게 못으로 보인다.” 항상 RDB와 CRUD가 유일한 해답이라고만 생각한 저는 이 문장을 보고 정말 망치로 머리를 ‘툭’ 맞은 듯한 느낌이었습니다. 그래서 '이벤트.. 2025. 7. 13. MySQL에서 잠금을 통해 동시성 문제를 제어하는 방법 다중 사용자가 동시에 DB의 데이터를 읽고 수정하는 환경에서 발생하는 중요한 문제 중 하나는 동시성 문제가 아닐까 합니다. 백엔드 개발자로서 동시성 문제는 한 번쯤 고민해 봤을 굉장히 흥미로운 주제일 텐데요. 여러 사용자가 동시에 단일 데이터에 접근하여 조회하고 수정할 때, MySQL에서는 이를 어떻게 관리할까요? 공유 잠금(Shared Lock), 배타적 잠금(Exclusive Lock)MySQL은 동시성 문제를 잠금(Lock) 메커니즘을 통해 제어하며, 대표적인 방법으로 공유 잠금(Shared Lock)과 배타적 잠금(Exclusive Lock)을 사용합니다. 일반적으로 공유 잠금은 읽기 잠금, 배타적 잠금은 쓰기 잠금 으로 불리고 있어요. 이 두 잠금 방식의 차이는 동일한 레코드에 여러 세션이 접.. 2025. 3. 30. LIMIT OFFSET 페이징 쿼리를 개선할 수 있는 방법 대용량 데이터를 다루는 애플리케이션을 개발할 때, 빠르고 정확한 정보를 제공하기 위해서는 페이징 처리와 쿼리 최적화는 필수 요소입니다. 우리는 보통 페이징 쿼리를 작성할 때 관성적으로 LIMIT & OFFSET 구문을 사용하는데, 사실 이 두 구문의 조합은 DBMS 서버에 불필요한 부하를 발생시킬 수 있습니다. LIMIT & OFFSET 페이징 쿼리의 문제점SELECT * FROM table LIMIT 10000 OFFSET 10; LIMIT & OFFSET 방식의 페이징은 페이지 번호가 커질수록 DB가 처리해야 할 데이터 양이 급격히 증가하는 문제를 안고 있습니다. DBMS가 순차적으로 레코드를 읽지 않고 지정된 OFFSET 이후의 데이터만 바로 가져올 수 없기 때문에, OFFSET 이전의 모든 데이터.. 2025. 3. 9. 자바 8에서 Arrays.asList() 를 완벽한 불변리스트로 사용하기 회사에서 운영 중인 서비스는 자바 8 버전을 사용하고 있습니다.때문에 정적 리스트를 생성할 때 자바 9에서 추가된 List.of()를 사용하지 못하고, 대신 Arrays.asList()를 사용하고 있는데요.하지만 완벽한 불변을 보장하는 List.of()와 달리 Arrays.asList()는 완벽한 불변을 지원하지 않습니다.자바 8에서 List.of()를 대체할 수 있는 수준으로 Arrays.asList()를 완벽한 불변 리스트로 만드는 방법을 공유하고자 합니다. Arrays.asList()를 불변 리스트로 만들기에 앞서 Arrays.asList()의 기본동작을 보며 완벽한 불변 리스트가 아닌지 살펴보겠습니다. 1. Arrays.asList()와 List.of()의 기본동작Arrays.asList()의 동.. 2025. 1. 27. 배열보다는 리스트를 사용하라 최근 [이펙티브 자바]를 읽으면서 배열보다 리스트를 주로 사용해 온 이유에 대해 다시 생각해 보게 되었고 이 경험을 공유하고자 합니다. 배열과 제네릭의 차이를 알아보고 배열보다는 제네릭을 사용할 수 있는 리스트를 사용하는 이유에 대해 다뤄보겠습니다. 첫 번째 이유 : 배열과 제네릭의 공변성과 불공변성자바에서 배열은 공변성을 가지고, 제네릭은 불공변성을 가진다는 차이가 있습니다.배열보다 리스트를 사용해야 하는 첫 번째 이유는 제네릭의 불공변성 덕분에 타입 안정성을 보장하기 때문입니다. 이를 이해하기위해 간단한 예로 공변성과 불공변성을 알아보겠습니다. 공변성공변성은 말 그대로 '함께 변한다' 라는 뜻으로, 이를 코드 레벨에 적용해 본다면 모든 객체의 상위 클래스인 Object가 있고 하위 클래스인 Integ.. 2024. 9. 27. 『그림으로 이해하는 알고리즘』 서적 리뷰 길벗 출판사의 '개발자 리뷰어' 활동으로 『그림으로 이해하는 알고리즘』 서적을 제공받아 작성하게된 서평입니다. 특정 기술을 처음 접할 때는, 세부적인 부분에 집중하기 전에 전체적인 구조를 먼저 파악하는 것이 이해에 더 도움이 된다고 생각합니다. 흔히 말하는 '나무보다 숲을 보라'는 말처럼 말이죠. 저에게는 길벗의 '그림으로 이해하는' 시리즈의 책들이 그런 역할을 해주었습니다. 이번에 리뷰할 『그림으로 이해하는 알고리즘』 을 읽기 전,『그림으로 이해하는 AWS 구조와 기술』 과 『그림으로 이해하는 가상화와 컨테이너』 서적을 먼저 접했었는데요! 당시 위 기술들을 어떻게 공부해야 할지 막막했지만, '그림으로 이해하는' 시리즈의 책들은 심화된 내용을 다루기보다 초보자를 위한 쉬운 설명과 그림으로 개념을 쉽게 이.. 2024. 9. 8. 이전 1 2 3 4 ··· 22 다음