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

Lombok은 자바(Java) 개발에서 반복되는 코드를 자동으로 생성해주는 매우 유용한 라이브러리입니다. 주로 자바 모델 클래스(POJO)에서 자주 쓰이는 Getter, Setter, toString(), Equals와 같은 메서드들을 어노테이션으로 간단하게 처리할 수 있어 코드의 가독성과 생산성을 크게 높여줍니다. Lombok은 코드의 중복을 줄이고 유지보수를 쉽게 만들어주는 라이브러리로, 특히 엔터프라이즈급 애플리케이션을 개발할 때 많은 이점을 제공합니다. 이번 포스팅에서는 Lombok에서 자주 사용되는 어노테이션을 정리해보겠습니다. @Getter / @Setter@Getter: 클래스의 모든 필드에 대해 getter 메서드를 자동으로 생성합니다.@Setter: 클래스의 모든 필드에 대해 setter..

static 변수와 인스턴스 변수 중 어떤 방식이 적합한지 선택하는 것은 메모리 최적화에 중요한 요소입니다. 이번 글에서는 힙 메모리 관리를 중심으로, static 변수를 사용하는 것이 언제 유리한지, 그리고 인스턴스 변수를 사용할 때의 장단점에 대해 알아보겠습니다. static 필드와 메모리 관리static 필드는 클래스 레벨에서 메모리에 올라가며, 객체의 인스턴스와 상관없이 전역적으로 접근 가능합니다. 이 필드들은 메소드 영역(Metaspace)에 저장됩니다. 메소드 영역은 클래스의 메타데이터, 정적 필드(static fields), 상수(Constant Pool) 등을 저장하는 공간으로, JVM이 클래스를 로드할 때 한 번 할당되며 프로그램이 종료될 때까지 메모리에 유지됩니다.static 필드의 특..

Spring Boot에서 애플리케이션 설정 파일(application.yml 또는 application.properties)의 값을 주입받기 위해 우리는 흔히 @Value 어노테이션을 사용합니다. 그러나 주입받은 값을 static 변수로 사용하려고 할 때는 몇 가지 제한 사항이 있습니다. 이번 포스팅에서는 @Value로 주입된 값을 static 변수에 저장하고 전역적으로 사용하는 방법을 알아보겠습니다.문제 상황: @Value와 static 변수의 사용Spring에서는 @Value 어노테이션을 통해 yml 또는 properties 파일의 값을 필드에 주입할 수 있습니다. 하지만 이 어노테이션은 인스턴스 필드에만 사용할 수 있으며, static 필드에는 직접 주입할 수 없습니다. @Component publ..

자주 쓰는데 쓸때마다 까먹어서...병합만하고 push 전이라면git merge --abortmerge를 취소하고 이미 push된 merge라면 위 명령어로 머지되기 전으로 돌아가서 git reset --merge HEAD~1강제 push git push -f

API Gateway는 마이크로서비스 아키텍처에서 중요한 역할을 하는 컴포넌트로, 클라이언트와 마이크로서비스 사이에서 효율적인 요청 및 응답을 관리해주는 중앙 통제점입니다. 이 글에서는 API Gateway가 무엇인지, 그 역할과 마이크로서비스 아키텍처에서의 활용 방안, 그리고 이를 사용할 때의 장단점을 다루어 보겠습니다. API Gateway란? API Gateway는 클라이언트와 다양한 마이크로서비스 간의 상호작용을 중앙에서 관리하는 시스템입니다. 마이크로서비스 아키텍처에서 여러 서비스가 존재할 때, 클라이언트는 각 서비스에 직접 요청을 보내는 대신 API Gateway를 통해 모든 요청을 처리합니다. API Gateway는 요청을 수신하고, 적절한 서비스로 전달하며, 결과를 클라이언트에 반환합니다...

이 글에서는 MySQL에서 인덱스를 생성, 삭제, 조회하는 방법과 인덱스를 관리할 때 주의해야 할 사항에 대해 알아보겠습니다. 인덱스란 무엇인가?인덱스는 테이블의 데이터를 보다 빠르게 검색할 수 있도록 도와주는 자료 구조입니다. 인덱스를 추가하면, MySQL은 데이터를 조회할 때 전체 테이블을 스캔하는 대신 인덱스를 먼저 참조하여 효율적으로 데이터를 찾습니다. 마치 책의 마지막에 있는 색인(index)과 비슷한 개념입니다.하지만, 인덱스는 검색 성능을 크게 향상시키지만, 항상 긍정적인 영향만 미치는 것은 아닙니다. 인덱스를 너무 많이 추가하면 삽입(insert), 업데이트(update), 삭제(delete) 성능에 영향을 미칠 수 있으며, 인덱스를 관리하는 데 추가적인 스토리지도 필요합니다. 인덱스 생..

