문득 이런 생각이 들었다
이렇게 열심히 코딩을 해두는데
남는건 커밋과 코드밖에 없네
내가 피땀흘려 한 코딩을 요약해서 개발일지를 만들어두면 어떨까?
그런데 내가 이걸 매일 하기는 너무 귀찮았다
그래서 최근에 결제한 클로드 max... 이 넘쳐나는 토큰을 사용해보기로 했다
어떻게 만들까
개발일지를 노션이나 옵시디언 둘중 어디에 쓸까 하다가 노션은 협업 시에 쓰는게 낫겠다 해서 옵시디언을 선택했다
내가 생각해둔 flow는 다음과 같다
- github에서 오늘의 커밋들을 가져온다
- 미리 준비해둔 템플릿에 맞춰 클로드 코드가 요약한다
- 이를 저장한다
그러면 대강 github mcp와 내 파일시스템에 접근할수 있는 filesystem mcp를 주면 될것이다
이렇게 보면 간단하다. 처음에는 배치 파일을 써서 클로드 데스크탑 + mcp로 내가 매일 배치파일을 실행시키는 방식을 생각했는데... 또 귀찮더라
어쩌면 매일 까먹을수도 있는 노릇이고, 노트북을 이미 덮었는데 개발일지 쓸라고 또 노트북을 켜는건 매우 귀찮다
개발자는 귀찮은걸 싫어해야한다
그래서 집에 있는 라즈베리파이 5 홈서버를 사용하기로 했다
파일 실행도 귀찮아 cron이 알아서 해줘
홈서버는 24시간 돌아가는 중이다
그러니까 클로드 코드에게 위 3개의 일을 시키는 스크립트를 짜두고 스케줄을 등록해두면 매일 알아서 실행될것이다
하지만 문제가 있다
난 옵시디언 로컬을 사용 중인데, 홈서버에서 꺼져있는 내 노트북에 접속해서 개발일지를 쓸수는 없을 것이다
여기에 더해서 내가 클로드에게 시켰던 일도 요약해서 개발일지에 써두고 싶었다
왜냐? 요새는 에이전트에게 일 시키는 방법도 개발자의 미덕이라고 하더라
하지만 개발은 홈서버가 아니라 노트북에서 한다
클로드 코드 세션이 내 노트북에 쌓인단 말이다
그러면 이것도 홈서버가 어떻게 가져올 것이가
여기서 필요한 것이 "Syncthing" 이다
Syncthing은 동기화를 해주는 프로그램이다
나는 이것을 홈서버에서 작성된 개발일지를 노트북의 옵시디언 볼트에 동기화시키고
노트북의 클로드 코드 세션을 홈서버에서 사용할수있도록 동기화시킬 것이다
노트북 (Windows)
├── Claude Code 세션 기록 (~/.claude)
├── Obsidian 볼트
└── Syncthing (동기화)
↕
홈서버 (Ubuntu, 24시간)
├── Claude Code + MCP
├── GitHub MCP (커밋 조회)
├── Filesystem MCP (파일 읽기/쓰기)
├── Syncthing (동기화)
└── Cron (매일 23:50 자동 실행)
클로드한테 요약하라니까 이렇게 해줬다. 짱짱
Syncthing 동기화
sudo apt install syncthing
sudo systemctl enable syncthing@$USER
sudo systemctl start syncthing@$USER
홈서버는 우분투가 OS로 올라가있다
$USER는 현재 접속한 유저의 아이디이다
홈서버 설정을 하기 위해서는 syncthing gui에 접속을 해야한다
머 cli로 할수도 있나? 그건 잘 모르겠지만 gui가 편하니까 그걸로 하자
vim ~/.local/state/syncthing/config.xml
여기로 들어가서

gui enabled를 0.0.0.0:8384로 설정해주자
어차피 포트포워딩 안되어있으면 외부에서 못들어올것이다
노트북과 홈서버는 같은 공유기로 묶여있으므로 노트북에서 접속 가능하다
{홈서버 IP}:8384로 접속하면?

이렇게 접속이 된다!!
난 이미 동기화 설정을 해두어서 폴더가 저렇게 나오는데, 원래는 Default Folder 밖에 없었다
그럼 이제 노트북에도 Syncthing을 설치해야한다
https://syncthing.net 에서 다운로드 설치후에 http://localhost:8384 로 접속하면?

이렇게 들어갈수 있다
원래는 폴더에 아무것도 없어야 정상이다
노트북쪽의 syncthing gui에서 우측 상단의 동작 -> 기기 아이디 보기를 클릭하면

