
믿을 수 있는 서비스 만들기 (1) - Outbox Design
여러 Batch Task를 순차적으로 실행해야 할 때, Redis Pub/Sub이든 Kafka 토픽이든 “이벤트를 발행하고 → 리스너가 다음 Task를 호출한다”는 구조를 쉽게 떠올릴 수 있다. 그러나 바로 여기서 문제가 생긴다. Task 수행 중 오류가 발생하면, 후속 Task가 정상적으로 호출되지 않는다. Task는 성공했지만 이벤트 발행...

여러 Batch Task를 순차적으로 실행해야 할 때, Redis Pub/Sub이든 Kafka 토픽이든 “이벤트를 발행하고 → 리스너가 다음 Task를 호출한다”는 구조를 쉽게 떠올릴 수 있다. 그러나 바로 여기서 문제가 생긴다. Task 수행 중 오류가 발생하면, 후속 Task가 정상적으로 호출되지 않는다. Task는 성공했지만 이벤트 발행...

4. Connection 관리 HTTP의 지연은 주로 기저에 있는 TCP의 지연 때문이다. HTTP 트랜잭션 자체는 매우 짧은 시간에 처리되며, 실제로는 TCP 커넥션 설정 및 데이터 전송 과정에서의 지연이 전체 성능 저하의 주 원인이 된다. HTTP 지연의 핵심적인 TCP 지연 원인을 다음과 같이 정리할 수 있다. 1. TCP 커넥션 TCP는...
Spring Data JDBC에서 복합키(Composite Key) 사용하기 (1) Spring Data JDBC는 JPA에 비해 단순한 구조와 직관적인 매핑 방식 덕분에 많은 개발자들이 선호하지만, 복합키(Composite Primary Key)를 사용하려는 순간부터 생각보다 많은 제약을 만나게 된다. 이번 글에서는 Spring Data JDBC ...
Spring Batch - ClassifierCompositeItemWriter 배치 작업을 하다 보면, 하나의 데이터 소스에서 특정 기준에 따라 다른 처리가 필요한 경우가 있다. 예를 들어, 쿼리 결과를 분기해서 서로 다른 DB 작업이나 API 호출 등으로 나누어야 할 경우, ClassifierCompositeItemWriter를 사용하면 효율적으...
중첩 클래스(Nested Class)는 한 클래스 내부에서 정의된 클래스이다. 중첩 클래스를 정적으로 선언하냐에 따라 그 성질이 다르다. 1. Java의 중첩 클래스 public class OuterClass { int outerValue; class NestedClass { int nestedValue; public Ne...

3. HTTP Message 1. 메세지의 흐름 HTTP 메세지는 HTTP 어플리케이션 간에 주고받은 데이터 블록들이다. 이 데이터 블록들은 메세지 내용과 의미를 설명하는 텍스트 메타 정보로 시작하고, 그 뒤에 선택적으로 데이터가 올 수 있다. 이 메세지는 클라이언트, 서버, 프록시, 게이트웨이 사이에서 움직인다. 3.1 인바운드와 아웃바운드 ...

URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리키며, URL을 이용해 사람과 어플리케이션이 인터넷 상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다. 2. URL and Resource 1. 인터넷의 리소스 탐색하기 URL(Uniform Resource Locator)는 URI의 부분집합이다. URI는 URL, URN 등을 ...

전세계의 웹브라우저, 서버, 웹 애플리케이션은 모두 Http를 통해 대화한다. Http는 현대 인터넷의 공용어이다. 1. Http: 인터넷의 멀티미디어 배달부 Http는 신뢰성 있는 데이터 전송 프로토콜을 사요아기 때문에, 데이터가 지구 반대편에서 오더라도 전송 중 손상되거나 (순서가) 꼬이지 않음을 보장한다. 개발자는 인터넷의 결합이나 약점에 대...