본문 바로가기

공부/Spring59

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.
HikariCP란 무엇이고 어떤 풀 사이즈를 적용해야 할까? WAS와 DB의 연결 WAS와 DB 사이 연결에는 많은 비용이 든다. 만약 하나의 SQL을 DB에 적용한다면 다음과 같은 과정을 거친다. JDBC 드라이버 로드 DB 연결 statement 생성 (인터페이스이며 DB에 SQL을 전달해주는 역할) SQL 전송 ResultSet을 통해 결과 확인 연결 해제 SQL 쿼리 하나를 전송하기 위해 위와 같은 행동이 반복된다. 이는 매우 비효율적이다. 정리하면 다음과 같다! 전체과정 중 커넥션을 생성하는 과정이 약 50%를 차지한다고 한다. 이러한 연결과정은 TCP/IP를 통해 이루어져 3-way-handshaking 과정을 통해 준비한다. 쿼리를 요청할 때 반복되면 네트워크 구간에서 병목현상이 발생할 수 있다. 이를 어떻게 해결할 수 있을까? 바로 커넥션 풀을 사용.. 2022. 10. 20.
QueryDSL에서 수정, 삭제 벌크연산 하는방법을 알아보자 수정, 삭제 배치쿼리를 해보자 배치쿼리를 적용한 경우 JPQL 배치와 마찬가지로, 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화 하는 것이 안전하다. 쿼리 한번으로 대량 데이터를 수정해보자 1. 수정 예제 비회원으로 변경(28이하) 더하기 long count = queryFactory .update(member) .set(member.age, member.age.add(1)) .execute(); 곱하기 long count = queryFactory .update(member) .set(member.age, member.age.multiply(2)) .execute(); 2. 삭제 예제 long count = queryFactory .dele.. 2022. 8. 26.
[QueryDSL] 동적쿼리를 해결해보자 동적쿼리를 해결해보자 해결하는 방법은 두 가지 방법이 있다. BooleanBuilder Where 다중 파라미터 사용 하나씩 살펴보자! 1. BooleanBuilder null이 아닌 경우에만 검증 로직을 적용하고 싶을 때 다음과 같이 적용할 수 있다. 2. Where 다중 파라미터 사용 (실무에서 많이 사용한다!) by 김영한님 이 방법을 사용하면 코드가 한층 깔끔해진다. 아래 코드를 보고 바로 이해할 수 있기 때문이다. private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fe.. 2022. 8. 26.
[QueryDSL] 프로젝션(SELECT 대상)에 따라 다른 결과를 가져와 보자 1. 프로젝션에 대상 개수에 따른 결과 프로젝션은 SELECT 대상 지정이다. 1-1. 대상이 하나일 때 타입을 명확하게 지정할 수 있다. 1-2. 대상이 둘 이상 List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username = tuple.get(member.username); Integer age = tuple.get(member.age); System.out.println("username=" + username); System.out.println("age=" + age); } 대상이 둘 이상이면 튜플이나 DTO로 조회하자 .. 2022. 8. 26.