실무에서 외부 시스템과 통신하는 코드는 필연적으로 다양한 예외를 마주합니다.하지만 종종 이런 예외를 아래와 같이 직접적으로 던지는 경우를 봅니다:이렇게 되면 무슨 문제가 생길까요?도메인 계층이 외부 시스템의 예외 타입에 오염됨 → IOException 같은 라이브러리
프로젝트를 진행하면서 선착순 쿠폰 발급을 진행시 중복발급이 발생하여 이를 해결하기 위해 여러 고민들을 하였고 Kafka + Redis를 활용한 대기열 시스템으로 개발하였습니다. 1. 기존 문제점 > case 이벤트성 상품 할인 쿠폰 이벤트 시 중복하여 쿠폰이 발생하
개인 프로젝트로 진행하는 쇼핑몰 프로젝트에서 상품 랭킹 서비스 구현을 Redis의 Write back 패턴을 활용하여 구현한 내용을 정리 해보자 📒 🧐기존 랭킹 구현 상태를 살펴보자 현재 프로젝트에서 사용자가 상품 조회요청을 보내면 Product-service에서
개인 프로젝트로 진행하는 쇼핑몰 프로젝트에서 상품 랭킹 서비스 구현을 Redis의 sorted set을 이용해서 구현한 내용을 정리 해보자 📒 🧐기존 랭킹 구현 상태를 살펴보자 현재 프로젝트에서 사용자가 상품조회를 요청하게 되면 Product-Service 에서
일정 개수의 상수 값을 정의한 다음 그외의 값은 허용하지 않은 타입그렇다면 이런 열거 타입을 왜 사용할까? 열거 타입 이전에 사용 했던 정수 열거 패턴을 살펴보며 이유를 알아보자!타입 안전을 보장할 방법이 없으며, 표현력 또한 좋지 않다.평범한 상수를 나열이기 때문에
불변 클래스란? >불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스다. 자바 플랫폼 라이브러리에도 String, BigInteger, BigDecimal가 여기 속한다.
사내 프로젝트를 진행하면서 고가용성과 성능향상을 위해 DB를 이중화하기로 하였고, 이를 Replication을 사용하기로 결정했습니다! 그렇담 이 Replication은 무엇인가?!간단하게 DB 즉 데이터베이스를 복제하는 행위그렇담 왜 하나의 DB를 사용하면 되지만
equals를 재정의한 클래스는 hashCode도 재정의 해야한다. 그렇지 않는다면 hashCode 일반 규약을 어기게 되어 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으키기 때문이다.equals비교에 사용되는 정보가 변경되지 않다면, 객
영속성 컨텍스트는 엔티티를 영구 저장 하는 환경 이다. 영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상 DB 역할을 하며, 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보고나하고 관리한다.비영속(new
얼마전에 작성했던 try-with-resources의 대한 내용이 책에서도 나오는것을 보면 많이 사용되는 개념인것 같다. 앞서 try-with-resources 예외 처리여기서 설명했지만 각설하고 다시 정리해보도록 하자자바의 InputStream, OutputStre
자바에서 두 가지 객체 소멸자인 finalizer과 cleaner를 제공한다. 하지만 이를 사용하는 것은 지양해야한다. 자바 9 에서 finalizer은 deprecated 되었고, clenaner가 대안으로 나왔으나 여전히 예측할 수 없고, 느리며, 불필요 하다.Fi
C,C++ 와는 다르게 자바에서는 GC(가비지 컬렉터)을 통해 메모리를 회수해 가지만. 그렇다고 메모리 관리를 하지 않아도 된다고 오해해서는 절대 안된다간단한 스택을 구현한 코드이다. 특별한 문제는 없어 보이지만, 이스택을 사용하는 프로그램을 오래 실행하다 보면 가비지
문자열 a,b,c는 결국 동일한 "test"라는 문자열을 가지군다. 하지만 실행될때 마다 String 인스턴스를 새로 만들어 버린다. 이렇게 되면 메모리를 할당하기 때문에 낭비가 발생되어 버린다.그렇기 때문에 문자열 리터럴을 사용하여 이러한 메모리 낭비를 줄여야 한다.
클래스가 하나 이상의 자원에 의존하고, 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다.이 자원들을 클래스가 직접 만들게 해서도 안 된다. 대신 필요한 자원을 생성자에 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유
정적 메서드와 정직 필드만을 담은 클래스를 만들고 싶을 때가 있다. 예를 들어 java.lang.Math, java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아 놓을 수 있다. 혹은 java.util.Collections처럼 특정 인터페이스를
싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태 객체, 설계상 유일한 시스템 컴포넌트를 말한다. 하지만 싱글턴 클래스는 타입을 인터페이스로 정의하고 그것을 구현체로 정의한 것이 아니라면 테스트하기 어려워질
점층적 생성자 패턴 정적 팩터리와 생성자에는 선택적 매개변수의 수가 많을 때 대응하기가 어렵다. 이럴 때 점증적 생성자 패턴을 사용할 수 있다. 하지만 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기가 매우 어렵다. 자바 빈즈 패턴 자바빈즈 패턴은 매개
프로젝트를 진행하면서 요약하자면 파일 다운로드 하는기능을 만들다가 오류가 발생했는데 디버깅 하기가 쉽지 않았다 그저 close()에서 오류가 발생했다고만 나오고 자세히 기술되어 나오지 않았기 때문이다. 대략적인 코드이다그래서 try-with-resources으로 바꾸었
개요 일반적으로 클래스의 인스턴스를 얻는 방법으로는 public 생성자다. 일반적인 클래스에선 public 생성자만응로도 충분히 생성이 가능하지만, 생성자 외에 정적 팩터리 메서드를 제공하면 사용자 입장에서 의도한 대로 인스턴스를 만들기 쉬워지는 경우가 종종 있다.