전체 글33 Pub-Sub 구조에서 자주 발생하는 실수 Kafka를 통해서 Event Driven Architecture를 만들다 보면 흔히 발생하는 실수가 한 가지 있다. 바로 트랜잭션 종료 전에 Event를 전송하게 되는 것이다. 가령 상품을 생성하고 상품 번호를 받아서 후처리를 하는 경우, Subscriber에서 상품 번호로 조회를 하고자 하면 조회가 되지 않을 수도 있다. Publisher와 Subscriber 각각 layer 단위로 테스트 할 때는 발견이 되지 않는 문제다. 또한 개발 서버에서 테스트할 때도 Kafka와 DB의 속도 차이에 따라 테스트 중에 발견이 되지 않을 수도 있다. 다른 팀과 함께 협업을 하는 상황이라면 어디에서 잘못된 것인지 알아채기 굉장히 어려운 경우도 종종 있었던 것 같다. Subscriber 기준에서 Retry 설정을 갖.. 2022. 2. 16. Kafka 자주 쓰는 명령어 정리 버전 확인 $ bin/kafka-topics.sh --version Topic 관리 토픽 생성 $ bin/kafka-topics.sh --create --zookeeper ${zookeeper} --replication-factor 3 --partitions ${partitions} --topic ${topicName} * 토픽을 생성할 때 deadLetter도 함께 만들어 두는 습관을 갖자. deadLetter는 토픽의 파티션과 같은 숫자여야 한다. 토픽 확인 $ bin/kafka-topics.sh --describe --zookeeper ${zookeeper} --topic ${topicName} 토픽의 파티션 갯수, replication factor, retention등의 부가 설정을 확인할 수 있.. 2022. 2. 16. /dev/null 이해하기 Backend 개발자로서 업무 중에 스크립트를 작성할 일이 많지 않지만, 배포 스크립트를 작성하다 보면 리눅스 잘 모르는 사람으로서 당황스러운 구문이 /dev/null이었다. java -jar myapplication.jar > /dev/null 2> /dev/null jar로 되어있는 프로그램을 실행시킨다. > /dev/null => 실행 결과에 대한 응답값(STDOUT)을 무시한다. 2> /dev/null => 실행시 오류(STDERR)를 무시한다. 실행한 곳에 EOF를 전달한다. & => 백그라운드로 실행한다. /dev/null 자체는 리눅스에서.. 2021. 10. 14. Modern Java In Action 정리 - 13 디폴트 메서드 자바8 이전에는 인터페이스에 새로운 메소드를 추가하게 된다면 해당 인터페이스를 implement하는 쪽에서 전부 compile error가 나곤 했다. 따라서 하나의 인터페이스를 정의하더라도 굉장히 고심해서 설계해야 했다. 하지만 요구사항은 쉽게 변하고 변경이 많아지기 때문에 이러한 문제는 어떻게든 계속 일어나게 된다. 자바8에서는 인터페이스에 static method 와 default method를 추가해서 이 문제를 해결하고자 했다. 인터페이스를 구현하는 클래스는 자동으로 추가된 디폴트 메서드를 상속받게 된다. default void sort(Comparator 2020. 7. 11. Modern Java In Action 정리 - 12 새로운 날짜와 시간 API Date, Calendar java 1.0에서는 날짜를 표기하기 위해서 Date 클래스를 만들었다. java.util.Date는 문제가 많다. 특정 시점을 날짜가 아닌 밀리초 단위로 표현한다. 기준이 1900년이다. 1일은 1로 표기하고 1월은 0으로 표기한다. mutable하다 Date date = new Date(117, 8, 21); 를 출력하면 Thu Sep 21 00:00:00 CET 2017 라고 나오는데 2017년이 117로 써야 하고 9월인데 8로 써야 하고 CET (중앙유럽시간대)를 쓰니까 뭐 이거 불편한게 이만저만이 아니다. 그래서 java 1.1에서 java.util.Calendar를 만들었다. 이것도 문제가 많다. 여전히 달은 0부터 시작했다 mutable하다 LocalDate ja.. 2020. 7. 4. Modern Java In Action 정리 - 11 null 대신 Optional 클래스 I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language(ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null re.. 2020. 6. 27. 이전 1 2 3 4 ··· 6 다음