1. 유용한 MacOS 앱 정리[ Raycast ]Raycast는 macOS용 생산성 앱으로, 빠르게 앱을 실행하거나 다양한 작업을 수행할 수 있도록 도와준다. 사용자는 키보드 단축키로 Raycast를 호출해, 앱 실행, 파일 검색, 시스템 설정 변경, 계산기 사용, 웹 검색 등 다양한 작업을 할 수 있다. Raycast는 Option + Space 키로 실행을 트리거할 수 있다.예를 들어 캘린더 라는 단어를 입력했을 때, 나의 캘린더 페이지로 이동시키고 싶다면 다음과 같이 quick link를 생성할 수 있다. 그러면 다음과 같이 Option + Space로 트리거한 후에 캘린더를 입력하면 원하는 곳으로 빠르게 접속할 수 있다. 만약 url에 쿼리 파라미터를 추가하고 싶다면 {query}로 넣어줄 수..
1. 진짜 중복과 가짜 중복의 구분(중복 여부를 판단하는 기준)[ 진짜 중복과 가짜 중복 ]개발을 하다 보면 특정 기능에 대한 변경이 다른 기능에도 영향을 주게 되고, 이러한 사이드이펙트로 인해 시스템에 문제가 발생하는 경우가 자주 있다. 당연하게도 문제가 생긴 기능을 빠르게 복구하는 것이 가장 중요하겠지만, 이러한 문제가 생긴 근본적인 원인을 찾는 것 또한 중요하다. 대게 어떠한 기능에 대한 변경이 의도하지 않은 사이드이펙트를 유발하는 것은 단일 책임 원칙(SRP, Single Responsibility Principle)을 위반하기 때문일 것이다.예를 들어 다음과 같이 배송 주소를 저장하는 ShippingAddress 라는 클래스가 존재하며, ShippingAddress 객체는 집 주소와 회사 주소를..
1. 단위 테스트의 목표단위 테스트를 배우는 것은 테스트 프레임워크나 목 라이브러리 등과 같은 기술적인 부분을 익히는 것에 그치지 않는다. 단위 테스트는 단순히 테스트를 작성하는 것보다 더 큰 범주다. 단위 테스트에 시간을 투자할 때는 항상 최대한 이득을 얻도록 노력해야 하며, 테스트에 드는 노력을 가능한 한 줄이고 그에 따르는 이득을 최대화해야 한다. 두 가지를 모두 달성하기란 쉬운 일이 아니다. [ 1.2 단위 테스트의 목표 ]그럼 단위 테스트의 목표는 무엇인가? 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다.테스트는 안전망 역할을 하며, 대부분의 회귀에 대한 보험을 제공하는 도구라 할 수 있다.지속성과 확장성이 핵심이며, 이를 통해 장기적으로 개발 속도를 유지할 수 있다. 1.2..
1. 트랜잭션 관리를 위한 TransactionTemplate의 활용[ 트랜잭션 관리를 위한 TransactionTemplate의 활용 ]스프링으로 개발을 하다 보면 선언적 트랜잭션을 자주 사용하게 된다. 선언적 트랜잭션(Declarative Transaction)이란 @Transactional 애노테이션을 기반으로 트랜잭션을 처리하는 방법을 의미한다.예를 들어 다음과 같이 포인트를 충전하기 위한 비즈니스 로직이 있다고 하자.@Componentclass PointCharger( private val fetchUserPort: FetchUserPort, private val chargePointPort: ChargePointPort, private val loadChargingTransac..
1. 비즈니스 정책과 입력 데이터, 서로 다른 데이터 검증 및 유효성 검사(Validation)[ 입력 데이터의 검증 및 유효성 검사 ]우리의 애플리케이션은 클라이언트로부터 받은 입력 데이터를 바탕으로 비즈니스 로직을 수행해야 한다. 이때 입력 데이터가 잘못되면 시스템에 문제를 일으킬 수 있으므로 클라이언트로부터 올바른 데이터가 전달되었는지 검증이 필요하다. 예를 들어 주식 주문을 위한 API가 존재하고, 다음과 같은 입력 데이터를 받고 있다고 하자.@Getter@NoArgsConstructor@AllArgsConstructorpublic class OrderStockRequest { private TradeType tradeType; // 거래 타입(매도, 매입) private String..