개발은 재밌어야 한다
반응형
article thumbnail
오라클에서 두 쿼리의 결과 비교하기
RDBMS 2024. 11. 12. 12:27

데이터베이스 개발 및 운영 중 두 쿼리의 결과가 동일한지 또는 차이가 나는지 확인해야 하는 경우가 자주 발생합니다.예를 들어:코드 최적화: 비슷한 쿼리지만, 더 효율적인 방법을 찾고자 할 때데이터 정합성 확인: 서로 다른 시스템에서 수집된 데이터의 일관성을 검토하고자 할 때이러한 상황에서 오라클에서 쿼리 비교를 할 수 있는 다양한 방법을 살펴보겠습니다. 오라클에서 두 쿼리 비교 방법오라클에서는 두 쿼리의 결과를 비교하기 위한 몇 가지 방법이 있습니다. 각각의 방법을 예제를 통해 자세히 알아보겠습니다.1) MINUS 연산자MINUS 연산자는 두 개의 SELECT 쿼리 결과에서 차이 나는 행만을 반환합니다.쿼리 A MINUS 쿼리 B는 쿼리 A에는 있지만 쿼리 B에는 없는 데이터를 보여줍니다.반대로, 쿼리 ..

article thumbnail
스프링에서 Bean 등록 및 관리: 어노테이션을 통한 의존성 주입
Spring/Spring 2024. 11. 11. 01:47

스프링 프레임워크에서는 객체를 관리하고, 필요한 곳에 자동으로 주입하는 의존성 주입(Dependency Injection, DI) 을 통해 의존성을 주입할 수 있습니다. 이 글에서는 스프링에서 @Configuration, @Bean, @Component, @Service, @Repository와 같은 어노테이션을 활용하여 Bean을 등록하고 관리하는 방법에 대해 설명하겠습니다.스프링에서 Bean이란?스프링에서 Bean은 스프링 컨테이너가 관리하는 객체를 의미합니다. 이러한 Bean은 스프링의 DI(Dependency Injection)를 통해 의존 관계를 해결하고, 객체 간의 연결을 관리합니다. 스프링에서 Bean 등록 방법@Configuration@Configuration 어노테이션은 스프링 프레임워크..

article thumbnail
MongoDB 쿼리 사용법 가이드 (by MongoTemplate)
NoSQL/MongoDB 2024. 11. 10. 17:27

MongoDB는 JSON 형식의 데이터를 손쉽게 다룰 수 있는 NoSQL 데이터베이스로, CRUD 작업 및 고급 쿼리 기능을 제공합니다. 이번 글에서는 MongoDB의 데이터 삽입, 조회, 수정, 삭제 같은 기본 쿼리부터 조건 필터링, 정렬, 집계 쿼리까지 다양한 예제를 통해 MongoDB 쿼리 사용법을 알아보겠습니다. 기본 설정 및 컬렉션 접근데이터 조회와 조작에 앞서, 먼저 MongoDB와 연결을 설정하고 컬렉션을 선택하는 예제입니다.import com.mongodb.client.MongoClient;import com.mongodb.client.MongoClients;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoD..

article thumbnail
자바의 HashMap vs ConcurrentHashMap: 차이점과 활용법
JAVA 2024. 11. 3. 23:46

자바에서 데이터를 key-value 형식으로 저장할 때 가장 널리 쓰이는 컬렉션으로 HashMap과 ConcurrentHashMap이 있습니다. 두 클래스 모두 Map 인터페이스를 구현하지만, 내부 동작 방식과 동시성 처리 면에서 큰 차이가 있습니다. 이 글에서는 HashMap과 ConcurrentHashMap의 구조와 특징을 비교하고, 각 컬렉션을 상황에 맞게 선택할 수 있도록 설명하겠습니다.기본 개념: HashMap과 ConcurrentHashMapHashMap: 자바에서 비동기적인 key-value 구조로 데이터를 저장하는 기본 컬렉션입니다. 단일 쓰레드 환경에서 빠르고 효율적으로 동작하지만, 멀티 쓰레드 환경에서는 안전하지 않습니다. 두 개 이상의 쓰레드가 동시에 접근하여 수정할 경우 데이터 손상..

