소프트웨어-이야기/프로그래밍 언어와 프레임워크 썸네일형 리스트형 ChatGPT에게 IfNecessary, IfNeeded 함수명의 차이를 물어보다. 함수명의 접미사로 xxxIfNecessary, xxxIfNeeded를 사용하는 경우가 있다. 이는 특수한 조건에 해당하는 경우에만 함수를 실행하게 하는 경우 사용한다. 그러나 두 함수의 차이점이 무엇인지 궁금해져 chatgpt에게 물어보았다. 둘다 필요한 경우에 작업을 수행하도록 할 때 사용된다. 그러나 둘은 미묘한 차이가 있다. xxxIfNecessary 작업이 항상 실행되지는 않는다. 특정한 조건에 해당하는 경우에만 실행한다. // 필요한 경우에만 파일에 값을 쓰는 함수 writeToFileIfNecessary() // 필요한 경우에만 이메일을 발송하는 함수 sendEmailIfNecessary() xxxIfNeeded 작업이 항상 실행되는 경우에 사용한다. 항상 작업을 해야하지만, 프로그램 연산 비.. 디자인패턴 - Strategy Design Pattern Strategy Design Pattern 대부분의 기능은 동일하지만, 타입에 따라 일부 동작만 다르게 처리해야하는 경우, 유용한 디자인 패턴이다. 본 글에서는 결제 방법 (토스 혹은 포인트 결제)에 따라 장바구니 기능이 다르게 동작하는 예제를 설명할 것이다. Diagram Example public interface PaymentStrategy { public void pay(int amount); } public class PointStrategy implements PointStrategy { private String userId; public PointStrategy(String userId){ this.userId=userId; } @Override public void pay(int amou.. Kafka 컨슈밍와 재시도 카프카 이벤트를 컨슈밍할 때, 오류가 발생하는 경우 이를 재시도하는 방안에 대해서 정리해보고자 한다. 컨슈밍에 실패한 경우, 재시도 방법을 크게 Blocking과 Non-Blocking 으로 나눠볼 수 있다. 여기서 Blocking은 현재 실행중이 프로세스에서 처리를 재시도하는 것을 말한다. Non-Blocking은 큐 시스템을 활용하여, 비동기로 다시 재시도 처리하는 것을 말한다. (1) Blocking 대안 a. spring-retry를 사용하여, 원하는 횟수만큼 처리를 재시도하기 @Service public interface PaymentService { @Retryable(value = TimeoutException.class, maxAttempts = 2, backoff = @Backoff(de.. Enum 활용하기 Enum의 장점 public enum PizzaStatus { ORDERED, READY, DELIVERED; } Enum의 장점은 다음과 같다. 코드의 가독성을 높여준다. 허용하는 값의 목록을 문서화한다. 잘못된 값이 전달되는 문제를 줄일 수 있다. 실수를 줄여준다. Enum 비교하기 Enum은 ==, equals 함수로 비교할 수 있다. Enum은 JVM 에 한 개의 인스턴스만 생성되기 때문에 모든 Enum 객체는 동일한 주소값을 갖는다. testPz.getStatus().equals(Pizza.PizzaStatus.DELIVERED); testPz.getStatus() == Pizza.PizzaStatus.DELIVERED; Enum 활용하기 (1) Enum에 함수 추가하기 public enum P.. Lombok 기본 생성자와 Getter/Builder 어노테이션 @Getter @Builder public class AddItemToCartCommand { private final Long userId; private final Long productId; private final Integer quantity; } Request DTO에 Getter, Builder 어노테이션만 추가하면, 다음과 같은 에러를 보게 되는 경우가 있다. Cannot construct instance of (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 이번주에도 이 에러를 보게 되었다. 낯설지 않아서, 에러 노트.. JPA Entity와 Lombok Annotation java entity를 쓰다보면 Lombok annotation이 덕지덕지 붙게 된다. 요렇게 말이다. 👇🏻👇🏻 @AllArgsConstructor @NoargsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class CartItem { ... 왜 annotation이 덕지덕지 붙게 되는건지, 왜 프로젝트마다 스타일이 다른건지 매번 까먹게 되어서 노션에 정리한걸 기록해보고자 한다. Context @Entity Entity를 사용하려면 JPA Proxy 기능 때문에 매개변수가 없는 기본 생성자가 필요하다. @Entity 어노테이션은 기본 생성자가 없는 경우, 알아서 기본 생성자를 만들어준다. 그래서 @NoArgsConstructor .. [EDA] 이벤트 데이터 설계 이벤트 설계 이벤트는 “뭔가" 일어났음을 전하는 메시지가 아니라, 이벤트가 발생한 동안의 모든 일들을 기록해야한다. 이 출력 이벤트를 단일 진실 공급원으로 간주해서 다운스트림 컨슈머가 소비할 불변의 팩트로 기록해야한다. 때문에 컨슈머는 이벤트 데이터 만으로도 데이터를 처리할 수 있다. 이론적으로는 출력 이벤트를 SSOT으로 간주하라고 한다. 그러나 실제 서비스에서는 ZERO-PAYLOAD 방식을 사용하는 경우가 많은 것 같다. 이벤트 스트림에는 하나의 논리적 이벤트를 나타내는 이벤트가 포함되어야 한다. 이벤트 데이터 타입은 가장 좁은 범위를 사용한다. 이벤트는 하나의 목적만 가진다. 다용도 스미카는 비즈니스 요건이 조금만 달라져도 엄청나게 복잡해진다. 이벤트 크기는 최소화한다. 이벤트 메시지가 큰 경우,.. [예외처리] notification pattern catched exception 회복해야하는 대상의 예외 자바에서는 메서드가 던질 수 있는 확인된 예외 목록을 선언해야한다. 아니면 해당 예외를 try/catch으로 선언해야한다. public boolean validate() { if (this.description.length() > 100) { throw new DescriptionTooLongException(); } final LocalDate parsedDate; try { parsedDate = LocalDate.parse(this.date); } catch (DateTimeParseException e) { throw new InvalidDateFormat(); } .... return true; } public class Descripti.. 이전 1 2 3 4 ··· 8 다음