다음은 개발자와 AI 간의 오늘 하루 대화 로그야. 이 로그를 분석해서 내가 하루 동안 무엇에 집중하고 시간을 썼는지 한눈에 파악할 수 있도록 Obsidian 마크다운 형식으로 요약해줘.

📅 일간 개발 로그 요약 (2026-03-11)

1. 작업 분포

카테고리비중
백엔드/프론트엔드 개발 및 디버깅35%████░░░░░░
인프라 구성 및 트러블슈팅 (Terraform/AWS)25%███░░░░░░░
프로젝트 기획 및 문서화 (API/DB 설계)20%██░░░░░░░░
시스템 운영 및 툴링 (로그/스크립트)15%██░░░░░░░░
기술 학습 (AWS, Kubernetes)5%█░░░░░░░░░

2. 집중 영역 / 시간 소모 포인트

🟢 생산적 작업

  • Mock PG 및 멱등성 아키텍처 구현: 비동기 결제 처리, 콜백 시나리오 테스트를 완료하고, checkoutId 기반의 멱등성 로직을 백엔드/프론트엔드에 적용하여 데이터 정합성을 확보함.
  • 인프라 마이그레이션 및 안전장치 강화: EC2 내부 DB를 AWS RDS/ElastiCache로 이관하는 Terraform 코드를 작성하고 배포함. terraform 실행 시 -auto-approve를 차단하는 래퍼 스크립트를 개선하여 운영 안전성을 높임.
  • 로그 시스템 최적화: 10GB에 달하는 .claude 폴더 용량 문제를 분석하고, 로그 수집 시 tool_result를 필터링하며 발화 경계(User:/AI:) 기반으로 청킹을 나누는 로직으로 개선함.
  • 프로젝트 설계 문서화: MSA 프로젝트의 DB 스키마(Saga 패턴 고려), API 명세서, 시스템 아키텍처를 상세히 작성하여 개발 방향성을 구체화함.

🔴 삽질/시간 소모 포인트

  • 배포 환경 문제: EC2 빌드 시 buildx 미설치, application-prod.yaml의 인코딩(EUC-KR) 문제, 타임존 불일치(JVM KST vs DB UTC) 등으로 인해 애플리케이션이 기동하지 않거나 타임딜이 즉시 만료되는 문제를 해결하는 데 시간 소요.
  • 프론트엔드 데이터 연동 오류: 백엔드와 프론트엔드의 ID 필드명 불일치(timeDealId vs id), 얕은 복사로 인한 SKU 정보 유실, JS의 정수 정밀도 한계(Snowflake ID) 등으로 인해 결제 흐름이 끊기는 문제를 연쇄적으로 디버깅함.
  • Terraform State 충돌: 리전 변경 과정에서 기존 State와 신규 코드가 충돌하여 리소스 삭제가 실패하고, 이전 코드로 임시 복원 후 삭제하는 번거로운 과정을 거침.
  • 외부 접속 및 OS 호환성: Ollama의 외부 접속 허용 설정(CORS), Windows 11 Home에서의 SSH 접속 실패(백신 방화벽, OpenSSH 제한) 등 환경 설정 이슈 해결.

3. 타임라인

시간주요 작업 내용
09:59🦦 AWS SAA-C03 Directory Service 문서 생성 및 내용 검수.
10:00🦦 ai-log-sync 로그 분석 및 용량 최적화 방안(tool_result 필터링) 도출.
11:28🦦 SAA-C03 가이드의 Obsidian 호환성(이모지, 태그) 수정.
11:42🦦 1주일치 로그 분석을 통해 청킹 로직 개선 및 버그 수정.
14:01🦦 로그 청크 처리 기술 논의 및 .claude 폴더 10GB 원인 분석.
14:34🦦 Mock PG 비동기 API 및 콜백 설정 구현 완료.
14:40🦦 로컬 환경 기동 및 Mock PG 기능 검증.
14:46🦦 Claude VM 이미지가 디스크를 차지한다는 원인 분석 결과 전달.
15:22🦦 노션 문서에 신규 API 및 테스트 시나리오 업데이트.
15:29🦦 로그 요약 툴(obsidian.go) 개선(청킹, 롤링 요약) 및 빌드.
15:40🦦 pposiraegi 레포의 멱등성 설계 분석 및 DB 유니크 제약(checkout_id) 추가 PR 생성.
15:53🦦 프론트엔드 OrderCheckout.jsxcheckoutId 관련 로직 적용 및 PR 생성.
16:07🦦 백엔드 MockPgClient 생성을 통해 PG 검증 로직 구현 시작.
16:25🦦 Terraform으로 ElastiCache 및 RDS 이관 계획 수립 및 코드 작성.
16:48🦦 terraform apply 실행 및 EC2 빌드 시작.
17:03🐹 EC2 접속하여 buildx 설치 및 설정 파일 수정 후 기동 성공.
18:10🦦 배포 브랜치가 main인 것을 확인하고 feat/pg-verification으로 전환 후 재빌드.
18:16🦦 ObjectMapper 빈 누락 문제를 AppConfig.java 수정으로 해결.
19:36🦦 타임존 미스매치(JVM KST vs DB UTC) 원인 규명 및 docker-compose.yml 수정.
19:51🦦 어드민 타임딜 수정 API 누락에 대한 백엔드 로직 추가.
20:00🦦 OrderNumberGenerator의 포맷 문자열 하이픈 제거로 숫자 파싱 오류 해결.
20:36🦦 프론트엔드 mapDeal 함수의 필드명 불일치(id vs timeDealId) 수정.
20:56🦦 API 응답 병합 시 깊은 병합(Deep Merge) 로직 적용하여 SKU 유실 문제 해결.
21:18🦦 기존 인프라 삭제 후 Bastion, Private Subnet 등 보안 요소를 포함한 Terraform 코드로 복원.
21:51🐹 Safety Hook 미작동 원인(위험 명령어 목록 누락) 규명.
22:07🐹 Terraform 래퍼 스크립트 경로 수정 및 -auto-approve 차단 로직 고도화.
(오전)🐹 MSA 프로젝트 전략(Saga/Circuit Breaker 집중) 수립 및 로드맵 작성.
(점심)⌨️ Ollama의 OLLAMA_ORIGINS 환경변수 설정을 통해 외부 접속 403 오류 해결.
(오후)🦦 쿠버네티스 네트워킹(Service, Ingress, Network Policy) 심화 학습.
(설계)🦦 프로젝트 DB 설계(reserved_quantity 등), 시스템 아키텍처 다이어그램 작성.
(설계)🦦 VPC, RDS, EKS 리소스 생성을 위한 Terraform 코드(모듈화) 작성.
(저녁)🐹 인프라 마이그레이션 가이드 작성 및 AI 프롬프팅 방향성(Why vs How) 정립.

