본문 바로가기

공부141

KAFKA 알아보기(By Spring) 메시징 큐의 학습이 필요하여 카프카(KAFKA)를 학습하고 정리하는 글입니다. 출처 데브원영님의 카프카 강의 1. 카프카(KAFKA)란? Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 오픈 소스 분산 이벤트 스트리밍 플랫폼이다. 비동기 처리를 위한 메시징 큐의 한 종류이지만, 동기 처리도 가능하다! 기본적으로 프로듀서/컨슈머 구조를 가진다. 1-1. 카프카는 메일 시스템과 비슷하다! 메일 시스템 보내는 사람은 메일 서버로 메시지를 보낸다. (메일 서버에 저장됨) 받는 사람은 원할 때 메일을 볼 수 있다. 카프카 프로듀서는 카프카로 메시지를 보낸다. 컨슈머는 카프카에 저장되어 있는 메시지를 필요할 때 가져옴 2. 카프카 Quicksta.. 2023. 5. 8.
객체지향과 의존성 객체지향에서 제시하는 다양한 설계원칙과 개념이 있다. 실제 프로젝트나 현업에서 사용하고 고려할 수 있는 중요한 요소인 의존성에 대해 공부해보고자 한다. 이전부터 듣고싶었던 조영호님의 객체지향과 의존성에 대한 강의를 듣고 해당 내용을 정리해보고자 한다! https://www.youtube.com/watch?v=dJ5C4qRqAgA&t=5724s 의존성이란? 의존성은 한마디로 변경에 초점을 두는 것이다. A가 B에 의존할 경우[A → B], B가 변경될 때 A도 같이 변경될 수 있다. 의존성 종류에는 클래스 의존성, 패키지 의존성이 있다. 클래스 의존성 종류 크게 4가지가 있다 다음과 같다. 연관관계 class A { private B b; } 의존관계 class A { public B method(B b).. 2022. 11. 1.
[이펙티브 자바 3판] 아이템 28. 배열보다는 리스트를 사용하라 배열과 리스트에 대해 설명해주세요최근 면접 때 받았던 질문이다. 배열과 리스트에 대한 차이를 잠깐 이야기하고,이펙티브 자바에서는 배열보다 리스트 사용을 권장합니다. 그 이유는 배열은 런타임 시 에러가 발생하지만 리스트는 컴파일 시 에러를 잡아줍니다.여기에 이어진 질문에 대답을 못했고 이어서 공부해보겠다고 말씀드렸다.이번 기회에 다시한번 정리해보고자 한다.배열과 제네릭 타입의 차이배열은 공변(covaiant)이다.공변은 함께변한다라는 뜻이다.예를 들어 Sub가 Super의 하위 타입이라면, Sub[]는 배열 Super[]의 하위 타입이 된다. 이를 공변이라 한다. 즉, 함께 변한다.제네릭은 불공변(invariant)이다.불공변은 함께 변하지 않는다라는 뜻이다.List는 List의 하위타입이 아니고 상위타입.. 2022. 10. 31.
JPA에서 낙관적 락을 적용해보자 문제이슈 내편(내 마음을 편지로) 서비스에서 롤링페이퍼의 메세지에 좋아요를 누를 수 있는 기능이 있습니다. - 메세지 좋아요에 엄청난 연타를 누르거나 - PC, 모바일에서 좋아요를 동시에 눌렀을 때 다음과같은 이슈가 발생하였습니다. 중복된 데이터가 쌓였습니다! 메세지 좋아요 테이블에는 같은 member_id, message_id가 공존하면 안됩니다. 기존 코드 public MessageLikeResponseDto likeMessage(Long memberId, Long rollingpaperId, Long messageId) { // 메세지 좋아요 대상 "메세지"를 찾는다. final Message message = messageRepository.findById(messageId) .orElseThro.. 2022. 10. 27.
JUnit5에서 Kotest로 마이그레이션 하며 겪은 트러블슈팅들 1. AnnotationSpec의 사용성 AnnotationSpec에서 @Nested를 사용할 수 없다.. Kotest 5에서 @Nested을 지원한다고 하였지만 https://github.com/kotest/kotest/commit/69eea2d50067c6fa309fbad568d770c5e861a439에서 주석 처리되었다. Added support for @Nested in AnnotationSpec https://github.com/kotest/kotest/issues/2367 https://github.com/kotest/kotest/issues/3103 java.lang.IllegalArgumentException: object is not an instance of declaring class.. 2022. 10. 20.
HikariCP란 무엇이고 어떤 풀 사이즈를 적용해야 할까? WAS와 DB의 연결 WAS와 DB 사이 연결에는 많은 비용이 든다. 만약 하나의 SQL을 DB에 적용한다면 다음과 같은 과정을 거친다. JDBC 드라이버 로드 DB 연결 statement 생성 (인터페이스이며 DB에 SQL을 전달해주는 역할) SQL 전송 ResultSet을 통해 결과 확인 연결 해제 SQL 쿼리 하나를 전송하기 위해 위와 같은 행동이 반복된다. 이는 매우 비효율적이다. 정리하면 다음과 같다! 전체과정 중 커넥션을 생성하는 과정이 약 50%를 차지한다고 한다. 이러한 연결과정은 TCP/IP를 통해 이루어져 3-way-handshaking 과정을 통해 준비한다. 쿼리를 요청할 때 반복되면 네트워크 구간에서 병목현상이 발생할 수 있다. 이를 어떻게 해결할 수 있을까? 바로 커넥션 풀을 사용.. 2022. 10. 20.