본문 바로가기

반응형

프로그래밍

(112)
자바 언어의 변수에 대해 알아보자 안녕하세요! 이번에는 자바 언어에서 가장 기본적인 개념 중 하나인 변수에 대해 알아보겠습니다. 변수는 프로그래밍에서 매우 중요한 개념으로, 데이터를 저장하고 조작하는 데 사용됩니다. 자바에서 변수는 다양한 타입과 범위를 가지며, 유연한 프로그래밍을 위해 필수적입니다. 변수의 개념과 선언 변수는 값을 저장하기 위해 사용되는 메모리 공간을 의미합니다. 이 메모리 공간은 프로그램의 실행 도중에 값이 변경될 수 있습니다. 자바에서 변수를 사용하기 전에 먼저 변수를 선언해야 합니다. 변수 선언은 다음과 같은 형식을 가집니다: 타입 변수이름; 예를 들어, 정수형 변수를 선언하려면 다음과 같이 작성합니다: int myNumber; 변수의 초기화와 할당 변수를 선언한 후에는 해당 변수에 값을 할당하여 사용할 수 있습니..
Java의 특성 탐색: 다재다능하고 신뢰할 수 있는 언어 다재다능하고 널리 채택된 프로그래밍 언어인 Java는 고유한 특성으로 전 세계 개발자의 마음을 사로잡았습니다. 플랫폼 독립성에서 견고성 및 풍부한 표준 라이브러리에 이르기까지 Java는 광범위한 응용 프로그램을 위한 선택 언어로 자리 잡았습니다. 이 블로그에서는 소프트웨어 개발 세계에서 Java를 돋보이게 만드는 특성에 대해 자세히 설명합니다. 플랫폼 독립성 Java의 정의 기능 중 하나는 놀라운 플랫폼 독립성입니다. Java 프로그램은 JVM(Java Virtual Machine)이 설치된 모든 장치 또는 운영 체제에서 실행할 수 있는 바이트코드로 컴파일됩니다. 이 "한 번 작성하고 어디서나 실행" 기능을 사용하면 개발자가 특정 플랫폼의 제약에서 벗어나 다양한 시스템에서 원활하게 실행할 수 있는 응용 ..
Java의 역사를 통한 여정: Oak에서 세계 최고의 프로그래밍 언어까지 소개 종종 "한 번 작성하면 어디서든 실행할 수 있는" 프로그래밍 언어로 칭송받는 Java는 1990년대 중반에 시작된 이래로 기술 환경의 필수적인 부분이 되었습니다. 다재다능함, 보안 및 교차 플랫폼 호환성으로 유명한 Java는 수많은 응용 프로그램, 엔터프라이즈 시스템 및 임베디드 장치의 개발에서 중요한 역할을 해왔습니다. 이 블로그에서는 Java의 기원, 주요 이정표 및 소프트웨어 개발 세계에 대한 지속적인 영향을 탐구하면서 Java의 역사를 통해 매혹적인 여행을 할 것입니다. 자바의 탄생 Java의 역사는 James Gosling이 이끄는 Sun Microsystems의 개발자 팀이 "Green"이라는 프로젝트 작업을 시작한 1990년대 초에 시작됩니다. 목표는 소비자 전자 장치를 위한 플랫폼 독..
Spring-Kafka Consumer 실패 시 재처리 ( Reply - @SendTo ) 들어가기 전에 Consumer를 통해 카프카 클러스터에서 데이터를 Read할 때 모두 정상처리된다면 좋겠지만 그렇치 못한 경우도 있습니다. 그럴 경우 Spring-Kafka에서 재처리를 편리하게 할 수 있도록 Reply(@SendTo), Retry 기능을 제공합니다. 이번 글에서는 재처리 하는 방법에대해서 정리해보겠습니다. 목차 재처리를 해야하는 이유 ReplyTemplate 구성 @SendTo를 사용한 ReplyTemplate 구현 Reply 처리 플로우 1. 재처리를 해야하는 이유 Consumer를 이용해 카프카 클러스터에서 Read 한 후 Repository에 저장할 수도 있고 메일 발송을 할 수도 있고 다양하게 사용할 수 있습니다. 하지만 Repository 서버가 다운된다거나 메일 발송 중 메일..
Spring-Kafka Consumer Offset 관리 들어가기 전에 Consumer를 AutoCommit을 false로 설정하고 사용하고 있습니다. Consumer에서 로직을 완료하고 partition에 commit을 처리하도록 작성하였습니다. 그런데 로직을 처리하던 중 Exception이 발생했고 partition에 commit을 하지 못했습니다. 그렇다면 이 Consumer는 무한 루프에 빠져 데이터를 계속 읽고 Exception을 계속 발생시킬까요? 정답은 NO! 입니다. Consumer 내부에서 Partition Offset과는 별개로 Consumer만을 위한 Offset을 관리하고 있기 때문입니다. Consumer Polling 방식 Consumer는 KafkaMessageListenerContainer에서 새로운 Thread를 생성하여 while..
Spring-Kafka Consumer Validation 들어가기 전에 Consumer는 Kafka에 Topic, Partition의 Record를 읽어오는 역할을 합니다. 하지만 Kafka에 잘못된 데이터가 들어오는 경우 Consumer에서는 데이터를 Validation 처리하여 올바른 데이터만 처리해야합니다. 이번 글에서는 Spring-Kafka를 사용하는 Consumer에서 어떻게 Validation 처리를 하는지 작성해보겠습니다. 목차 Validation 방식 Validation 구성 Consumer Validation 구현 Validation 테스트 @KafkaListener ErrorHandler 결론 Validation 방식 Spring-Kafka는 Version 2.2 부터 @KafkaListener의 @Payload 인자값을 쉽게 Validat..
Spring-Kafka Lifecycle 목차 Lifecycle Lifecycle Management 주의사항 1. Lifecycle @KafkaListener는 Application Context 안에 Bean이 아닙니다. @KafkaListener는 KafkaListenerEndpointRegistry에서 Bean으로 등록이 됩니다. 등록된 Bean은 framework에 의해 자동으로 선언되고 Container의 Lifecycle을 관리합니다. KafkaListenerEndpointRegistry.java 메서드 중빨간 블럭처리 되어있는 코드에서 container를 등록합니다. 등록된 Bean은 설정값 autoStartup이 true인 것을 자동으로 시작합니다. Listener Container들은 SmartLifeCycle을 Implem..
[kafka] @KafkaListener를 이용한 Consumer 구현 목차 Consumer KafkaListener Annotation 설정 KafkaListener Annotation 사용방법 Simple POJO Listeners 파티션 할당 특정 파티션 InitialOffset 설정 수동 확인 ( Manual Acknowledgment ) Consumer Record Metadata Batch Listeners GroupId 1. Consumer 컨슈머는 카프카 클러스터( 파티션 )에서 저장된 데이터를 읽어오는 역할을 합니다. 구현 방법은 Message Listeners, @KafkaListener 두 가지로 가능합니다. 이번 글에서는 @KafkaListener 를 이용하여 구현한 내용을 정리해보겠습니다. 2. KafkaListener Annotation 설정 개인적..
[kafka] Concurrency 설정 기준 (ConcurrentMessageListenerContainer) 목차 토픽이 1개인 경우 파티션1, Concurrency1, Call3 파티션2, Concurrency2, Call3 파티션3, Concurrency6, Call6 결론 토픽이 3개인 경우 Concurrency 무조건 많다고 좋은게 아니다. 잘못된 생각 컨슈머에서 Concurrency가 무조건 많으면 많은 Message를 Concurrency 만큼 Listen할 수 있겠구나! 컨슈머에서 Concurrency, 즉 Thread가 할당되는 조건은 파티션 단위였습니다. 실제 테스트를 통해 컨슈머가 어떻게 처리하는 지 확인해보겠습니다. 동시성을 확인하기 위해 처리 로직에 Sleep을 길게 주었습니다. @Component class MemberConsumer: AcknowledgingMessageListener ..
[kafka] Concurrency 설정 기준 (ConcurrentMessageListenerContainer) 목차 토픽이 1개인 경우 파티션1, Concurrency1, Call3 파티션2, Concurrency2, Call3 파티션3, Concurrency6, Call6 결론 토픽이 3개인 경우 Concurrency 무조건 많다고 좋은게 아니다. 잘못된 생각 컨슈머에서 Concurrency가 무조건 많으면 많은 Message를 Concurrency 만큼 Listen할 수 있겠구나! 컨슈머에서 Concurrency, 즉 Thread가 할당되는 조건은 파티션 단위였습니다. 실제 테스트를 통해 컨슈머가 어떻게 처리하는 지 확인해보겠습니다. 동시성을 확인하기 위해 처리 로직에 Sleep을 길게 주었습니다. @Component class MemberConsumer: AcknowledgingMessageListener ..

반응형