Category language

jOOQ DSL 커스터마이징

jOOQ를 프로젝트에 도입한 후, DSL 생성 방식을 커스터마이징하면 더욱 효율적으로 사용할 수 있다. jOOQ DSL 커스터마이징 3가지 방법 DSL Generate Strategy Generate 옵션 jOOQ Runtime Configuration Generate Strategy – 클래스 이름 커스터마이징 QueryDSL의 Q prefix처럼, jOOQ에서도 j prefix를 사용하여 자동…

EKS – Kubernetes Secret과 Spring Deployment

Kubernetes Secret 관리 Secret은 민감한 정보 (데이터베이스 암호, API 키 등)를 코드와 분리하여 Kubernetes 자원으로 안전하게 저장하는 메커니즘이다 저장 → 주입 흐름 Secret 생성 실제 예시 Secret 조회 출력 예시 참고: Secret의 데이터는 Base64로 인코딩 되어 있다(암호화가 아니다). Base64 디코더로…

EKS – Spring 프로젝트 ECR 업로드

Spring 프로파일 설정 이해 프로파일 구조 Spring 프로젝트에는 환경별로 다른 설정을 사용하기 위한 프로파일 시스템이 있다 프로파일 활성화 메커니즘 application.yml 이 설정을 prod로 변경하면 application-local.yml application-prod.yml 핵심: application.yml의 default 값과 각 프로파일 파일의 on-profile 값이 일치하면 해당 파일이 적용된다 Kubernetes…

EKS – Spring 백엔드 서버 배포 아키텍처

Spring 백엔드 서버 배포는 두 단계로 진행한다 MSA와 Kubernetes를 같이 사용하는 이유 MSA 아키텍처는 Kubernetes와 궁합이 매우 잘 맞는다 따라서 MSA 아키텍처를 사용하는 기업에서는 Kubernetes(특히 EKS)로 배포 환경을 구성하는 경우가 많다. MSA 서버 배포까지 경험해야 Kubernetes 배포를 제대로 이해했다고 할…

Kafka를 활용한 MSA 이벤트 기반 아키텍처 구축

Kafka를 활용하여 마이크로서비스 아키텍처(MSA) 기반의 회원 가입 및 이메일 발송 시스템을 구축하는 방법을 알아보자. Kafka의 메시지 브로커 역할을 통해 서비스 간 비동기 통신을 구현하며, 이벤트 기반 아키텍처의 핵심 개념을 실습한다 프로젝트 목표 시스템 아키텍처 전체 구조 서비스 구성 서비스 역할…

Kafka 고가용성 (High Availability) 구축

Apache Kafka(이하 Kafka)의 고가용성(High Availability)이란 시스템이 장애 상황에서도 중단 없이 정상적으로 서비스를 제공할 수 있는 능력을 의미한다 핵심 개념 이해 Kafka의 고가용성을 이해하기 위해서는 다음 다섯 가지 핵심 개념을 먼저 숙지해야 한다 노드 (Node) 노드란 Kafka가 설치되어 있는 실행되는 서버…

Kafka 파티션 이해

우리는 흔히 MSA(Microservices Architecture) 환경에서 비동기 메시징 처리를 위해 Kafka를 사용한다. 특히 이메일 발송과 같이 시간이 오래 걸리는 작업을 비동기로 처리할 때 Kafka는 매우 유용하다. 이를 활용하여 Spring Boot 기반의 컨슈머 애플리케이션에서 메시지 처리 성능을 극대화하는 방법에 대해 알아보자. 비효율적인…

Kafka 재시도 및 DLT

Spring Boot와 Kafka를 연동할 때 필수적으로 고려해야 할 메시지 처리 실패 시 재시도(Retry) 전략과 데드 레터 토픽(Dead Letter Topic, DLT) 활용 방안에 대해 심층적으로 알아보자. 이는 비동기 메시지 처리 시스템의 견고성과 안정성을 확보하는 데 매우 중요하다 메시지 처리 실패 상황…

Spring Boot와 Kafka 연동

Spring Boot 애플리케이션에서 Kafka를 사용하려면 의존성을 추가하고 설정 파일을 구성해야 한다 Spring Boot로 Kafka에 메시지 넣기 (Producer) application.yaml 설정 Kafka 서버 연결 및 Producer/Consumer의 직렬화/역직렬화 방식을 설정한다 application.yaml (Producer) 주의사항 Kafka 서버를 백그라운드로 실행하고 email.send 토픽을 미리 생성해 두어야 한다…

생산자 – 소비자 문제와 BlockingQueue

문제 정의 생산자 – 소비자 문제는 한정된 크기의 버퍼를 통해 데이터를 주고 받는 멀티스레드 환경에서 발생하는 동시성 문제이다 핵심 문제 해결 방안의 진화 단순 synchronized (문제 발생) sleep()으로 대기 (더 심각한 문제) wait/nofity 사용 (비효율 존재) Lock + Condition으로 개선…