전체 글

모르는 내용 및 아는 내용 모두 꼼꼼히 복습하여 익숙해지는 그 날까지 꾸준히 공부하겠습니다.
Infra/Kafka

[Kafka] Docker Compose를 통해 Kafka 구축하기 - Kraft 모드

Kafka 3개의 Broker 환경 구축하기 - Kraft ModeDocker compose를 통해 Kafka 환경을 구축하려고 합니다.Kraft ModeZoopkeeper가 아닌 Kraft 모드로 3개의 Broker 구축NetworkKafka 서비스들이 서로 통신할 수 있도록 독립적인 도커 네트워크를 설정합니다. (kafka_network)VolumeKafka 서비스의 데이터 저장을 위해 각 Broker 별로 도커 볼륨을 설정합니다. (Kafka00, Kafka01, Kafka02)Kafka Kraft 모드란KRaft(Kafka Raft) 모드는 기존의 ZooKeeper에 의존하던 Kafka의 메타데이터 관리를 Kafka 자체에서 처리하도록 하는 새로운 아키텍처입니다. KRaft 모드는 Kafka 2...

Infra/Kafka

[Kafka] Kafka 개념 이해하기, Producer, Consumer, Broker

Kafka란대규모 실시간 데이터 스트리밍을 처리하고 관리하는 분산 이벤트 스트리밍 플랫폼입니다. 링크드인(LinkedIn)에서 개발되었으며, 현재 오픈 소스로 제공되어 널리 사용되고 있습니다.사용 사례로그 및 메트릭 수집대규모 시스템에서 생성되는 로그와 메트릭 데이터를 카프카에 전송하여 중앙에서 실시간으로 수집, 처리, 분석실시간 데이터 파이프라인데이터를 한 시스템에서 다른 시스템으로 실시간으로 전달하는 데이터 파이프라인 구축에 사용됩니다.실시간 스트리밍 분석금융 거래, IoT 센서 데이터 등 실시간 스트리밍 데이터를 처리하고 분석하는 데 사용됩니다.메시지 큐서로 독립적인 서비스 간의 메시지 교환을 위해 사용됩니다.  이벤트 스트리밍 플랫폼이란이벤트 스트리밍 플랫폼은 데이터를 실시간으로 스트리밍하고 처리..

Spring Framework/Spring boot

[Spring&WebSocket] 스프링 STOMP를 통한 채팅 서비스 개발하기 - websocket

STMOP란Simple Text Oriented Messaing Protocol의 약자WebSocket 위에서 동작하는 텍스트 기반 메시징 프로토콜클라이언트와 서버가 전송할 메시지 유형, 형식, 내용들을 정의하는 메커니즘기본적으로 Publish-Subscribe 구조로 되어있다.Publish-Subscribe 구조란 **메시지를 공급하는 주체와 소비하는 주체를 분리**해 제공하는 메시징 방법이다. Springboot에서 STOMPWebSocket 기반으로 각 Connection마다 WebSocketHandler를 구현하지 않고 @Controller로 된 객체를 이용해 관리할 수 있음메시지는 STOMP의 Destination 헤더를 기반으로 @Controller 객체의 @MethodMapping 메서드로 ..

Spring Framework/Spring boot

[SpringBoot] 스프링부트 @Transactional 개념 및 사용법 - Required, requires_new

Transaction이란트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 의미합니다. 데이터베이스의 상태를 변화한다는 것은 insert, update, delete 같은 SQL 문을 이용해 데이터베이스에 접근하는 것을 의미합니다. ⭐️ Spring에서의 @Transcational 이란Springboot에서 @Transcational은 하나의 함수가 하나의 데이터베이스 트랜잭션의 범위 안에서 실행되어야 하는 것을 명시합니다. 해당 어노테이션을 메서드에 적용시키면, Springboot는 해당 메서드를 시작할 때 트랜잭션을 시작하고, 메서드가 성공적으로 완료되면 트랜잭션을 commit 합니다. (만약, 도중 예외가 발생하면 rollback 합니다.) 이를 통해 비정상적인 종료나 오류로 인..

JAVA

[JAVA] Java Stream groupingBy 통해 그룹핑하기

Stream(). collect()stream(). collect()는 데이터의 중간 처리 후 마지막에 원하는 형태로 변환해 주는 역할을 합니다.stream 요소들을 List, Set, Map 자료형으로 변환stream 요소들의 결합 (joining)stream 요소들의 통계 (최대, 최소, 평균값)stream 요소들의 그룹화와 분할 Collectors.toList()모든 Stream의 요소를 List 인스턴스로 수집하는 데 사용합니다.stream().collect(Collectors.toList());stream().toList(); Collectors.groupingBy()Collectors의 groupingBy()는 일부 속성 별로 객체를 그룹핑하고 결과를 Map 인스턴스에 저장하는 데 사용됩니다...

트러블슈팅

[트러블슈팅] Spring Cache Redis - List 역직렬화MismatchedInputException 해결

문제 상황Redis Cache를 사용해서 List를 저장하려고 했습니다.엔티티의 모든 데이터를 저장하는 것은 비효율적이고 참조된 엔티티와의 순환 참조 때문에 List 형태로 저장하기로 했습니다.기존 캐싱 적용 코드@Override@Cacheable(value = "nowRecruit", key = "'sorted'")public List getNowRecruitOrderByClass(LocalDateTime now) { return recruitRepository.findNowRecruitOrderByClass(now);}캐싱한 데이터는 위 코드와 같습니다.List를 응답으로 반환하고 **nowRecruit**라는 캐시의 **sorted**라는 키 값으로 저장됩니다.Redis 설정으로 Value는 ..

Test/JMeter

[JMeter] JMeter 를 이용해 성능 테스트 및 부하 테스트 사용법 정리

JMeter 설치mac 기준으로 jmeter를 설치하는 방법입니다.mac에서는 brew를 통해 간단히 설치하여 사용합니다.brew install jmeteropen /opt/homebrew/bin/jmeterJMeter 테스트 용어Thread Group: 테스트에 사용될 스레드 개수 (쓰레드 1개당 사용자 1명)Sampler: 사용자의 액션 (ex: 로그인, 게시물 작성)Listener: 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리Configuration: Sampler or Listener가 사용할 설정 값 (ex: 쿠키, JDBC 커넥션)Assertion: 응답 확인 방법 (응답 코드, 본문 내용)JMeter 설정 방법1. Thread Group (사용자, 스레드 설정)Thread Proper..

Spring Framework/JPA

[JPA] Spring 엔티티 컬럼 기본값 설정하기 - @DynamicInsert, @ColumnDefault, @Builder.Default

JPA 기본전략을 이해하고 데이터베이스 Default 값 설정 및 데이터 저장 시 설정한 기본값으로 저장하는 방법에 대해 정리하고자 합니다.!!문제 상황Spring Data JPA 라이브러리 ORM을 통해 데이터베이스 기본값을 설정하는데 올바르게 설정되지 않는 문제가 있었습니다. 기존 코드@Entity@Getter@Builder(toBuilder = true)@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)@Table(name = "application_tb")public class Application extends BaseTimeEntity { @Id @GeneratedValue(strategy = Generatio..

kylo
오늘도 열심히 - BE