그냥 기억에 남은 하루라 포스팅해본다. 어제 오후 1시쯤, 회사를 나서려고 엘리베이터를 타고 내려가던 중이었어요. 21층에 도착하니 사람들이 줄을 길게 서 있더군요. ‘뭔가 이벤트라도 있나?’ 싶어서 궁금했죠. 이전에 연예인 이장우가 회사에 와서 사람들이 몰렸던 일이 떠오르면서, 이번에도 혹시 연예인이 왔나 하고 지나쳤어요. 잠시 후, 팀 단체 톡방에 팀장님의 메시지가 올라왔어요. “회사가 매출 증대에 따른 격려 차원에서 각 팀마다 간식을 준비했다. 각 팀은 간식을 받아가라”는 내용이었죠. 그제서야 21층에 사람들이 줄을 서 있던 이유를 알았어요. 간식을 받으려고 기다리고 있었던 거였더라고요. 우리 팀도 한 분이 나가서 받아오셨고, 모두 함께 간식을 나눠 먹었답니다. 조선델리 더 부티크 오... 비싸보이..

샤드키 _id기준 hash로 샤드 인덱스 생성 db.컬렉션명.createIndex({"_id": "hashed"})sh.shardCollection("db명.컬렉션명", {"_id": "hashed"}) 여러개 컬렉션 적용 (몽고 쉘에서 실행) //적용할 컬렉션var collections = ['gmktLogisItemRegIf', 'wmsAcntrLogisItemHist', 'payEvtHist', 'gnrlItemMapping', 'logisItemHist','logisGnrlItemMpngHist','itemGthrReqInfoIf','itemExceptionLog','lnkgLogisItemHist','urcyWhoutStopIf','lnkgItemHist']; for (var i = 0; i..

MongoDB 셸 사용하기: MongoDB 셸에 접속한 후, 특정 컬렉션의 인덱스를 확인하려면 다음 명령어를 입력합니다:db.컬렉션명.getIndexes()예를 들어, users 컬렉션의 인덱스를 확인하려면:db.users.getIndexes() MongoDB Compass 사용하기: MongoDB Compass를 사용하면 GUI를 통해 인덱스를 쉽게 확인할 수 있습니다. 해당 컬렉션을 선택한 후, "Indexes" 탭을 클릭하면 현재 설정된 인덱스를 볼 수 있습니다.명령어를 통해 인덱스 확인하기: db.runCommand()를 사용하여 인덱스를 확인할 수도 있습니다. 예를 들어:db.runCommand({ listIndexes: "컬렉션명" })

명령어에 대한 설명을 좀 더 구체적으로 추가하여 Git 필수 명령어에 대한 포스트를 작성하겠습니다. 각 명령어에 대한 자세한 설명과 사용 사례를 포함하겠습니다.Git 필수 명령어: Git으로 프로젝트 관리하기Git은 소스 코드 관리 도구로, 여러 사람이 동시에 작업할 수 있는 협업 환경을 제공합니다. 이 포스트에서는 Git의 기본 명령어를 심층적으로 설명하고, 각 명령어의 사용법과 실습 예제를 통해 Git을 효과적으로 사용하는 방법을 소개하겠습니다.Git 설치하기Git을 사용하기 위해 먼저 설치해야 합니다. 각 운영 체제별로 Git 설치 방법은 다음과 같습니다:Windows: Git for Windows에서 설치 파일을 다운로드하여 설치합니다.macOS: Homebrew가 설치되어 있다면, 터미널에서 다..

스프링 프레임워크는 객체 지향 프로그래밍에서 핵심적인 디자인 패턴인 의존성 주입(DI, Dependency Injection)을 지원합니다.DI는 객체 간의 의존 관계를 개발자가 아닌 프레임워크가 자동으로 주입해주는 방식으로, 코드의 결합도를 낮추고, 유연성과 테스트 용이성을 높여줍니다.이번 글에서는 서비스 계층(Service Layer)을 DI를 활용해 설계하는 방법과, DI의 주요 방식인 @Autowired 필드 주입과 생성자 주입의 차이점을 알아보겠습니다. 의존성 주입 DI(Dependency Injection)란?의존성 주입(Dependency Injection)은 클래스가 다른 클래스에 의존할 때, 직접 생성하지 않고 외부에서 필요한 객체를 주입받는 방식입니다.이를 통해 객체 간의 결합도를 낮추..