article thumbnail
Java record: 불변 객체의 간결한 정의와 활용
JAVA 2024. 10. 23. 19:24

Java record: 불변 객체의 간결한 정의와 활용Java 14부터 도입된 record는 데이터를 간단하게 표현하고 불변성을 쉽게 유지할 수 있는 강력한 도구입니다. record는 데이터 클래스를 간결하게 작성하는 데 유용하며, 데이터를 안전하게 다루면서도 코드의 가독성을 높여 줍니다. 이 글에서는 Java record가 무엇인지, 어떻게 사용하는지, 그리고 JavaScript의 Object.freeze()와의 간단한 비교를 통해 불변 객체를 다루는 두 가지 방법을 알아보겠습니다.Java record란?Java의 record는 데이터를 저장하기 위한 간단한 클래스입니다. 기존의 자바 클래스를 만들 때는 getter, toString(), equals(), hashCode() 메서드를 수동으로 작성해야..

article thumbnail
Java 접근 제어자 종류와 이해
JAVA 2024. 10. 22. 09:45

Java 접근 제어자 이해하기Java에서 접근 제어자(Access Modifier)는 클래스, 메서드, 필드의 접근 수준을 결정하는 중요한 요소입니다. 이 제어자들은 객체 지향 프로그래밍에서 정보 은닉(Encapsulation)을 구현하는데 핵심적인 역할을 하며, 코드의 가독성과 유지보수성을 높이는 데 기여합니다. 이번 글에서는 public, private, protected, 그리고 default 네 가지 접근 제어자의 개념과 사용법을 예시를 통해 알아보겠습니다.public: 어디서나 접근 가능public은 가장 개방적인 접근 제어자로, 클래스나 메서드, 필드가 모든 패키지나 클래스에서 접근 가능합니다. 예를 들어, 다른 패키지에 있는 클래스에서도 자유롭게 접근할 수 있습니다.public class M..

article thumbnail
Java Stream API 사용법
JAVA 2024. 10. 21. 20:31

Java Stream API 사용법Stream API는 Java 8에서 도입된 매우 유용한 기능으로, 데이터를 효율적이고 간결하게 처리할 수 있는 방법을 제공합니다. 이 글에서는 Stream API의 기본 개념부터 다양한 활용 방법까지 살펴보며, 실용적인 예시와 함께 Stream API가 왜 중요한지 알아보겠습니다.Stream API란 무엇인가?Stream은 데이터를 처리하기 위한 흐름을 나타냅니다. Java의 Stream API는 컬렉션(Collection), 배열(Array) 또는 I/O 자원을 일관된 방식으로 처리하는 기능을 제공합니다. 이로 인해 반복적인 데이터 처리가 단순화되고, 코드의 가독성이 향상됩니다.Stream API의 주요 특징은 다음과 같습니다:• 함수형 프로그래밍 스타일: 람다 표현..

article thumbnail
Kafka에서 동시에 같은 메시지 처리 시 발생한 PK 중복 오류(feat. merge로 인한 장애대응)
Kafka 2024. 10. 18. 19:15

어제 운영 환경에서 40만 건의 데이터를 다른 영역에서 마이그레이션한다고 전달받았습니다. 이 데이터가 변경되면, 제가 담당하는 영역의 동일한 테이블을 동기화하기 위해 Kafka 메시지를 통해 테이블 변경 내역을 수신받아, MERGE INTO를 사용해 데이터를 최신화하는 작업을 수행하고 있었습니다. 그런데 발행하는 쪽에서 문제가 생겨 동일한 내용의 메세지인데 변경처리를 동시에 처리하고 발행해서 수정일시 필드값만 1초차이가 나게 바뀌어서 메세지를 받아 처리하는 consumer 쪽에서 메세지를 동시에 처리하게 되면서 DB에서 PK 중복 오류가 발생을 하였습니다.다행히 건수가 많지 않았고 수정일시 필드의 값만 다르기도 했고 해당 에러가 났다는것은 이미 해당 데이터를 생성하고 동시에 처리하는 과정이기 때문에 동시..

