6kitty 6kitty

⎛⎝ ≽ > ⩊ < ≼ ⎠⎞

6kitty

260328 주간 회고

이번 주 한 일들 정리


이번 주 한 일

1. quantagent-prac — 퀀트 에이전트 실습 레포

퀀트 에이전트 쪽 공부용으로 레포 새로 팠다. 여러 LLM/API 연동을 직접 붙여보는 게 목적이었다.

실습 내용

  • Git LFS : 대용량 데이터 파일을 LFS로 관리하는 방식 연습. .gitattributes로 특정 확장자 트래킹 지정
  • Azure OpenAI (AOAI) : AOAI API 키 기반 연동 코드 작성, 모델 호출 흐름 파악
  • Gemini key rotation : Gemini API 키 호출 한도에 걸릴 때 여러 키를 순환하며 재시도하는 로직 구현
  • Slack API : 메시지 전송 연동. 웹훅 방식과 봇 토큰 방식 비교
  • MCP-LLM (opencode) : opencode에 MCP 서버 연결하고 알리바바 클라우드도 붙여봄. opencode.json, oh-my-opencode.json 등 설정 파일 직접 작성
  • data prac : 주가 데이터 등 금융 데이터 분석 연습 (study.html)

느낀 점

퀀트 쪽은 완전 처음인데, 기획 단계에서부터 PER, 수익률, 리밸런싱 같은 기본 금융 개념을 모르니까 뭘 만들어야 할지조차 감이 안 잡혔다. AI 에이전트 붙이기 전에 금융 도메인 지식부터 좀 채워야 할 것 같다.


2. MASKIT — SAST+DAST 보안 취약점 자동화

문제 정의

솔루션 개발 중 API 엔드포인트에 JWT 인증이 누락된 취약점이 있다는 걸 발견했다. 수작업으로 일일이 확인하기엔 엔드포인트 수가 너무 많아서 자동화하기로 했다.

해결 방법

  • 전체 엔드포인트 목록화 및 인증 여부 전수 조사 (AST 파싱 기반)
  • 공격 시나리오 자동화 테스트 설계
    • 비인증 접근, JWT 변조 (alg:none), IDOR, 권한 상승 등
  • CVSS v3.1 기준 Critical / High / Medium 3단계 위험도 분류
  • 정량 지표(취약 엔드포인트 수, 인증 우회 성공률, 평균 CVSS) 자동 산출 리포트 구축
  • GitHub Actions 워크플로우 (security-sast.yml) 작성
    • pip-audit : 의존성 CVE 스캔
    • bandit : Python 코드 정적 분석
    • 커스텀 인증 커버리지 검증 스크립트 포함
    • PR 생성 시 보안 결과 자동 코멘트

결과 (정량)

지표 패치 전 패치 후
인증 커버리지 55.0% 96.2% (+41.2%p)
Critical 취약점 5건 0건
DAST 인증 우회 성공률 38.8% (19/49)
수정 완료 엔드포인트 33개

SAST 기준으로 전체 80개 엔드포인트 중 36개에서 인증 누락을 식별했다 (미적용률 45%).

삽질 포인트

처음엔 ast.FunctionDef만 파싱하도록 짰더니 async def로 선언된 엔드포인트가 전부 누락됐다. ast.AsyncFunctionDef도 같이 체크하도록 수정해서 해결했다.

# 수정 전
isinstance(node, ast.FunctionDef)

# 수정 후
isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef))

3. 6puppy — 디코 봇 개발 + OCI 배포

6kitty.github.io 블로그 관리용 디스코드 봇을 만들고 OCI 서버에 올렸다.

봇 구조

Discord bot + FastAPI 웹훅 서버 를 하나의 프로세스에서 동시 실행하는 구조다. Discord 봇은 비동기로 돌고, 웹훅 서버는 별도 스레드에서 실행된다.

주요 기능:

  • 매주 토요일 20시(Asia/Seoul)에 블로그 포스팅 리마인더 알림
  • GitHub push 웹훅 수신 → Discord 채널로 알림
  • /add_account, /check_now, /list_accounts, /kitty_help 슬래시 커맨드

OCI 배포 과정

1. VM 초기 세팅

ssh -v -i ssh-key-2026-03-26.key ubuntu@146.56.109.69
git clone https://github.com/6kitty/6puppy.git
cd 6kitty-bot
bash deploy/setup.sh
nano .env

setup.sh가 Python venv 구성, 의존성 설치, systemd 서비스 등록까지 한 번에 처리한다.

2. OCI Security List 포트 오픈

OCI는 OS 방화벽(iptables) 외에 콘솔에서 Security List도 별도로 열어야 한다.

Compute → Instance 상세 → Primary VNIC → Subnet → Security List
→ Add Ingress Rules
  - Source CIDR: 0.0.0.0/0
  - Protocol: TCP
  - Destination Port: 8080

이걸 몰라서 iptables는 다 열어놨는데 웹훅이 계속 안 들어와서 한참 헤맸다. OCI 이중 방화벽 구조를 처음 알게 됐다.

3. GitHub Webhook 설정

Settings → Webhooks → Add webhook
- Payload URL: http://{OCI_IP}:8080/webhook/github
- Content type: application/json
- Secret: .env의 GITHUB_WEBHOOK_SECRET 값
- Events: Just the push event

4. GitHub Actions 자동 배포 (CI/CD)

main 브랜치에 push하면 OCI VM에 자동 배포되도록 구성했다. GitHub Secrets에 아래 세 가지를 등록하면 된다.

Secret
OCI_HOST VM 공개 IP
OCI_USER ubuntu
OCI_SSH_KEY SSH private key 전체 내용

봇 운영 명령어

sudo systemctl status 6kitty-bot   # 상태 확인
sudo journalctl -u 6kitty-bot -f   # 실시간 로그
sudo systemctl restart 6kitty-bot  # 재시작

트러블슈팅 기록

  • 웹훅이 안 들어올 때 : OCI Security List 8080 포트 먼저 확인 → iptables 확인 → GitHub Webhook Recent Deliveries에서 빨간 X 클릭해서 오류 메시지 확인
  • 슬래시 커맨드가 안 보일 때 : Discord 글로벌 커맨드 동기화 최대 1시간 소요, 봇 권한에 applications.commands 스코프 포함 여부 확인
  • Claude 요약 기능 안 될 때 : .envANTHROPIC_API_KEY 및 크레딧 잔액 확인

그 외

  1. 안랩 장학금 신청 : 딱히 장학금 신청해본 적 없는데 학과 공지에 있고, 보려는 과목 다 A이기도 해서 넣어봤다. 1명만 뽑는 거라 경쟁이 빡세긴 하겠지만 붙었으면 좋겠다.

  2. 금융 도메인 공부 필요 : quantagent-prac 기획하면서 체감했다. 에이전트 기능 붙이기 전에 기초 지식부터 채워야 할 것 같다.

  3. 졸프 지도교수님이 공차 사주심 : 개인 포폴 준비하라고 하셨는데, 사실 필요하다고 생각하던 부분이라 말씀 자체가 도움이 많이 됐다.

  4. 자격증/어학 공부를 아예 못 했다 : 이런 것들 정리하고 개발하다 보면 정작 자격증이나 어학은 손도 못 댄다. 다음 주엔 진짜 기를 써서라도 해야 함.

  5. 취준 정병 : 점점 심해지는 중… 🥲