1. 스프링이 제공하는 레디스 직렬화/역직렬화(Redis Serializer/Deserializer)의 종류와 한계 및 개선법서비스를 개발하다 보면 레디스(Redis)는 사실상 필수불가결한 구성 요소라고 볼 수 있다. 따라서 스프링 진영 역시 레디스를 손쉽게 사용할 수 있도록 캐시 추상화를 해줄 뿐만 아니라, 레디스의 자동 구성(AutoConfiguration) 등을 제공한다. 뿐만 아니라 레디스는 기본적으로 byte 배열을 사용해 데이터를 저장하기 때문에, 스프링 데이터 레디스(spring-data-redis) 에서는 데이터를 직렬화하여 레디스에 저장하고, 필요 시에 역직렬화하는 직렬화/역직렬화 도구까지 기본적으로 제공한다.하지만 스프링이 제공하는 레디스 직렬화/역직렬화(Redis Serializer/..
1. 데이터 중심의 세상과 객체 지향 프로그래밍(Data-Oriented and Object-Oriented Programming)[ 데이터 중심의 세상 ]21세기는 두말 할 필요 없이 데이터가 중심인 세상이다. 많은 데이터들이 기록되고 수치화되며, 데이터를 분석하여 얻은 결과는 수 많은 의사결정의 근거가 된다. 이렇듯 데이터 중심의 세상이 되면서, 프로그래밍 세계에도 변화가 도래했다. 마이크로서비스 아키텍처가 등장하고 데이터가 중심이 되어 서비스들 간에 데이터를 교환하는 것이 상당히 중요해졌다. 이를 위해 자바는 대표적으로 Ember라는 프로젝트를 통해 언어를 고도화하여 생산성을 높이고자 하였고, 그 과정으로 데이터를 손쉽게 모델링할 수 있도록 도와주는 record 클래스 등이 등장하게 되었다. 심..
1. 객체에게 역할과 책임을 부여하는 객체 지향 프로그래밍 (Object-Oriented Programming)[ 객체에게 역할과 책임을 부여하는 객체 지향 프로그래밍 ]우리는 대부분 자바 또는 코틀린과 같은 객체 지향 언어(Object-Oriented Programming)를 사용하여 개발을 하고 있다. 객체 지향 언어는 캡슐화(Encapsulation), 상속 (Inheritance), 다형성 (Polymorphism), 추상화 (Abstraction) 등과 같은 특성을 통해 프로그래밍을 용이하게 할 수 있도록 도와준다. 이러한 특성을 바탕으로 시스템을 구현하면 변경에 유연하게 대응할 수 있다.객체 지향적인 부분이 가장 많이 적용되는 부분은 인터페이스를 통해 추상화를 하는 부분일 것이다. 예를 들어 ..
1. 유용한 MacOS 앱 정리[ Raycast ]Raycast는 macOS용 생산성 앱으로, 빠르게 앱을 실행하거나 다양한 작업을 수행할 수 있도록 도와준다. 사용자는 키보드 단축키로 Raycast를 호출해, 앱 실행, 파일 검색, 시스템 설정 변경, 계산기 사용, 웹 검색 등 다양한 작업을 할 수 있다. Raycast는 Option + Space 키로 실행을 트리거할 수 있다.예를 들어 캘린더 라는 단어를 입력했을 때, 나의 캘린더 페이지로 이동시키고 싶다면 다음과 같이 quick link를 생성할 수 있다. 그러면 다음과 같이 Option + Space로 트리거한 후에 캘린더를 입력하면 원하는 곳으로 빠르게 접속할 수 있다. 만약 url에 쿼리 파라미터를 추가하고 싶다면 {query}로 넣어줄 수..
1. 진짜 중복과 가짜 중복의 구분(중복 여부를 판단하는 기준)[ 진짜 중복과 가짜 중복 ]개발을 하다 보면 특정 기능에 대한 변경이 다른 기능에도 영향을 주게 되고, 이러한 사이드이펙트로 인해 시스템에 문제가 발생하는 경우가 자주 있다. 당연하게도 문제가 생긴 기능을 빠르게 복구하는 것이 가장 중요하겠지만, 이러한 문제가 생긴 근본적인 원인을 찾는 것 또한 중요하다. 대게 어떠한 기능에 대한 변경이 의도하지 않은 사이드이펙트를 유발하는 것은 단일 책임 원칙(SRP, Single Responsibility Principle)을 위반하기 때문일 것이다.예를 들어 다음과 같이 배송 주소를 저장하는 ShippingAddress 라는 클래스가 존재하며, ShippingAddress 객체는 집 주소와 회사 주소를..