전체 글 103

Ralph Loop 설계하기 — BACKLOG.md와 상태 파일 운영법

1편 - Claude Code로 암호화폐 투자 대시보드 만들기에 이어, Ralph Loop를 실제로 설계하고 운영한 방법을 다룹니다. 루프를 어떻게 구성했는지, 상태 파일을 어떻게 관리했는지, 그리고 1,208번의 루프 동안 일관성을 유지한 방법을 정리합니다.Ralph Loop의 기본 구조Ralph Loop는 Claude Code가 자율적으로 반복 작업을 수행하도록 구성하는 패턴입니다.핵심 아이디어는 단순합니다. Claude가 "다음에 무엇을 해야 하는지"를 스스로 파악할 수 있도록 상태 파일을 잘 정의해두는 것입니다.루프 프롬프트 예시는 아래와 같습니다.BACKLOG.md의 미완료 항목을 P0 → P1 → P2 순서로 1개씩 구현한다.이 한 줄이 전부입니다. Claude는 이 지시를 받으면 BACKLO..

DB 낙관적 락

이전에 카프카 동시성 이슈에 대해 작성하였습니다.글을 작성하면서 찾았던 낙관적 락, 비관적 락, 분산락에 대해 설명하고, 기록하도록 하겠습니다.동시성 테스트아래 코드는 동시성 테스트를 위한 코드입니다.큰 특징은newFixedThreadPool해당하는 함수로 Java의 쓰레드를 생성하는 함수로써, 10개 스레드를 생성하였습니다.CountDownLatchnew CountDownLatch(THREAD_COUNT) : 스레드 작업 카운트를 적시하여, 차후에 함수에 사용 합니다.latch.await(10, TimeUnit.SECONDS) : 위에 적시한 스레드 카운트가 0 이 될 때까지 기다리고 이후에 작업을진행 합니다.package com.webtoonrank.demo.core.domain.product.ser..

Spring 2024.08.12

상반기 회고 및 Spring신규 프로젝트 패키지 구조

신규 프로젝트  작년 겨울에 부정 거래 어드민 사이트를 담당하게 되었습니다. 선물하기, 톡스토어 등 다양한 유저의 패턴을 분석한뒤 룰을 정의하고, 정의한 룰을 기반으로 적발된 데이터를 적재, 검수하는 웹사이트입니다.신규 프로젝트라서 프로젝트 패키지 구조, DB, 프레임워크, 라이브러리 등 사용한 것에 대한 대략 적인 내용을 정리하도록 하겠습니다.패키지 구조패키지 구조는 기본적으로  L cache  L web  L core  L storage로 구성하였습니다.처음에는  L domain  L controller  L service  L repostiory로 생각하였는데, 이렇게 되면 도메인을 분리하기도 어려워지고, 웹에 종속적인 프로젝트로 되서, API 호출할때도 패키지를 새로 구성해야 돼서 유연하지 못하다..

Spring 2024.08.10

객체지향 쿼리 언어2 - 중급 문법

경로 표현식 특징 상태 필드 (state field): 경로 탐색의 끝, 탐색 X 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 O 컬렉션 값 연관 경로: 묵시적 내부 조인 발생, 탐색 X FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능 결론 : 묵시적 조인은 실무에서 쓰면 안 된다. 유지보수하기도 힘들다. 그러므로 명시적 조인으로 항상 작성해야 된다.! 상태 필드 경로 탐색 JPQL: select m.username, m.age from Member m SQL: select m.username, m.age from Member m 단일 값 연관 경로 탐색 JPQL: select o.member from Order o SQL: select m.* fro..

객체지향 쿼리 언어1 - 기본 문법

JPQL 소개 JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 반환된다. JPQL 문법 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자 구분 해야된다. (Member, age) JPQL 키워드는 대소문자 구분이 필요 없다. (SELECT, FROM, where) 엔티티 이름 사용, 테이블 이름 아님 (Member) 별칭은 필수(m)(as는 생략가능) TypeQuery, Query TypeQuery: 반환 타입이 명확할 때 사용 Query: 반환 타입이 명확하지 않을 때 사용 TypedQue..