N° 01 — 목록
'config' (3)
-
Backend Development/Spring BootSpringBoot - 09. config profile
개발 환경에서는 H2, 운영에서는 PostgreSQL — 외부 설정과 프로파일 관리같은 JAR을 개발과 운영에 그대로 배포해야 한다. 개발에서는 H2 인메모리 DB를, 운영에서는 PostgreSQL을 써야 한다. 코드를 고치지 않고 — 설정만 바꿔서. Spring Boot의 외부 설정(externalized configuration)과 프로파일(profile)이 이것을 가능하게 한다.이 글은 프로퍼티 소스 계층, @ConfigurationProperties, 멀티 프로파일, 환경 변수 매핑, 그리고 비밀 관리(secrets management) 패턴을 풀어간다. (Spring Boot Reference - External Configuration)프로퍼티 소스 계층 — 17개의 우선순위Spring Boo..
-
Data & Platform/Event StreamingKafka - 04. consumer
consumer — 읽었다고 끝이 아니다, commit이 끝이다consumer가 poll()을 호출해 batch를 받아왔다. 처리를 시작했다. 그런데 처리 도중 프로세스가 크래시 났다 — auto-commit이 켜져 있었다면, 방금 받은 batch는 이미 "읽었다"고 표시돼 있어서, 재시작해도 그 batch는 다시 오지 않는다. 메시지가 조용히 사라진다. Kafka consumer 설계에서 가장 흔하게 만나는 유실 지점이다.이 함정의 뿌리는 "읽기 = 소비 완료"라는 착각이다. Kafka에선 읽기(poll)와 소비 완료(commit)가 분리돼 있고, 그 사이에 애플리케이션 처리가 끼어든다. auto-commit은 이 둘을 "읽자마자 commit"으로 합쳐버려 처리 실패 시 유실을 만든다. 신뢰성이 필요하..
-
Data & Platform/Event StreamingKafka - 03. producer
producer — send가 반환됐다고 도달한 게 아니다주문 API가 producer.send(orderEvent)를 호출했다. 메서드는 즉시 반환됐다. 그런데 이 순간 메시지는 broker에 도달한 게 아니다 — accumulator라는 배치 버퍼에 쌓여 있을 뿐이고, 배경 스레드가 나중에 보낸다. "send가 반환됐으니 안전하겠지"라고 가정하면, 장애 순간에 accumulator에 남아 있던 메시지들이 전부 날아간다. 이게 producer를 다룰 때 가장 먼저 부딪히는 함정이다.producer는 애플리케이션에 내장되는 클라이언트다. 별도 서버가 아니라 주문 API·배치 잡·로그 수집기 같은 앱 프로세스 안에서 동작한다. 비동기 send, batch, acks, idempotent producer가 ..