전체 글
-
AI 에게 규칙을 적어 줬더니 안 지켰다: 함정대장에서 게이트까지카테고리 없음 2026. 10. 15. 18:14
AI 에게 규칙을 적어 줬더니 안 지켰다들어가며퇴근하고 혼자 만드는 신나게마을이라는 동네 데이터 사이트가 있습니다. 혼자라고 했지만 정확히는 둘이 만듭니다. 코드 대부분은 Claude Code(터미널에서 도는 AI 코딩 도구)가 쓰고, 저는 무엇을 만들지 정하고 결과를 확인합니다.AI 와 오래 일하면 반드시 이 말을 하게 됩니다."이거 하지 말라고 했잖아."Claude Code 는 프로젝트의 CLAUDE.md 를 대화마다 읽습니다. 저는 여기에 하지 말 것을 계속 적었고, 지금 736줄이 됐습니다. 그래도 같은 실수가 반복됐습니다. AI 가 규칙을 몰라서가 아니었습니다. 물어보면 다 압니다. 일에 몰입한 순간, 손에 익은 쪽으로 먼저 움직일 뿐입니다. 사람도 위키에 적힌 규칙보다 CI 가 막는 규칙을 더..
-
Spring Boot 가상 스레드와 HikariCP: 커넥션 대기 줄에 상한 두기 (Semaphore + DataSource)Spring 2026. 10. 15. 13:59
가상 스레드를 켜고 잃어버린 것: 스레드 풀이라는 방파제들어가며퇴근하고 혼자 운영하는 사이트가 하나 있습니다. 신나게마을이라는 동네 데이터 사이트입니다. 아파트 실거래가, 전월세, 미세먼지, 인구 같은 공공데이터를 동네 단위로 모아서 보여 주는 서비스입니다.거창한 인프라는 아닙니다. 집 한쪽에 둔 손바닥만 한 미니 PC(HP EliteDesk 800 G6 Mini) 한 대에 도커로 앱 두 개를 띄우고, 앞에는 Cloudflare 와 Traefik 을 두었습니다. DB 는 같은 서버의 PostgreSQL 입니다. 평소에는 초당 요청이 5건 안팎이라 서버가 거의 놀고 있습니다.그러던 9월 초 어느 날이었습니다. 지나가다 홈서버를 만져 봤는데 손을 대기 싫을 정도로 뜨거웠습니다. 저전력 CPU 가 들어간 작은..
-
Spring Cloud Data FlowSpring 2024. 10. 2. 15:09
공식 문서 사이트https://dataflow.spring.io/docs/installation/https://docs.spring.io/spring-cloud-task/docs/current/reference/html/#preface수동 다운로드 사이트작성일 기준으로 최신 버전은 2.11.4Spring Cloud Dataflow ServerSpring Cloud Skipper설명Spring Cloud SkipperSpring Cloud Data Flow와 함께 사용되는 배포 관리 도구로, 애플리케이션 배포의 관리 및 업그레이드를 간편하게 수행할 수 있도록 도와주며, Skipper는 Spring Cloud Data Flow에서 스트림 및 작업(Tasks)을 구성하고 실행하는데 있어 버전 관리, 롤백, 및..
-
Spring & JTA(분산 트랜잭션)Spring 2023. 10. 30. 15:58
Spring Boot에 JTA 사용하기 안녕하세요. 기존 게시물 중 Spring Multi Datasource와 Multi Transaction 게시 글들이 있는데 말이 Multi Transaction이었지 결국에는 별개의 Transaction이었기 때문에 서로 다른 Transaction를 같이 사용했을 때 ACID가 지켜지지 않는 문제가 있었습니다. 그래서 이번 게시 글에선 JTA(Java Transaction API)를 이용한 분산 트랜잭션 처리를 다뤄보고자 합니다. 여기서 JTA에 간략하게 설명하자면 분산 트랜잭션을 관리하는 데 사용되는 Java 표준 API이며 데이터베이스, 메시지 큐, 웹 서비스 등 분산 트래잭션을 처리하게 해줍니다. 즉 이기종 간의 트랜잭션을 처리할 수 있습니다. 예로 A DB..
-
PG(Postgresql) 대용량 InsertDB 2023. 7. 3. 14:18
대용량 Insert 기술들 bulk insert(Multi-valued Insert) 데이터가 일정이상 과도하게 insert 되는 경우 인덱싱 문제로 인해 insert 속도가 저하 되었다. 테이블 인덱스 삭제 -> 대용량 Insert -> 테이블 인덱스 재생성 인덱스를 삭제 후 대용량 insert엔 문제가 없었으나 인덱스의 재생성에서 시간이 오래 걸림 PG의 copy문 사용 PG에서 제공하는 copy문을 사용. 1. 임시 테이블 생성 후 대량 Insert(해당 테이블엔 인덱스가 없기 때문에 Insert 속도 향상) 2. 본 테이블의 인덱스 삭제 3. 대용량 insert가 완료된 임시 테이블 copy문을 통해 csv 파일 생성 (copy to) 4. csv를 본 테이블에 전달(copy from) 5. 본 ..
-
RabbitMQ 리스너 메세지 무손실 배포MQ 2023. 7. 3. 13:47
문제Queue에 메세지가 존재 하는 상황에서 배포를 할 경우 리스너에서 Queue 처리가 어디까지 진행되었는지 모르는 상황인데 이때 리스너를 종료하게 되면 Queue가 unacked 상태가 되거나 혹은 다시 대기열로 들어가서 Queue를 재처리 하는 과정에서 원치 않는 프로세스의 중복을 유발 시킬 수도 있다. 그래서 이를 피하긴 위해 Queue에 메세지가 있는지 확인하고 없는 상황에서만 배포를 해야 하는데 그럴려면 Queue에 메세지를 상시 확인 해야 하며 배포 일자를 원하는 시기에 맞춰서 할 수 없다는 문제가 있다.목적Queue에 메세지가 존재하거나 리스너에서 Queue를 처리 하고 있는 상태에서도 Queue 메세지를 상시 확인하지 않고 배포 일자를 원하는 시기에 맞춰 할 수 있게 리스너 배포를 구성...
-
RabbitMQ DLX/DLQ 메세지 손실 방지MQ 2023. 7. 3. 11:24
RabbitMQ DLX/DLQ 메세지 손실 방지 이번 글에 주제는 RabbitMQ를 재시작 했을 때 DLX(Dead Letter Exchange)와 DLQ(Dead Letter Queue)의 메세지가 손실 되지 않는 구성 및 코드를 작성하는 방법에 대해서 쓰려고 합니다. 물론 DLX/DLQ에만 국한된 이야기가 아니고 Exchange/Queue에도 관련된 이야기 입니다. DLX/DLQ도 결국에는 Exchange이면서 Queue이기도 하기 때문입니다. 이와 관련해서 사용된 기술은 Spring AMQP 기준 입니다. 그렇지만 기술만 그러할 뿐 근본적인 내용은 RabbitMQ에 의존하기 때문에 다른 언어에서도 지원 되는 기술을 찾아 동일하게 적용할 수 있습니다. 방법 RabbitMQ 서버가 재시작 되었을 때 메..
-
Spring과 Builder PatternSpring 2023. 4. 5. 14:54
빌더 패턴 이번 주제는 생성자 패턴 중에서 제일 유명하고 가장 많이 쓰이는 패턴인 빌더 패턴입니다. 빌더 패턴에 장점으론 유연한 객체 생성 과정 생성된 객체의 불편성 유지 가독성 높은 코드 작성 등이 있습니다. 빌더 패턴과 많이들 이야기 되는게 점층적 생성자 패턴과 자바빈즈 패턴이 이야기 됩니다. 여기서 점층적 생성자 패턴을 설명 드리면 생성자를 오버로딩하여 파라미터 개수를 늘려가면서 객체를 초기화 하는 방식 입니다. public class Person { private String name; private int age; private String address; private String phone; public Person(String name, int age) { this(name, age, ""..