블로그 슬라이드 기능
개요
- 작성한 포스트를 볼 때 가독성이 떨어진다는 느낌을 받았음. h태그 위에 패딩을 추가해봤지만 그래도 아쉬움이 있어서,
슬라이드 형식으로 문맥을 나누어본다면 포스트로 볼 때도 가독성 좋게 작성할 수 있을 것 같아 미뤄뒀던 기능 추가를 하기로 결심하게 됨. - gemini cli을 처음으로 활용해봄.
구현
요구사항
- 기존 포스트 형식의 내용을 그대로 사용해 문맥별로 나눠서 포스트 - 슬라이드 2가지 형식이 모두 유효했으면 좋겠음
- 주소창에 /slide만 붙이면 바로 슬라이드가 보여야 됨.
- 링크 기반으로 슬라이드 페이지가 나뉘면 안 됨. 브라우저 히스토리가 쉽게 더러워지고 뒤로가기가 힘들어진다는 단점을 느낀 경험이 있음.
- 최대한 페이지에 스크롤이 안 나오도록 높이 조절을 해야함. 웹 환경이다보니 슬라이드에 스크롤이 있다고해서 문제될건 없지만 통일성을 부여하고 싶음.
1차 구현
- gemini cli 무료버전을 사용해 슬라이드 형식으로 볼 수 있게 만들어달라고 한 뒤 여러가지 명령을 함.
- 일단 보기좋은 슬라이드 기능이 추가됐음. 근데 코드블럭 크기라든가 테이블, 수식 등 표현에 아쉬움이 있어서 여러번의 시도 끝에
애가 자꾸 내 말을 못 알아 먹어서 아에 갈아엎기로 생각. - 무료버전 토큰도 다 소모해버렸음
2차 구현, gemini cli pro버전
- 좀 더 체계적으로 mdx 문법을 분류하고서 gemini에게 명령하기로 함.
- 슬라이드 생성 방식에 대한 구조를 직접 명령내림.
단계적 슬라이드 생성
- 슬라이드 생성은 기본적으로, mdx 텍스트 일부를 문맥단위로 잘라서 만듦.
- 문맥 단위는 기본적으로 # 헤더 태그 기준
- 슬라이드 생성 단계를 문법 단위로의 원소 구분, 헤더 단위로의 섹션 구분을 통한 원소 모음, 섹션의 내용을 정리한 슬라이드 생성으로 구분지음
원소(문법) 구분
- mdx 문법은 기본 문법, 복합 문법, 순수 html로 구분 후 각 문법별로 원소 처리
- 기본 문법은 한 줄로 표현이 되는, # 헤딩이나 - ul 같은 요소
- 복합 문법은 코드블럭이나 테이블, 이미지, 수식과 같은 높이가 가변적인 요소
- plain html은 <로 시작하는 요소
- 위와 같은 구분으로 mdx파일은 원소단위로 구분지어 저장함.
섹션 구분 및 병합
- 헤더단위로 그 헤더에 속하는 원소들, 하단의 내용들을 전부 합쳐서 하나의 섹션으로 구분 지음
- 특수 규칙: h5
h7 태그들은 섹션이 그 이전 섹션이 병합이 될 수 있음. 즉, h1h4태그의 섹션은 무조건적으로 새 섹션, 슬라이드로 생성되고 h5~h7섹션들은 구조에 따라 하나의 슬라이드로 가중치를 넘지 않는 선에서 병합이 될 수 있음.
슬라이드 분할 및 생성
- 섹션요소들을 가중치 계산 후 가중치를 넘기면 그 다음 슬라이드로 넘어가는 식으로 분할 시킴.
- 현재 복합 원소의 가중치 처리 구현은 미구현 상태임. 각 요소별로(코드블럭, 이미지, 테이블...) 최대 높이를 지정하는 방식으로 개선한 뒤 가중치 부여하고서 처리해야할 것 같음
마무리
- AI가 프로토타입은 아주 잘 생성해줌. 하지만 세부적인 요소들에 대해선 매우 답답할 정도로 작동이 마음에 안 듦.
- ai에 대해 아쉬운 점은, ctrl-z 되돌리기가 불가능함. 세부적인 수치들 수정한 것을 자꾸 스스로 복원, 수정 시킴. 코드 작업 단위 분할을 안 함.
- 시각적인 ui배치 슬라이드 기능을 구현하는 것이지만, 내용 자체는 텍스트 파일 파싱인데 매우 불만족스러운 결과물을 냄. 결국 직접 코드 읽어보면서 직접 구조 설계 후 특정 파싱 부분은 직접 구현하는 등 번거로움이 많았음.
- 그래도 빠르게 슬라이드, 프린트 기능 구현해준 것 자체는 빠르게 잘 만들어줌.
- 복합 원소에 대한 가중치를 구현하기 위해 코드블럭처럼 이미지, 테이블 등에 대한 래퍼 컴포넌트를 만들어 최대 높이를 조절할 수 있도록 해야할 것 같음.