전체 글158 Kafka - consume 실패 시 리트라이 저는 개인적으로 채팅 서비스를 토이 프로젝트로 개발하고 있습니다. 웹소켓, Kafka를 이용해서 메시지 저장 기능을 개발했었는데요. 이미지처럼 메시지를 한번 송신했는데 10번이 저장되는 이슈가 발생했습니다. 어떻게 된 일일까요? 콘솔 메시지를 확인해보니 KafkaException과 그 밑에는 코드 실수로 인한 NPE 예외가 콘솔에 찍혀있었습니다. 메시지를 저장하고, 그 이후의 데이터를 처리하는 과정에서 NPE가 발생했고, consume 메서드 내에서 예외가 발생해서 리트라이가 발생한 이슈였습니다. 그렇다면 10번 메시지가 저장됐던 이유는 무엇일까요? 위 코드에서 DEFAULT_BACK_OFF의 maxAttempt가 9로 설정돼있으므로 9번의 재시도 이후 열번째의 시도에서 메시지를 저장하고, 실패하면서 .. 2024. 4. 6. + ""는 의미가 있을까요? 직장에서 코드를 수정해서 카나리 서버에 배포했는데 갑자기 모니터링 알람이 마구마구 울렸습니다. 배포한 내용에서 NPE가 발생한다는 내용이었어요. "왜지? 분명 로컬에선 잘 돌아갔는데?" 라는 생각을 했었는데요. 예외가 발생한 이유가 무엇이었을까요? 수정 전 코드 String str = ""; ... while(true){ ... var comment = str + ""; if(comment.equals(preComment)){ ... } ... } 기존에 위와 같은 형태로 코드가 개발돼있었습니다. 그리고 저 코드가 속한 메서드와 관계없는 코드를 수정하고 commit을 했는데요. Intellij에 Cleanup 을 포함한 여러가지 commit 설정들을 사용하고 있었고, 그 중에 Cleanup 옵션에서 자동.. 2024. 2. 19. Intellij - Merge All Project Windows By Default! Winodw > Mege All Project Windows 옵션을 선택하면 아래 이미지처럼 실행돼 있는 프로젝트를 한 탭에서 볼 수 있다. 회사 맥북에서는 프로젝트를 새로 open할 때 자동으로 한 탭에서 프로젝트가 열렸는데, 개인 맥북에서는 새로운 탭으로 프로젝트가 열리는 문제가 있었습니다. 이 문제는 아래 설정을 통해 해결이 가능했습니다. 2024. 1. 21. 상태 패턴 (State Pattern) 상태 패턴은 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클랙스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임하므로 내부 상태가 바뀔 때 행동이 달라지게 된다는 사실을 쉽게 알 수 있습니다. 상태 패턴 클래스 다이어그램 Context 객체에 수많은 조건문을 넣는 대신에 상태 패턴을 사용할 수 있습니다. 참고 에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠. 『헤드퍼스트 디자인패턴 개정판』. 한빛미디어, 2022 https://velog.io/@y_dragonrise/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%83%81%ED%83%.. 2023. 11. 6. 반복자 패턴 (Iterator Pattern) 반복자 패턴은 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 항목을 제시합니다. 장점 모든 항목에 접근하는 작업을 컬렉션 객체가 아닌 반복자 객체가 맡게 된다. 모든 집합체에서 쓸 수 있는 다형적 코드를 만들 수 있다. 유의점 반복자에는 특별한 순서가 정해져 있지 않습니다. Iterator public interface Iterator { //수행할 항목이 있는지 여부 확인 boolean hasNext(); //다음 항목을 선택 IteratorItem next(); } Iterator 자바의 모든 컬렉션 유형에서 Iterable 인터페이스를 구현합니다. 어떤 클래스에서 Iterable을 구현하면 그 클래스는 iterator() 메소드를 구현합니다. 그 메소드는 Iterator .. 2023. 10. 30. 템플릿 메소드 패턴 (Template Method Pattern) 템플릿 메소드 패턴은 알고리즘의 골격을 정의합니다. 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 특정 단계를 서브클래스에서 재정의할 수도 있습니다. 커피와 홍차 예제 public abstract class CaffeineBeverage { final void prepareRecipe() { boilWater(); brew(); pourInCup(); addCondiments(); } abstract void brew(); abstract void addCondiments(); private void boilWater() { //물 끓이기 } private void pourInCup() { //컵에 따르기 } } public class Coffee exten.. 2023. 10. 26. 퍼사드 패턴 (Facade Pattern) 퍼사드 패턴은 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 줍니다. 또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있습니다. 어댑터 패턴에선 어떤 클래스의 인터페이스를 클라이언트가 원하는 인터페이스로 변환하는 방법을 배웠습니다. 퍼사드 패턴에선 인터페이스를 단순하게 바꾸려고 인터페이스를 변경합니다. 홈시어터 예시 public class HomeTheaterFacade { PopcornPoppper popper; Projector projector; StreamingPlayer player; public void watchMovie(String movie) { popper.on(); popper.pop(); projector.on(); player.on(); pla.. 2023. 10. 24. 어댑터 패턴 (Adapter Pattern) 어댑터 패턴은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와줍니다. 터키를 오리처럼 작동하게 하는 어댑터 public interface Duck { void quack(); void fly(); } public interface Turkey { void gobble(); void fly(); } public class TurkeyAdapter implements Duck{ Turkey turkey; @Override public void quack() { turkey.gobble(); } @Override public void fly() { turkey.fly(); } } 클라이언트에서 어댑터를 .. 2023. 10. 23. 커맨드 패턴 (Command Pattern) 커맨드 패턴을 쓰면 작업을 요청하는 쪽과 그 작업을 처리하는 쪽을 분리할 수 있어요. 커맨드 객체를 추가해서 커맨드 객체는 틍정 작업 요청을 캡슐화해줍니다. 설명이 어려우니 일단 코드부터 봐볼까요? //커맨드 인터페이스 public interface Command { void execute(); } //조명을 켤 때 필요한 커맨드 클래스 public class LightOnCommand implements Command { Light light; public void lightOnCommand(Light light) { this.light = light; } @Override public void execute() { light.on(); } } //인보커(Invoker) public class Simp.. 2023. 9. 27. 싱글턴 패턴(Singleton Pattern) 싱글턴 패턴은 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공하는 방법입니다. 싱글턴? 단순히 객체 인스턴스 1개 만드는 방법 아니야? 맞습니다. 하지만 하나만 있어도 충분히 잘 돌아가는 객체가 많습니다. 스레드 풀, 캐시, 대화상자, 사용자 설정, 등등 이런 객체들은 1개여야 정상적으로 작동할 수 있죠. 정적 변수를 쓰면 되는 것 아닌가요? 싱글턴 패턴은 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해 주는 패턴입니다. 전역 변수에 어떤 단점이 있나요? 전역 변수에 객체를 대입하면 애플리케이션이 시작할 때 객체가 생성됩니다. 리소스가 큰 객체이지만, 만약 사용하지 않게 되면 자원만 잡아먹는 객체를 생성하게 된 꼴 입니다. -> 그러면 싱글턴 패턴은 필요할때 생성하는건가? pub.. 2023. 9. 25. 이전 1 2 3 4 ··· 16 다음