Backend

Kafka를 학습할 때 가장 먼저 마주하는 개념들이 있다.Topic, Partition, Offset, 그리고 Broker.도대체 이 단어들이 서로 어떤 관계를 맺고 있고,실제 메시지가 어떤 과정을 거쳐 Kafka에 저장되고,소비자(Consumer)가 어떻게 그 메시지를 읽어가는지 흐름이 잘 보이지 않을 때가 많다. Kafka는 단순한 큐 시스템이 아니다.대용량 메시지를 분산 환경에서 안전하게 저장하고, 빠르게 전송하며, 다양한 방식으로 소비할 수 있도록 설계된 데이터 스트리밍 플랫폼이다.이 글에서는 Kafka의 핵심 구조를 하나씩 뜯어보며, 기능과 동작 원리, 그리고 실제 운영 시 고려해야 할 포인트들까지 정리해보려 한다. Kafka 메시지 전달의 흐름 Kafka를 처음 접할 때 가장 먼저 이해해야 할..
"Kafka는 메시지를 큐처럼 처리하는 시스템""Pub/Sub 기반의 고성능 스트리밍 플랫폼""실시간 데이터 파이프라인 구축에 꼭 필요하다" Kafka를 처음 접하면 다양한 정의와 설명이 쏟아진다.하지만 개념이 워낙 방대하고 공부하다 보면 용어도 생소할 수 있기에 처음엔 "이게 도대체 무슨 소리지?" 하는 생각이 먼저 든다. 요즘 백엔드 개발자 신입 수준에서 우대 사항 스펙이며, MSA라는 키워드와 함께 주목받았던 Kafka다.전부터 관심있던 기술인 Kafka를 팀프로젝트에 도입해보며 공부했던 개념들을 글을 통해 시리즈로 정리해보려고 한다. 왜 Kafka가 필요하게 되었는지, 어떤 문제를 해결하려는 건지,그 맥락을 먼저 잡아두면 이후 개념들이 훨씬 잘 정리된다.이 글은 그 시작점에서 Kafka의 배경과 ..
1. 순환 참조란?JPA에서 엔티티 간 양방향 연관 관계를 설정하면 서로가 서로를 참조하는 구조가 만들어질 수 있다.이 자체는 잘못된 것은 아니지만, 직렬화(예: JSON 변환)나 무한 출력, 디버깅 시 순환 참조 예외로 이어질 수 있다.예를 들어 @OneToMany, @ManyToOne 구조를 모두 선언하면 순환이 생길 수 있다. 2. 디지몬을 예시로 살펴보자.디지몬 파트너 구조를 생각해보자.Tamer(테이머)는 여러 마리의 Digimon(디지몬)을 가질 수 있고,각 Digimon은 자신이 속한 Tamer를 알고 있다. 이 구조는 다음과 같이 모델링할 수 있다.@Entitypublic class Tamer { @Id @GeneratedValue private Long id; privat..
사실 거창하게(?) 적었지만 디지몬은 큰 의미없다.디지몬을 모르는 사람은 오히려 혼란스러울 수 있다.1. N + 1 문제란?N + 1 문제는 JPA에서 연관된 엔티티를 조회할 때, 불필요하게 많은 SQL 쿼리가 발생하는 현상을 말한다. 예를 들어, 1개의 쿼리로 N개의 엔티티를 가져온 다음,각각의 엔티티에 대해 추가로 또 다른 쿼리를 1개씩 실행한다면?→ 총 N + 1개의 쿼리가 실행된다. 이 현상은 대부분 JPA의 연관 관계 + 지연 로딩(LAZY) 설정이 맞물릴 때 발생하며,성능 병목의 대표적인 원인 중 하나다. 1.1 지연 로딩(LAZY)과 즉시 로딩(EAGER)JPA는 연관관계를 설정할 때 fetch 속성을 통해 해당 연관 객체를 언제 로딩할 것인지를 정의할 수 있다.@ManyToOne(fetch..
0. 들어가며교육 중 총괄님의 코드리뷰를 받던 중 헥사고날 아키텍처에 대한 언급이 있었다. 간단한 예제를 통해 구조를 보여주시고 설명해주셨는데 찾아보니, 최근 도메인 중심 아키텍처 설계에서 점점 많이 언급되고 있는 아키텍처라고 한다. 전통적인 계층형 아키텍처 (Layered Architecture)와 비교하면서 구조적 차이, 장단점, 그리고 왜 헥사고날 아키텍처가 점점 주목받고있는지 알아보고 정리해보았다. 1. 기존의 계층형 아키텍처는 어떤 모습인가?우리가 흔히 사용해왔던 구조는 다음과 같다.Presentation Layer (Controller) ↓Business Layer (Service) ↓Persistence Layer (Repository) 이런 아키텍처는 구현이 단..
· Backend/Java
0. 들어가며객체지향 프로그래밍을 하다 보면 반드시 마주치는 개념이 바로 오버라이딩(Overriding)과 오버로딩(Overloading)이다.두 개념은 이름은 비슷하지만, 의미도 다르고 쓰임새도 완전히 다르다.이번 글에서는 그 차이를 기술적인 관점에서 명확하게 정리해보자. 1. 오버라이딩 (Overriding)오버라이딩은 "상속 관계에서 부모 클래스의 메서드를 재정의하는 것"이다.즉, 자식 클래스가 부모로부터 상속받은 메서드를 동일한 시그니처로 다시 구현하여 동작을 바꾸는 것이다. 조건 메서드 이름, 매개변수, 리턴 타입 모두 동일해야 함접근 제어자는 더 좁게 만들 수 없음 (확장 가능은 함)상속 관계가 있어야 함@Override 애노테이션을 붙이는 것이 권장됨 (컴파일 타임 확인 가능)// 예시cla..
chillmyh
'Backend' 카테고리의 글 목록