카프카 컨슈머 graceful shutdown 구현 방식 비교 (spring, reactor)
·
카테고리 없음
카프카 컨슈머 구현 시에 graceful shutdown 의 구현 방식을 살펴본다.  1. kafka-clients카프카 Java Client 를 이용한 컨슈머 폴링 시에 shutdown 을 구현한 코드는 다음과 같다.public void run() { try { consumer.subscribe(topics); while (true) { ConsumerRecords records = consumer.poll(Long.MAX_VALUE); records.forEach(record -> process(record)); consumer.commitSync(); } } catch (WakeupException e) { // ignore, we're closi..
불변 객체를 어디서 어떻게 활용할까?
·
카테고리 없음
최근 도메인 주도 개발과 이펙티브 자바를 공부하면서 공통적으로 불변 객체에 대해 공부하게 되었는데, 어떤 상황에서 불변 객체를 사용해야하고 어떻게 활용해야하는지 정리해보고자 한다. 불변 객체란? 불변 객체란 인스턴스를 생성한 후, 인스턴스의 내부 값을 수정할 수 없는 객체를 말한다. 자바에서 메서드의 인자로 객체의 참조 (reference) 를 전달하거나 메서드 내에서 인스턴스를 생성한 뒤 변수에 할당했을 때, 참조를 통해 값을 수정하면 내부의 상태가 변할 수 있다. 이와 달리 불변 객체의 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 바뀌지 않는다. 이펙티브 자바에서는 불변 객체를 만드는 방법으로 다음의 다섯 가지 규칙을 제시한다. 1. 객체의 상태를 변경하는 메서드 (setter) ..
2022 코드스쿼드 마스터즈 코스 회고
·
TIL
어느새 상반기를 마무리하는 시점에서, 지난 반년 동안 함께했던 코드스쿼드 마스터즈 코스 과정에 대한 회고를 작성해보고자 한다. 비록 6월말부터 진행할 인턴십 과정이 코드스쿼드에서의 마지막 주간과 겹치는 바람에 수료까지는 함께하지 못하고 조금 일찍 나오게 되어 일찍 회고를 작성하게 되었지만, 이미 대부분의 과정을 진행한 점을 참고하기를 바란다. 코드스쿼드를 선택한 이유 작년 여름에 인턴이 끝나고 나서, 인턴 경력을 갖고 어느 기업이든 뚫을 수 있지 않을까하는 기고만장한 생각을 갖고 있었다. 그리고 단 하나의 지원서도 서류를 통과하지 못한채 하반기가 끝나가고 있었고, 당시 학교에서 진행하던 컴퓨터과학종합설계 프로젝트와 개인적으로 진행하던 풀스택 프로젝트에서 스스로 답답함을 느껴가면서 어떻게 해야 더 성장하는..
코드로 스프링 트랜잭션 API 구조 보기
·
Java
서비스 추상화와 디자인 패턴 PSA (Portable Service Abstraction) 는 로우 레벨의 기술을 추상화하여 (Service Abstraction) 다른 애플리케이션에서 적용할 수 있게 해주는 (Portable) 방법이다. 여기서 서비스의 의미를 생각해봐야 하는데, 애플리케이션의 비즈니스 로직 서비스 계층을 말하는 것이 아니라 기술 서비스 계층을 의미한다. 위 그림은 토비의 스프링 5장 서비스 추상화에서 등장한 구조도로, 트랜잭션의 서비스 추상화를 위해 계층 간 상속관계와 호출을 나타내고 있다. 트랜잭션 기술의 서비스 추상화를 위해 PlatformTransactionManager 라는 인터페이스를 두고 DataSourceTransactionManager, HibernateTransacti..
Optional 과 Checked/Unchecked Exception
·
카테고리 없음
토비의 스프링 4장 예외 처리 부분을 읽으면서, 데이터 계층에서 SQLException 이 발생했을 때 예외 전환을 통해 Checked Exception 을 Uncecked Exception 으로 전환해 처리하는 방법을 공부하게 되었다. 그런데 이전에 코드스쿼드에서 미션을 진행하는 동안 데이터 계층에서 JDBCTemplate 을 사용하면서, SQLException 을 만났을 때 Optional 객체를 반환하도록 구현한 적이 있었다. 이번 기회를 통해 어떤 방법이 더 좋을지에 대해 비교해보고자 한다. Optional 먼저 SQLException 을 만났을 때 Optional 객체를 반환하는 코드는 아래와 같다. UserJdbcRepository.java public Optional findByUserId(..
Spring Data JDBC 에서 연관관계 매핑
·
Java
코드스쿼드에서 미션을 진행하면서 Spring Data JDBC 를 사용하게 되었다. 이전까지는 스프링 프레임워크에서 기본적으로 제공하는 JDBCTemplate 만을 사용했지만, 처음으로 자바 애플리케이션 내의 도메인 객체와 관계형 데이터베이스의 테이블을 매핑하는 모듈을 다루게 되었다. 그 과정에서 특히 어려움을 겪었던 Spring Data JDBC 에서의 1:1, 1:N, N;1, N:M 연관관계 매핑에 대해, 스스로 시행착오를 겪으면서 알게된 방법을 정리해보고자 한다. 연관관계 매핑을 연습하면서 정리한 GitHub 리포지토리의 링크는 아래와 같다. https://github.com/rxdcxdrnine/relation-spring-data-jdbc GitHub - rxdcxdrnine/relation-..