4. 해결한 문제와 인사이트

핵심 문제 해결

  1. 타임딜 즉시 만료 (Scheduler)
    • 원인: Dockerfile의 -Duser.timezone=Asia/Seoul 설정으로 인해 JVM은 KST로, DB는 UTC로 시간을 인식하여 endTime <= now 로직이 꼬임.
    • 해결: docker-compose.yml 오버라이드 파일에 TZ: UTCJAVA_OPTS를 추가하여 전체 시스템을 UTC로 통일.
  2. 결제 Flow ID 누락 및 정밀도 손실
    • 원인: 백엔드 응답 필드명(timeDealId)과 프론트 참조 필드(id) 불일치, 18자리 Snowflake ID를 JavaScript Number로 변환 시 정밀도 손실.
    • 해결: mapDeal 함수 수정 및 원시 JSON 문자열 템플릿을 사용하여 ID를 String으로 전달하도록 수정.
  3. 인프라 운영 안전성 확보
    • 내용: Terraform의 파괴적 명령어 실행을 방지하기 위해 래퍼 스크립트에 -auto-approve 플래그 감지 로직을 추가하고, 이를 문서화하여 AI 에이전트의 행동을 제어.
  4. 로그 스토리지 최적화
    • 내용: 로그 파일 내용 분석 결과 tool_result가 용량의 대부분을 차지함을 확인하고, 이를 필터링하는 로직을 추가하여 저장소 효율성 증대.

주요 인사이트

  • Docker 환경변수 주의: 실행 중인 컨테이너의 환경변수 변경은 restart가 아닌 up -d --force-recreate로 재생성해야 적용됨.
  • MSA 프로젝트 전략: 모든 패턴을 적용하는 ‘얕고 넓은’ 프로젝트보다, 핵심 패턴(Saga 등)을 깊이 있게 구현하는 ‘좁고 깊은’ 프로젝트가 가치 있음.
  • AI 협업 철학: 인프라 작업 시 AI에게 단순 구현(How)을 맡기기보다, 설계와 순서(Why)를 먼저 질문하여 개발자가 판단 주체가 되어야 함.

5. 주요 코드 변경 사항

  • Mock PG (server.js): 비동기 콜백 처리 로직 내에 성공/실패 통계 카운트를 추가하고, /pay/async 등 신규 엔드포인트 구현.
  • 백엔드 (Order.java in pposiraegi): checkout_id 컬럼에 유니크 제약조건(uniqueConstraints) 추가하여 멱등성 보장.
  • 백엔드 (AppConfig.java): RestTemplateObjectMapper 빈 등록.
  • 백엔드 (TimeDealAdminController.java): 타임딜 수정 기능(PUT 메서드) 추가.
  • 백엔드 (OrderNumberGenerator.java): String.format 포맷 문자열에서 하이픈(-) 제거하여 파싱 오류 방지.
  • 프론트엔드 (timedeal.js): mapDeal 함수에서 필드명 매핑(id: deal.timeDealId) 수정 및 목록/상세 API 병합 로직을 Deep Merge로 변경.
  • 프론트엔드 (OrderCheckout.jsx): SKU ID를 올바르게 전달하도록 로직 수정.
  • 로그 툴 (client/interface.go, output/obsidian.go): 문자 수 기준 청킹을 User:/AI: 경계 기준으로 변경하고, 프롬프트 누출 방지 로직 강화.
  • 인프라 (docker-compose.yml): 타임존 설정(TZ: UTC) 및 Java 옵션 추가.
  • 인프라 (terraform wrapper script): 실행 경로 수정 및 -auto-approve 플래그 차단 로직 구현.

Supported by ai-log-sync & GLM-4.7