Day 3 | 추석 생존 로그–행오버 복습

숙취가 야속하지만 복습은 해야지

by 대장

� 소리와 피로


스테이블 오디오의 음악 퀄리티가 아쉽다고 느껴서,
대신 스테이블에서 스템 제작용 사운드를 만들어볼까 생각하던 참이었다.
그런데 아래 영상을 보고 나서 마음이 바뀌었다.

Stable Audio – Audio to Audio 기능 설명

스테이블 오디오의 Auido to Audio 기능 설명 비디오. 내가 업로드한 사운드를 원하는 악기로 바꿔준다.


업로드한 사운드를 원하는 악기로 바꿔주는 기능이라니, 이건 무조건 써봐야지.
정말이지 AI의 발전 속도를 따라가기가 정말 버겁다.

오늘은 숙취도 있었고, 광주 전시팀 회의만 3시간을 했더니 하루가 다 갔음.
그래도 복습은 멈추지 않는다. 내일부터는 다시 본격적으로 열작하기로.



� MLOps 복습 — Day 2


� 오늘의 의도

연휴 복습 이틀째.
오늘은 MLOps 프로젝트 당시 내가 설계했던 설정 계층(configs) 과 검증 구조를 다시 정리했다.

CI/CD를 각자 연습해볼 수 있게 우선 동작하는 MVP 스캐폴드를 만들었는데 뭔지 잘 모르는 상태로 어떻게 돌아가게끔은 만들었던 것 같다.

실제 유저/배포 환경을 흉내내는 설정 계층을 마련해 개인화 시뮬레이션용 users.json,

배포 품질 기준용 gates.yaml을 구축하고, 이 두 설정을 기반으로 팀이 평가·배포 판단을 코드 수정 없이 수행하도록 GPT가 설계해줬다.

어쨌거나 팀원들이 바로 받아서 쓸 수 있게 폴더 구조를 표준화하고, 역할 주석을 달아 공유했던 내용을 다시 정리해보자면 아래와 같다.


mlops-cloud-project-mlops-6/

├─ src/

│ ├─ io/ # [Adapter] 외부 I/O 전담(HTTP, 파일, S3/MinIO, Slack 등). 도메인 계산 금지

│ ├─ pipelines/ # [Entry/Orchestration] 단계 실행 스크립트(스냅샷, 임베딩, 평가/등록)

│ ├─ validate.py # [Guard] 스키마/타입/중복 검증 → 깨끗한 DF 반환

│ └─ reco/ # [Domain Logic, PURE] 코퍼스/임베딩/kNN/리랭킹/지표 (I/O 금지)

├─ configs/ # 팀 리뷰/버전관리 대상(users.json, gates.yaml 등)

├─ data/ # 원본 스냅샷(타임스탬프). Git 미추적(README만 추적)

├─ artifacts/ # 임베딩/인덱스/모델/메타/평가 결과. Git 미추적

├─ tests/ # 단위/통합 테스트(작은 픽스처)

├─ requirements.txt

└─ .gitignore


현재 팀 폴더 구조와는 다르지만 일단 초기 단계는 위와 같았다.


� 내가 던진 질문들


1. “폴더 구조를 잘 짜려면?”
→ 임베딩과 문서화는 reco (순수 계산) 에, 입출력은 io, 실행은 pipelines 으로 분리.

→ 테스트·리뷰가 쉬워지고, CI/CD 적용이 매끄럽다.


2. “.gitignore에 왜 data/artifacts?”
→ 팀 리포 용량 초과 방지


⚙️ configs/users.json — 가상 고객 10명

각 고객의 데이터 구조는 다음과 같았다:

{ "user_id": "u01",

"pref_styles": {"reds": 0.9},

"pref_regions": {"France": 0.7, "Italy": 0.3},

"adventurousness": 0.2,

"seed_wines": [101,102,103,104,105] }


10명의 가상 사용자 프로필을 생성해 configs/users.json에 저장했다.

adventurousness (0~1): 높을수록 ‘선호 무시 + 다양성 강화’. 리랭커에서 가중치로 작동.

pref_styles / pref_regions: 합이 반드시 1일 필요는 없지만, 0~1로 정규화하면 튜닝이 용이.

seed_wines: 추천·평가·데모 모두에서 재활용 가능한 핵심 필드.


배운 점


1. 게이트는 기준을 잡는 장치다.
결과가 일정 수준을 넘지 않으면 자동으로 배포가 막히게 해서 실수를 줄인다.


2. adventurousness 값 하나로 추천 결과의 다양성을 조절할 수 있다.

구조가 단순하면서도 효과가 크다.


3. 폴더 역할을 나눠서 처음 해봐서 헤맸지만 유지보수 관리에 좋다고 하니 앞으로도 이렇게 할 생각.

io는 입출력, reco는 계산, pipelines는 실행용으로 구분하니 헷갈리지 않았다.


4. 설정 파일은 코드로 관리하는 게 낫다. 바뀐 내용이 기록으로 남고, 누가 언제 수정했는지도 알 수 있다.


5. 결국 MLOps의 핵심은 자동화와 재현성이다. 언제 돌려도 같은 결과가 나오는 구조가 중요하다.


KakaoTalk_20251005_235806329.jpg

#AI 부트캠프 #커널아카데미 #커널아카데미부트캠프 #커널아카데미AI부트캠프

매거진의 이전글Day 2 | 추석 생존 로그 –작업하고 복습하기