article thumbnail
Java Enum 사용법과 활용 예시
JAVA 2024. 10. 18. 04:37

Enum이란?Java에서 Enum(열거형)은 서로 관련 있는 상수 집합을 정의하기 위해 사용되는 특별한 데이터 타입입니다. Enum은 주로 한정된 값의 집합을 표현할 때 유용하며, 이러한 값을 더 안전하고 읽기 쉽게 관리할 수 있습니다.기본 정의 예시public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}이 예에서 Day는 요일을 나타내는 Enum으로, SUNDAY, MONDAY 등의 값이 포함되어 있습니다.Enum의 특징타입 안전성: Enum은 각 항목이 명시된 타입으로만 사용되기 때문에 잘못된 값이 사용될 가능성이 낮습니다.싱글톤: Enum 상수는 기본적으로 싱글톤이기 때문에 각 상수는 유일하며 인스턴스가 ..

article thumbnail
Java에서의 CORS 설정하기
JAVA 2024. 10. 18. 04:13

CORS란 무엇인가?CORS(Cross-Origin Resource Sharing)는 웹 브라우저가 한 출처의 웹 애플리케이션이 다른 출처의 리소스에 접근할 수 있도록 허용하는 메커니즘입니다. 기본적으로 웹 브라우저는 보안을 위해 동일 출처 정책(Same-Origin Policy)을 따릅니다. 이 정책에 따르면, 다른 출처의 리소스에 대한 접근이 제한됩니다. CORS는 이러한 제한을 완화하여, 서버에서 특정 출처의 요청을 허용할 수 있도록 합니다.CORS는 마치 우리 부모님처럼, 다른 집에 들어가는 걸 엄격히 지키지만, 간혹 마음에 드는 친구가 오면 문을 열어주곤 하죠.동일 출처 정책(Same-Origin Policy)동일 출처 정책은 웹 보안의 기본 원칙으로, 스크립트가 다른 출처에서 실행되는 문서의 ..

article thumbnail
Java에서 단일 String을 List으로 변환하는 방법
JAVA 2024. 10. 17. 20:37

String 타입의 단일 값을 List으로 변환해야 하는 상황이 발생합니다. 이때 여러 가지 방법을 사용할 수 있으며, 각각의 방법은 상황에 맞게 효율적으로 적용될 수 있습니다. 이번 포스팅에서는 Java에서 단일 String 값을 List으로 변환하는 3가지 방법을 소개하겠습니다.Arrays.asList() 사용Arrays.asList()는 Java에서 가장 많이 사용되는 방법 중 하나입니다. 이 메소드는 전달된 값을 기반으로 고정된 크기의 리스트를 생성합니다. 만약 여러 개의 String을 리스트로 변환하고 싶다면 이 방법을 매우 유용하게 사용할 수 있습니다.String singleString = "example";List itemList = Arrays.asList(singleString);위 코드..

article thumbnail
스프링 부트에서 Kafka 로그 관리하기: 불필요한 로그 숨기고 중요한 로그만 남기는 방법(feat. AppInfoParser)
Kafka 2024. 10. 17. 13:29

개요Apache Kafka를 스프링 부트 애플리케이션에서 사용할 때, 클라이언트 초기화나 Kafka 서버와의 통신 과정에서 많은 정보성 로그가 출력됩니다. 예를 들어, Kafka 버전 정보나 시작 시각 같은 로그가 대표적입니다. 이런 로그가 많아지면 실제로 중요한 로그를 찾기 어려워질 수 있습니다.이 글에서는 Kafka의 불필요한 로그를 숨기고 중요한 로그만 남기기 위한 방법을 알아보겠습니다. 이를 위해 로그 레벨의 우선순위를 이해하고, 설정을 통해 로그 출력을 효율적으로 관리하는 방법을 설명합니다.AppInfoParser가 많이 나와 해당 부분에 대한 처리를 진행하려고 설정 파일을 수정해보았습니다. AppInfoParser의 INFO 로그Kafka는 애플리케이션이 실행될 때 클라이언트 초기화 과정에서 ..

반응형