중간에 QR 코드가 나오고 상단에는 기기 ID가 나온다
기기 ID를 복사해두자
다시 홈서버쪽 gui로 이동

우측 하단에 보면 이렇게 다른 기기 추가가 있는데 이걸 눌러주자

여기서 기기 식별자에 복사해둔 기기 ID를 집어넣자
만약 같은 와이파이이고 가까이 있다면 자동완성도 해준다
기기명은 알아서 하고
저장을 누르면 노트북쪽 gui에서 동기화 요청이 올 것인데, 수락을 눌러주자
그 다음 폴더 추가를 눌러서

이렇게 동기화할 폴더를 선택하자
폴더 아이디는 기억하기 쉽게 해두자
이 아이디가 같은 폴더끼리 동기화가 된다
저장 ㄱㄱ

그럼 이렇게 "공유되지 않음"으로 상태가 뜰 것이다
그 다음 테스트 폴더를 누르면 편집을 누른 다음

공유로 들어가서 동기화해둔 기기를 선택하고 저장을 누르자
이제 다시 홈서버 gui로 이동하자
여기서도 폴더 추가를 누르고

이렇게 폴더 식별자를 똑같이 만든다음 저장 ㄱㄱ
그러면 동기화가 진행된다 !!

홈서버에서 확인하면 동기화가 잘 된 것을 확인할수 있다
이제 동기화는 됐고
클로드 코드에 mcp 붙이기
이제 홈서버의 클로드 코드에 github mcp와 파일시스템 mcp를 붙이면 된다
# GitHub MCP 전역 추가
claude mcp add --scope global github -e GITHUB_TOKEN=ghp_xxx -- npx -y @modelcontextprotocol/server-github
# Filesystem MCP 전역 추가
claude mcp add --scope global filesystem -- npx -y @modelcontextprotocol/server-filesystem /home/gooch123/synced/Obsidian /home/gooch123/synced/claude
이렇게 붙여주면 되는데, 전역 설정으로 붙일거면 위처럼 --scope global을 붙이면 된다
그리고 깃허브 토큰이 있어야 자신의 레포와 커밋 기록을 가져올 수 있으니 발급받아두자
그 다음은 그냥 프롬프트를 적절히 사용해서 커밋 기록과 클로드 세션을 가져오고, 템플릿에 맞춰 개발일지를 작성해달라고 하면 된다
내 옵시디언 볼트의 구조는 다음과 같다
Obsidian/
├── templates/
│ ├── daily-template.md
│ ├── weekly-template.md
│ └── monthly-template.md
└── journal/
├── daily/
├── weekly/
└── monthly/
위처럼 미리 일간, 주간, 월간 템플릿을 만들어두었다
일일 개발일지뿐만 아니라 주간, 월간 개발일지도 쓸 것이다
파일시스템 mcp를 이용해 journal 밑의 폴더에 마크다운 파일을 만들어달라고 했다
프롬프트는 대강 다음과 같다
#!/bin/bash
# 기본 정보
TODAY=$(date +%Y-%m-%d)
YEAR=$(date +%Y)
MONTH=$(date +%m)
WEEK=$(date +%V)
DOW=$(date +%u)
DAY=$(date +%d)
# 주간 시작/종료일
WEEK_START=$(date -d "$TODAY -$((DOW-1)) days" +%Y-%m-%d)
WEEK_END=$(date -d "$TODAY +$((7-DOW)) days" +%Y-%m-%d)
# 지난주/지난달 정보
LAST_WEEK=$(date -d "last week" +%V)
LAST_WEEK_YEAR=$(date -d "last week" +%Y)
LAST_MONTH=$(date -d "last month" +%Y-%m)
LAST_MONTH_YEAR=$(date -d "last month" +%Y)
LAST_MONTH_NUM=$(date -d "last month" +%m)
# 경로 설정
OBSIDIAN_DIR="/home/user/synced/Obsidian" # 동기화 폴더
CLAUDE_LOG_DIR="/home/user/synced/claude" # 동기화 폴더
GITHUB_USER="github-user"
OUTPUT_DIR="$OBSIDIAN_DIR/journal"
TEMPLATE_DIR="$OBSIDIAN_DIR/templates"
# 폴더 생성
mkdir -p "$OUTPUT_DIR/daily"
mkdir -p "$OUTPUT_DIR/weekly"
mkdir -p "$OUTPUT_DIR/monthly"
# Claude Code 실행
claude -p --dangerously-skip-permissions "
Development Journal Automation
Basic Info:
- Date: $TODAY
- Week: $YEAR-W$WEEK
- Week Period: $WEEK_START ~ $WEEK_END
- Day of Week: $DOW (1=Monday, 7=Sunday)
- Day of Month: $DAY
- GitHub: $GITHUB_USER
Tasks:
[필수] 1. 오늘의 일일 로그 생성
[조건] 2. 지난 주 주간 로그가 없으면 생성
[조건] 3. 일요일이면 이번 주 주간 로그 생성
[조건] 4. 1일이면 지난 달 월간 로그 생성
템플릿 사용해서 Filesystem MCP로 저장해줘.
"
echo "[$TODAY] 개발 일지 자동화 완료"
(참고로 사람에 따라 클로드 코드 설치 경로를 적어둬야 할수도 있다)
한가지 중요한 점은 -p --dangerously-skip-permissions 을 사용해야 한다는 점이다
-p를 써야 클로드 코드가 따로 실행되지 않고 프롬프트를 바로 실행한다
--dangerously-skip-permissions 를 쓰지 않으면 mcp를 사용할 때 권한을 요청하기 때문에 스케줄링이 막힌다
cron 사용하기
이제 스크립트까지 다 만들었으니까 cron에 등록하기만 하면 된다
위 스크립트에 chomd +x 로 실행 권한을 주고
crontab -e
를 사용해서 설정에 들어가서 맨 밑에
50 23 * * * /home/user/scripts/daily-dev-log.sh >> /home/user/logs/devlog.log 2>&1
이렇게 설정을 해두었다
오후 11시 50분마다 스크립트를 실행해서 로그를 남기게 하는 명령어다
좀 번거롭지만 이렇게 한번 자동화 설정을 해두니까 알아서 개발일지가 써진다
협업을 할때도 진도를 어디까지 나갔는지 저장해두기에 좋을거같다
jira 같은 곳에서도 써볼수있지 않을까?
클로드 코드 만세
근데 너무 비싸
이번달만 구독하고 다음엔 gemini cli로 마이그레이션 해야겠다
개발일지 결과
의외로 많은 분들이 이 글에 관심을 보인다 (이 글도 같이 보면 더 좋으실듯)
아마 openClaw같은 에이전트 비서에서도 비슷한 일을 할수 있어서 그런건가
그런데 생각해보니까 내가 개발일지가 어떻게 나오는지 써두질 않았다
그래서 실제로 나온 일간/주간/월간 개발일지를 올려두겠다
그냥 대강 이런식으로 나온다고 참고하면 되겠다
일간 개발일지
# 📅 2026-02-03 개발일지
## 🔨 Git 커밋 기록
### goochul-im/harudew-api-spring (feat/diary)
| 시간 (KST) | SHA | 메시지 |
|------------|-----|--------|
| 17:46 | `69dc269` | refactor(DiaryEeventHandler): 전처리 커맨드 변경에 따른 인수 변경 |
| 17:45 | `3d9fa5e` | feat(Diary): Rag 검색을 위한 전처리 로직 작성 |
| 17:43 | `e49910c` | refactor(Qdrant): Qdrant Adapter 리팩토링 |
| 17:23 | `14b9c94` | chore: 필요없는 테스트 프로퍼티 삭제 |
| 16:34 | `c357ca7` | test(Qdrant): QdrantClientAdpater 테스트 작성 |
| 16:28 | `be92a0f` | refactor(Qdrant): Qdrant를 사용하는 도메인 추가를 고려해 리팩토링 |
| 15:36 | `36bf71b` | feat(diary): diary 생성 로직 작성 |
### goochul-im/crafton-backjoon
- 오늘 커밋 없음
## 🤖 Claude Code 활용
- **세션 수**: 2개
- **주요 작업**:
### harudew-api-spring 프로젝트
1. **이벤트 리스너 및 모듈 구조 설계**
- 이벤트 리스너의 스코프 위치 논의
- DiaryCreatedEventHandler에서 다른 모듈 호출 시 방향성 검토
- MSA 마이그레이션을 고려한 orchestration 모듈 설계 논의
- DomainEventPublisherPort의 MSA 환경에서의 필요성 및 정합성 논의
2. **RAG 전처리 로직 설계**
- 일기 내용을 RAG용으로 전처리하는 로직의 위치 결정
3. **Qdrant 관련 작업**
- QdrantSentenceAdapter에서 LocalDate 형식 저장 문제 해결
- Qdrant 전용 포트-어댑터 리팩토링 계획 수립
- QdrantClientAdapter 통합 테스트 작성
## 주요 기술 작업
### Diary 기능 개발
- 일기 생성 로직 완성 (`feat/diary` 브랜치)
- DiaryCreatedEvent 기반으로 RAG 전처리 로직 구현
- 추후 키워드 검색 전처리 과정 구현 예정
### Qdrant 인프라 리팩토링
- 여러 도메인에서 Qdrant를 재사용할 수 있도록 QdrantClientAdapter로 통합
- 컬렉션 이름을 파라미터로 받아 유연하게 사용 가능하도록 설계
- 통합 테스트 작성으로 실제 Qdrant 연동 검증
### 아키텍처 논의
- 헥사고날 아키텍처 기반 이벤트 핸들링 구조 설계
- MSA 전환을 고려한 모듈 분리 전략 검토
## 🏷️ 관련 링크
- [[2026-W06|이번 주 위클리]]
주간 개발일지
# 📊 2026년 05주차 주간 리포트
> 2026-01-26 ~ 2026-02-01
## 🎯 이번 주 목표 달성
- [ ] 목표 1
- [ ] 목표 2
- [ ] 목표 3
## 📈 커밋 통계
- **총 커밋 수**: 21개
- **활동 저장소**: harudew-api-spring, crafton-backjoon, HH-Lite-Architecture-Reservation-Service
## 🔨 일별 요약
- **01-26 (월)**: S3 스토리지 기능 구현 및 테스트, build.gradle kts 마이그레이션 (harudew-api), 알고리즘 문제풀이 (crafton-backjoon) — 4개 커밋
- **01-27 (화)**: 커밋 없음 / IntelliJ 테스트 환경 구성 및 Gradle 설정 작업 (Claude 활용)
- **01-28 (수)**: 백준 피보나치 수 문제풀이 (crafton-backjoon) — 1개 커밋
- **01-29 (목)**: 이벤트 기반 아키텍처 전환 집중 작업 (HH-Lite), MSA 설계 보고서 작성 — 9개 커밋
- **01-30 (금)**: 백준 예상 대진표 문제풀이 (crafton-backjoon) — 1개 커밋
- **01-31 (토)**: feat/cluster PR 머지, 암호화/복호화 기능 구현 (harudew-api), 알고리즘 문제풀이 2문제 (crafton-backjoon) — 5개 커밋
- **02-01 (일)**: Kotlin 개발 환경 구성 (kotlinc, autocp), JPA Converter 기반 암호화 설계, 알고리즘 문제풀이 (crafton-backjoon) — 1개 커밋
## 🤖 Claude Code 활용 요약
- **총 세션 수**: 13개
- **주요 활용 패턴**:
- **아키텍처 설계**: 이벤트 기반 아키텍처 전환 (DomainEvent, 이벤트 퍼블리셔), 헥사고날 아키텍처 기반 암호화 레이어 설계
- **마이그레이션**: NestJS → 코프링 전환, Remotion-Server 암호화 로직 Kotlin 포팅
- **코루틴 학습**: withContext vs coroutineScope 차이, 코루틴 개념 정리
- **개발 환경 구성**: IntelliJ 테스트 환경, kotlinc 설치 (sdkman), autocp Kotlin 빌드 설정
- **MSA 설계**: 도메인별 배포 단위 설계, 트래픽 집중 시나리오 분석, 분산 락/캐시 전략
- **암호화 학습**: AES-256-CBC 알고리즘, TextEncryptorPort 인터페이스 설계
## 💡 이번 주 배운 것
- 이벤트 기반 아키텍처 설계 및 구현 (DomainEvent, EventPublisher 포트-어댑터 패턴)
- JPA @Converter를 활용한 투명한 암호화/복호화 레이어
- Kotlin 코루틴 개념 (withContext vs coroutineScope)
- MSA 전환 시 트랜잭션 한계 및 해결 방안
- sdkman을 통한 Kotlin 개발 환경 구성
## 🔥 이번 주 하이라이트
- HH-Lite-Architecture-Reservation-Service 이벤트 기반 아키텍처 전환 완료
- harudew-api-spring feat/cluster 브랜치 머지 및 암호화 기능 구현
- Kotlin 코딩 테스트 환경 구성 완료 (kotlinc + autocp)
## 🎯 다음 주 목표
-
## 🏷️ 관련 링크
- [[2026-02|이번 달 먼슬리]]
- 일별 기록:
- [[2026-01-26]]
- [[2026-01-27]]
- [[2026-01-28]]
- [[2026-01-29]]
- [[2026-01-30]]
- [[2026-01-31]]
- [[2026-02-01]]
월간 개발일지
# 📆 2026년 01월 월간 리포트
## 🎯 이번 달 목표 달성
- [ ] 목표 1
- [ ] 목표 2
- [ ] 목표 3
## 📈 월간 통계
| 항목 | 수치 |
|------|------|
| 총 커밋 수 | 73개 |
| 활동 일수 | 14일 |
| Claude Code 세션 | 24회 |
| 활동 저장소 | 5개 |
## 📊 주차별 요약
### W03 (01-12 ~ 01-18)
- **커밋**: 7개
- **활동 저장소**: crafton-backjoon, HH-Lite-Architecture-Reservation-Service
- **주요 작업**: Concert 도메인 추가 및 Reservation 리팩토링, 단위 테스트 추가, SQL 문제풀이
### W04 (01-19 ~ 01-25)
- **커밋**: 17개
- **활동 저장소**: crafton-backjoon, HH-Lite-Architecture-Reservation-Service, harudew-api-spring
- **주요 작업**: 캐시 및 랭킹 기능 추가, 분산락 watchdog 적용, 클러스터 클라이언트 구현, MSA 학습 프로젝트 구성, Gradle Kotlin DSL 마이그레이션
### W05 (01-26 ~ 02-01) *1월 해당분*
- **커밋**: 49개 (HH-Lite 이벤트 기반 전환 포함)
- **활동 저장소**: harudew-api-spring, crafton-backjoon, HH-Lite-Architecture-Reservation-Service
- **주요 작업**: S3 스토리지 기능 구현, 이벤트 기반 아키텍처 전환, 암호화/복호화 기능 구현, feat/cluster PR 머지
## 🏆 이번 달 하이라이트
### 주요 프로젝트
- **harudew-api-spring**: NestJS → Kotlin+Spring 마이그레이션 본격 진행. Qdrant 벡터DB 연동, 클러스터 클라이언트 구현, S3 스토리지 기능, 소셜 로그인, 암호화 기능까지 핵심 인프라 구축 완료
- **HH-Lite-Architecture-Reservation-Service**: Concert 도메인 추가, 캐시/랭킹 기능, 분산락 watchdog, 이벤트 기반 아키텍처 전환까지 단계별 아키텍처 개선 완료
- **crafton-backjoon**: 20개 알고리즘/SQL 문제풀이 — 꾸준한 코딩 테스트 준비
### 기술적 성장
- 헥사고날 아키텍처 기반의 실전 프로젝트 설계 및 구현
- 이벤트 기반 아키텍처(DomainEvent, EventPublisher) 설계 및 적용
- 분산 시스템 패턴: 분산락 watchdog, 캐시 전략, MSA 설계
- JPA @Converter를 활용한 투명한 암호화 레이어
- Kotlin 코루틴 개념 학습 (withContext, coroutineScope)
## 💡 이번 달 배운 것
### 새로 배운 기술/개념
- Spring AI + AWS Bedrock 연동을 통한 RAG 구현
- Qdrant 벡터 DB 연동 및 테스트
- 분산락 watchdog 패턴 (락 획득 대기시간 자동 연장)
- N+1 문제 해결을 위한 배치 쿼리 + Map 변환 패턴
- AES-256-CBC 암호화 알고리즘 및 JPA Converter 적용
- Gradle Kotlin DSL (build.gradle.kts) 마이그레이션
- Kotlin 코루틴 동작 원리 (withContext vs coroutineScope)
### 문제 해결 경험
- OkHttp / Kotlin Coroutines 버전 충돌 해결
- spring-cloud-starter-aws S3 마이그레이션 이슈 해결
- IntelliJ 테스트 환경 구성 (Gradle vs IntelliJ 실행 방식)
- kotlinc / Java Runtime 경로 설정 문제 해결
## 🔄 회고
### 잘한 점
- harudew-api-spring 프로젝트의 핵심 인프라(인증, 벡터DB, 클러스터, S3, 암호화)를 체계적으로 구축
- HH-Lite 프로젝트를 통해 단계별 아키텍처 패턴(캐시 → 분산락 → 이벤트 기반) 학습 및 적용
- 매일 꾸준한 알고리즘 문제풀이 유지
### 개선할 점
-
## 🎯 다음 달 목표
-
## 🏷️ 관련 링크
- 주간 기록:
- [[2026-W03]]
- [[2026-W04]]
- [[2026-W05]]
월간 개발일지가 왜 W03부터냐면... 그때부터 자동화해뒀으니까... 걍 그런 단순한 이유임
'서버' 카테고리의 다른 글
| git hook을 이용하여 개발일지 자동화 고도화하기 (0) | 2026.01.20 |
|---|---|
| nestJS 배포 자동화 (3) | 2025.06.18 |
| 라즈베리파이5에 API 서버 배포하기 (6) | 2024.09.21 |