# 업데이트 이력 ## v1.12.29 - 현재 접속자 외 N개 파란색·숫자 굵기 강조 및 여러 페이지일 때만 목록 팝오버 표시 수정. - 전체 인원 중 표시 인원·전체 활성 탭 수 표시와 경과 시간 상한·백그라운드 포함 안내 추가. - 멤버 작성 이력을 게시글·내용·작성일 3열로 정리. - 대시보드 최근 댓글을 제목·내용·작성자·날짜 순서로 정리. - JavaScript 358개 파일 문법·단위 테스트 283건·프로덕션 빌드 검증 진행. - Chromium E2E 12건·API 12건 통과, 기존 미디어 사용처 실패 1건·후속 미실행 1건 유지. ## v1.12.28 - deploy 문서를 상황별 복사·실행 명령어 중심으로 축소. - 일반/DB 포함 재배포·앱 재배포 준비·재시작·환경설정 반영·상태/로그 확인 구분. - 최초 YAML 자동 백업과 실패 시 후속 명령 중단 방식 통일. - 기존 설치·설정·장애 대응 설명을 deploy-reference 문서로 분리. - 명령 블록 9개 셸 구문·대체 실행 순서·최초 백업·실패 중단 3경로·문서 링크 검증 진행. ## v1.12.27 - UGREEN 재배포의 원격 이미지 pull 오류를 기준으로 앱 단독 소스 빌드 안내 정정. - Docker 앱 기준 docker-compose.yaml을 로컬 이미지 실행용으로 관리하고 원격 pull 금지 정책 추가. - 기존 Compose를 docker-compose.build.yml 빌드용으로 분리하고 운영 스크립트를 실행용 yaml 기준으로 정리. - 운영 이미지만 빌드하는 스크립트와 빌드 성공/실패·환경 파일 누락 검증 추가. - 소스 갱신·터미널 이미지 빌드·Docker 앱 재배포 단계 분리 및 NAS 기존 yaml 최초 백업 문서화. - 기본 yaml 선택·두 Compose의 이미지/DB/네트워크/업로드 일치·셸 문법·JavaScript 문법·단위 테스트 283건 검증 진행. ## v1.12.26 - 운영 Compose 기본 프로젝트명을 기존 sori-studio로 고정해 중복 네트워크 생성 충돌 보정. - 마이그레이션·썸네일 백필 운영 스크립트의 docker-compose.yml 파일 지정 추가. - 환경 변수 예시와 sudo·프로젝트명·Compose 파일 지정 기반 운영 배포 명령 정리. - git pull 후 UGREEN 기존 프로젝트의 Compose 구성·재배포를 사용하는 GUI 우선 절차 정리. - 운영 스크립트 Compose 파일·환경 파일 전달을 실제 Docker 대신 대체 실행기로 검증 추가. - Compose 기본/사용자 지정 프로젝트명·기존 외부 DB 볼륨·셸 문법·JavaScript 문법·단위 테스트 280건 검증 진행. ## v1.12.25 - 대시보드 요약·통계·차트·목록 건수에 천 단위 쉼표 표시 적용. - 대시보드 요약·예상 수입·통계 추이·선택 기간 상세·댓글·현재 접속자 순서 정리. - 현재 접속자 한 줄 표시와 최근 페이지 제목 외 N개 요약 추가. - 열린 페이지 최근 확인순·동일 경로 중복 제거·hover/클릭/키보드 팝오버 및 원문 이동 추가. - 접속자 표시 수와 전체 인원을 구분하고 페이지 목록 화면 안 위치 보정 추가. - JavaScript 문법 검사·단위 테스트 276건·프로덕션 빌드·Chromium E2E 12건 검증 진행. ## v1.12.24 - 멤버 작성 글·댓글 탭을 작성한 글 탭 하나로 통합. - 구분·게시글·작성자·작성일·한 줄 내용 표와 전체/댓글/게시글 필터 추가. - 게시글·댓글 통합 최신순 검색·페이지 조회 API와 검색·필터 변경 시 첫 페이지 조회 추가. - 통합 정렬·작성자 격리·종류 필터·검색·페이지 이동 API/E2E 검증 보강. - JavaScript 문법 검사·단위 테스트 273건·프로덕션 빌드·Chromium E2E 11건 검증 진행. - API 통합 검증 11건 통과, 기존 미디어 사용처 검증 실패 1건·후속 미실행 1건 유지. ## v1.12.23 - 대시보드 CSP 관찰 표·조회·자동 갱신 제거. - 대시보드 최근 댓글을 게시글·작성자·시각·한 줄 내용의 작은 목록으로 축소. - 멤버 상세 정보·작성한 글·작성한 댓글 탭 분리. - 회원 작성 글·댓글 전체 이력 최신순 검색·번호형 페이지네이션 추가. - 댓글 내용·게시물 제목 검색과 작성 글 제목·주소·본문 검색 API 추가. - JavaScript 문법 검사·단위 테스트 273건·프로덕션 빌드·Chromium E2E 11건 검증 진행. - API 통합 검증 11건 통과, 기존 미디어 사용처 검증 실패 1건·후속 미실행 1건 유지. ## v1.12.22 - 관리자 멤버 상세에 최신순 댓글·답글 목록과 서버 페이지네이션 추가. - 관리자 대시보드 최근 댓글 5개·30초 갱신·작성자 및 게시물 이동 추가. - 관리자 게시글 목록의 기존 댓글 수를 별도 열로 이동. - 관리자 댓글 API 인증·조건 검증·페이지·답글·게시글 댓글 수 회귀 검증 추가. - JavaScript 문법 검사·단위 테스트 273건·프로덕션 빌드·Chromium E2E 11건 검증 진행. - API 통합 검증 10건 통과, 미디어 카탈로그 사용처 검증 1건 실패·후속 1건 미실행 기록. ## v1.12.21 - 관리자 미디어 다중 선택 테두리·이동 개수 드래그 미리보기·폴더 드롭 강조와 안내 추가. - 폴더 이동 중·완료·실패 피드백, 드래그 취소 정리와 외부 드롭 무시 처리 추가. - 폴더·탭·필터·페이지 전환 시 로딩 표시, 이전 목록 숨김, 조회 실패 재시도 추가. - 현재 페이지 전체 선택에 사용 중인 항목 포함, 선택 상태를 유지한 새 폴더 생성 지원 추가. - CSP 관찰 목적·HTTPS 출처 관찰 한계 안내 및 최근 관찰 항목의 누적 횟수 표기 수정. - 관리자 미디어 다중 드래그·취소·이동 실패·조회 지연·재시도·전체 선택 E2E 회귀 검증 추가. - 기존 E2E 로그인 버튼 선택자를 현재 화면에 맞추고 초기 로드 대기 보강. - JavaScript 문법 검사·단위 테스트 273건·격리 DB의 Chromium E2E 10건·프로덕션 빌드 검증 진행. ## v1.12.20 - UGREEN Docker 앱 Compose 편집기의 boolean 스키마 검사에 맞춰 PostgreSQL 외부 볼륨 `external` 값을 리터럴 `true`로 고정. ## v1.12.19 - NAS Docker 앱 재배포가 기존 앱 이미지를 재사용하지 않도록 앱 서비스 이미지 이름과 `pull_policy: build` 선언 추가. - GUI 재배포가 `docker compose up`만 실행하더라도 Compose가 앱 이미지를 다시 빌드하도록 배포 설정 보강. ## v1.12.18 - 공개 회원 관리자 권한 판별을 `is_admin`과 `user_role` owner/admin 기준으로 통일. - 소유자 role 계정도 공개 헤더 `사이트 관리` 링크와 공개 로그인 관리자 세션 발급 대상에 포함되도록 수정. - 운영 PostgreSQL 고정 볼륨을 외부 볼륨으로 선언해 NAS Docker 앱의 프로젝트명 불일치 경고를 정리. ## v1.12.17 - 공개 헤더 사용자 메뉴에 관리자 권한 회원용 `사이트 관리` 링크 추가. - 공개 관리자 계정 로그인 시 관리자 세션을 함께 발급하고, 기존 공개 세션만 있는 관리자도 `/admin` 진입 시 관리자 세션으로 승격하도록 수정. - 공개 로그아웃 시 관리자 세션도 함께 삭제하도록 정리. ## v1.12.16 - 운영 PostgreSQL 볼륨 이름을 `POSTGRES_VOLUME_NAME` 기본값 `soristudio_sori-studio-postgres`로 고정해 Compose 프로젝트명 변경 시 새 빈 DB 볼륨이 붙지 않도록 수정. - 배포 문서에 운영 DB 볼륨 확인 명령과 init 스크립트 재실행 경고 추가. ## v1.12.15 - Buildx 설치 후 기본 `docker-compose.yml` 배포를 사용하도록 NAS 이미지 실행 우회 Compose 제거. - UGREEN NAS Docker 앱 Buildx 설치 확인 절차를 배포 문서에 정리. ## v1.12.14 - NAS 이미지 실행용 Compose가 로컬 앱 이미지 누락 시 Docker Hub pull을 시도하지 않도록 `pull_policy: never` 추가. - NAS Docker 앱에서 가져온 이미지 태그와 `SORI_STUDIO_IMAGE`를 맞추는 절차 문서화. ## v1.12.13 - UGREEN NAS Docker 앱에서 Buildx 없이 가져온 앱 이미지를 실행할 수 있도록 `docker-compose.nas.yml` 추가. - NAS Docker 앱 Buildx 경고 우회용 로컬 이미지 빌드·가져오기 배포 절차 문서화. ## v1.12.12 - UGREEN NAS Docker 앱 배포에서 `--env-file` 없이 Compose를 실행해도 PostgreSQL 환경 변수 치환 경고가 뜨지 않도록 DB 서비스 중복 환경 변수 선언 제거. - NAS Docker 앱 GUI 배포 시 `.env.production` 배치 기준 문서화. ## v1.12.11 - CSP Report-Only 차단 출처 정규화에서 빈 값과 특수 scheme을 `unknown`과 분리. - `about:`, 브라우저 확장 프로그램 scheme, 빈 blocked-uri 분류 테스트 추가. ## v1.12.10 - CSP 관찰 요약에 지시어별 외부 origin 허용 후보 계산 추가. - 관리자 대시보드 `CSP 관찰` 표에 허용 후보 표시 추가. - CSP 허용 후보 계산 단위 테스트 추가. ## v1.12.9 - 관리자 대시보드에 CSP Report-Only 위반 관찰 표 추가. - CSP 위반 집계 조회용 관리자 API 추가. - CSP 관찰 TODO를 운영 보고 확인 단계로 좁히고 관련 문서 갱신. ## v1.12.8 - 콘텐츠 세션 원장 보관 기간을 방문자 해시와 동일한 32일 유지로 확정. - 통계 콘텐츠 세션 원장 후속 개선 TODO 완료 처리. - 배포 문서의 통계 데이터 보관 정책에 `analytics_content_sessions` 32일 보관 기준 추가. ## v1.12.7 - 관리자 통계 추이 차트의 버킷별 평균 체류와 50% 스크롤 도달 지표를 콘텐츠 세션 원장 우선 계산으로 보정. - 원장 데이터가 없는 차트 버킷은 기존 일별 누적 집계 값을 유지하도록 fallback 정리. ## v1.12.6 - 관리자 인기 게시물 목록의 읽음·평균 체류·스크롤 지표를 콘텐츠 세션 원장 우선 계산으로 보정. - 관리자 인기 페이지 목록의 평균 체류·스크롤 지표를 콘텐츠 세션 원장 우선 계산으로 보정. - 인기 콘텐츠 순위와 조회수는 기존 일별 집계를 유지하고 부가 참여 지표만 원장 기준으로 교체하도록 정리. ## v1.12.5 - 관리자 대시보드 요약·선택 기간 상세의 평균 체류와 50% 스크롤 도달 지표를 콘텐츠 세션 원장 우선 계산으로 보정. - 게시물·페이지별 통계 상세의 기간 요약 지표를 콘텐츠 세션 원장 우선 계산으로 보정. - 콘텐츠 세션 원장 보관 범위 밖의 기간은 기존 일별 누적 집계로 fallback하도록 정리. ## v1.12.4 - 통계 수집에 콘텐츠 단위 세션 원장 `analytics_content_sessions` 추가. - 공개 pageview/read/heartbeat 이벤트에 라우트 진입 단위 `contentSessionId` 전송 추가. - heartbeat 체류·스크롤 증분 계산을 실시간 세션이 아니라 콘텐츠 세션 기준으로 분리. - 실시간 접속 세션에 현재 콘텐츠 세션 해시를 저장해 페이지 이동 시 접속 유지·스크롤 표시가 이전 콘텐츠 값에 끌리지 않도록 수정. - 관리자 대시보드 현재 접속자 목록에 공개 페이지 새 창 바로가기 버튼 추가. ## v1.12.3 - Google 로그인 연동 해제 시 `NOT NULL` Google 프로필 컬럼을 `NULL`이 아니라 빈 문자열로 초기화하도록 수정. ## v1.12.2 - 회원 설정 화면의 Google 계정 연결 완료 상태를 읽기 전용 배지로 변경. - 회원 설정 화면에서 Google 계정 다시 연결 버튼과 불필요한 안내 문구 제거. - 관리자 멤버 상세 화면에 Google 로그인 연동 상태 표시 추가. - 소유자 권한으로 관리자 멤버 상세에서 Google 로그인 연동을 해제하는 API와 확인 모달 추가. ## v1.12.1 - Google 계정 로그인과 기존 계정 Google 연동 흐름 추가. - `users` 테이블에 Google OAuth 식별자·이메일·이름·프로필 이미지·연결 시각 컬럼을 추가하는 `071_users_google_oauth.sql` 마이그레이션 추가. - 일반 로그인 화면과 관리자 로그인 화면에 Google 로그인 버튼 추가. - 회원 설정 화면에 Google 계정 연결 상태와 연결 버튼 추가. - Google OAuth redirect 내부 경로 보정 테스트 추가. - Google OAuth 환경 변수와 redirect URI 등록 절차 문서화. - 로컬 개발 DB에 `071_users_google_oauth.sql` 마이그레이션 적용 확인. ## v1.12.0 - v1.11 내부 개선 구간을 마감하고 관리 버전을 `1.12.0`으로 상향. - `docs/update.md`를 v1.11 이후 최신 작업 중심으로 축소하고 v1.10 이하 상세 이력을 `docs/update-archive.md`로 분리 보관. - v1.11 개발 구간 방문자용 업데이트 로그 `docs/update-log/v1.12.md` 작성. - 문서 구조 정리 TODO 완료 처리. ## v1.11.128 - `sharp`를 `0.35.3`으로 업데이트하고 `tar`·`brace-expansion` 전이 의존성을 `overrides`로 보안 패치 버전에 고정. - 게시물 카드·본문·페이지 커버 WebP 파생 이미지 생성 스모크 테스트 추가. - 운영 의존성 `npm audit` 취약점 0건 확인. ## v1.11.127 - 미디어 카탈로그 조회 모드에서 전환 관찰용 `shadow` 모드 제거. - 관리자 미디어 목록 API의 비동기 shadow 비교 로그와 비교 요약 코드 정리. - `MEDIA_CATALOG_MODE` 허용값을 `filesystem`·`database`로 축소하고 모드 정규화 단위 테스트 추가. ## v1.11.126 - 관리자 Markdown 에디터의 미디어 삽입 적용 실행을 `useAdminMarkdownMediaActions` composable로 분리. - 에디터 컴포넌트는 미디어 선택·업로드 상태와 블록 삽입 콜백만 주입하고, 일반 이미지·갤러리·활성 갤러리·슬래시 대기 줄 삽입과 업로드 후 목록 갱신은 composable에 위임하도록 정리. - 미디어 액션 composable의 일반 삽입, 활성 갤러리 추가, 슬래시 줄 교체, 업로드 삽입, 업로드 중 차단, 모달 업로드 토스트 단위 테스트 추가. ## v1.11.125 - 관리자 Markdown 에디터의 소스 선택 편집 실행을 `useAdminMarkdownSourceActions` composable로 분리. - 에디터 컴포넌트는 선택 상태와 textarea 선택 적용 콜백만 주입하고, 선택 교체·블록 삽입·인라인 링크·감싸기·줄 삭제 실행은 composable에 위임하도록 정리. - 소스 선택 액션 composable의 선택 교체, 블록 삽입, 인라인 감싸기·링크, 줄 변환, 코드 블록 삽입, 선택 줄 삭제 단위 테스트 추가. ## v1.11.124 - 관리자 Markdown 에디터의 첫 본문 포커스와 히스토리 복원 후 포커스 실행을 `useAdminMarkdownEditorFocusActions` composable로 분리. - 에디터 컴포넌트는 textarea·미리보기 포커스 실행 콜백만 주입하고, 모드별 포커스 대상 계산과 첫 줄 보정은 composable에 위임하도록 정리. - 첫 포커스 줄 계산, 작성/라이브 첫 블록 포커스, 히스토리 복원 선택·오프셋 복원 단위 테스트 추가. ## v1.11.123 - 관리자 Markdown 에디터의 슬래시 명령 적용 실행을 `useAdminMarkdownSlashCommandActions` composable로 분리. - 에디터 컴포넌트는 슬래시 명령 실행 시 줄 교체·미디어 모달·textarea 선택·미리보기 포커스 콜백만 주입하도록 정리. - 슬래시 미디어 명령, 작성 모드 줄 삽입, 라이브 모드 포커스 예약, 후보 없음 종료, 취소 억제 단위 테스트 추가. ## v1.11.122 - 관리자 Markdown 에디터의 슬래시 메뉴 위치 계산·스크롤 리스너·하이라이트 스크롤 후처리를 `useAdminMarkdownSlashMenuPosition` composable로 분리. - 에디터 컴포넌트는 슬래시 메뉴 상태와 명령 실행 흐름만 유지하고, 미리보기·소스 모드 메뉴 좌표 갱신은 composable에 위임하도록 정리. - 슬래시 메뉴 위치 갱신, 노출 상태별 리스너 등록·해제, 하이라이트 항목 스크롤, 검색어·명령 수 변경 감시 단위 테스트 추가. ## v1.11.121 - 관리자 Markdown 에디터의 라이브 미리보기 갤러리·이미지·문단 이벤트 적용 실행을 `useAdminMarkdownPreviewActions` composable로 분리. - 에디터 컴포넌트는 미리보기 이벤트 핸들러 계산·적용 로직을 직접 갖지 않고, 본문 ref·줄 교체·포커스 실행 함수만 주입하도록 정리. - 미리보기 액션 composable의 갤러리 순서 변경, 이미지 삭제, 슬래시 미디어 지연 commit 무시, fenced 블록 교체, 삽입 후 포커스, 줄 삭제·병합 단위 테스트 추가. ## v1.11.120 - 관리자 Markdown 에디터의 오른쪽 블록 패널 옵션 적용 실행을 `useAdminMarkdownBlockActions` composable로 분리. - 에디터 컴포넌트는 활성 블록·본문 값·포커스 실행 함수만 주입하고 이미지·갤러리·임베드·콜아웃·코드·토글·인라인 색상 적용 함수를 composable에서 받아 쓰도록 정리. - 블록 패널 액션 composable의 이미지 너비 저장, 파일명 캡션, 갤러리 fallback, 소스·라이브 인라인 색상 적용 단위 테스트 추가. ## v1.11.119 - 관리자 Markdown 에디터의 라이브 미리보기 갤러리·이미지·문단 이벤트 결과 계산을 `markdown-editor-preview-blocks` helper로 분리. - 에디터 컴포넌트는 미리보기 이벤트 payload를 helper에 전달하고 계산된 Markdown 값만 반영하도록 정리. - 미리보기 블록 helper의 갤러리 병합·삽입·삭제·분리, 문단 추가·삽입·삭제·병합 단위 테스트 추가. ## v1.11.118 - 관리자 Markdown 에디터의 라이브 미리보기 DOM 접근·현재 source line 계산·상단 스크롤·전체 선택·줄 포커스 실행을 `useAdminMarkdownPreviewFocus` composable로 분리. - 에디터 컴포넌트는 미리보기 표면 ref만 주입하고 라이브 포커스 실행 함수를 재사용하도록 정리. - 미리보기 포커스 composable의 표면 위임·현재 줄 계산·상단 스크롤 단위 테스트 추가. ## v1.11.117 - 관리자 글쓰기 오른쪽 블록 패널에서 단일 이미지 표시 너비 변경 이벤트의 `imageIndex`와 `patch`가 사이드바를 거치며 누락되던 문제 수정. - 이미지 표시 너비 선택 시 본문 마크다운에 `{size=숫자}` 옵션이 다시 저장되도록 이벤트 전달 보정. - 블록 패널 다중 인자 이벤트 전달 회귀 테스트 추가. ## v1.11.116 - 관리자 Markdown 에디터의 이미지·갤러리·임베드·인용·콜아웃·코드·토글 옵션 변경 계산을 `markdown-editor-block-options` helper로 분리. - 에디터 컴포넌트는 블록 옵션 변경 결과를 줄 범위 교체 계획으로 적용하고, 실제 문자열 조립 책임을 제거. - 블록 옵션 helper의 미디어 교체, 캡션 사용, 갤러리 이동·추가, fenced 옵션, 인라인 색상 단위 테스트 추가. ## v1.11.115 - 관리자 Markdown 에디터의 블록 설정 패널 표시 상태·포커스 유지·IME 조합 중 직전 컨텍스트 유지·인라인 색상 패널 우선순위를 `useAdminMarkdownBlockPanel` composable로 분리. - 에디터 컴포넌트는 패널 상태를 직접 계산하지 않고 활성 줄·본문·인라인 색상 선택 계산 함수만 주입하도록 정리. - 블록 패널 표시, 인라인 색상 우선순위, IME 컨텍스트 유지, 라이브 줄 포커스, 패널 닫기 단위 테스트 추가. ## v1.11.114 - 관리자 Markdown 에디터의 textarea 높이 동기화·거터 줄 높이 측정·선택 기억·줄 포커스·스크롤 실행을 `useAdminMarkdownTextareaFocus` composable로 분리. - 에디터 컴포넌트는 textarea DOM 참조와 블록/슬래시 상태 동기화 콜백만 주입하도록 정리. - textarea 선택 기억, 커서 줄 갱신, 지정 줄 포커스, 선택 복원 단위 테스트 추가. ## v1.11.113 - 관리자 Markdown 에디터의 작성/라이브 모드 전환 포커스 대기 상태와 복원 순서를 `useAdminMarkdownFocusBridge` composable로 분리. - 에디터 컴포넌트는 textarea·라이브 편집 줄 DOM 조작 콜백만 제공하고, pending 포커스 상태 직접 관리를 제거. - 포커스 브리지의 작성→라이브, 라이브→작성, 기본 복원, 예약 포커스 단위 테스트 추가. ## v1.11.112 - 관리자 Markdown 에디터의 슬래시 명령 적용 후 미디어 모달·줄 삽입·포커스 대상 판단을 `markdown-slash-commands` helper로 분리. - 에디터 컴포넌트는 계산된 효과 계획에 따라 본문 교체, 모달 열기, DOM 포커스 복원만 실행하도록 정리. - 슬래시 명령 효과 계획의 미디어 실행·모드별 포커스 대상 단위 테스트 추가. ## v1.11.111 - 관리자 Markdown 에디터의 미디어 라이브러리 조회와 업로드 실행 흐름을 `useAdminMarkdownMediaPicker` composable로 이동. - 에디터 컴포넌트는 업로드 결과를 본문에 삽입하는 책임만 유지하도록 미디어 요청 중복 함수 정리. - 미디어 선택 composable의 서버 목록 조회, 업로드 후 선택 상태 갱신, 업로드 한도 초과 단위 테스트 추가. ## v1.11.110 - 관리자 Markdown 에디터에서 일치하는 슬래시 명령이 없는 `/ㄴㅇ` 같은 입력이 Enter 줄바꿈을 막던 문제 수정. - 슬래시 메뉴 키보드 이벤트는 표시할 명령 후보가 있을 때만 Enter·방향키를 가로채도록 보정. - 슬래시 명령 후보 없음·키보드 가로채기 조건 단위 테스트 추가. ## v1.11.109 - 관리자 Markdown 에디터에서 `/` 슬래시 메뉴를 ESC로 닫은 뒤 줄 내용을 바꾸고 다시 `/`를 입력해도 메뉴가 다시 열리지 않던 문제 수정. - 슬래시 메뉴 취소 억제 기준을 줄 번호만이 아니라 취소 당시 줄 내용까지 함께 보도록 보강. - 슬래시 메뉴 억제 상태 단위 테스트 보강. ## v1.11.108 - 관리자 Markdown 에디터의 미디어 목록 조회 query 생성과 업로드 FormData·응답 파일 해석 규칙을 `markdown-editor-media` helper로 분리. - 붙여넣기·드롭 이미지 파일 필터링과 단일/갤러리 업로드 삽입 대상 계산을 helper로 정리. - 미디어 업로드 helper 단위 테스트 추가. ## v1.11.107 - 관리자 Markdown 에디터의 미디어 선택 모달 상태·검색어·페이지·선택 상태·표시 계산을 `useAdminMarkdownMediaPicker` composable로 분리. - 선택한 미디어를 슬래시 줄·단일 이미지·갤러리·미디어 블록으로 적용하는 계획을 `markdown-editor-media` helper로 분리. - 미디어 선택 composable과 선택 미디어 삽입 계획 단위 테스트 추가. ## v1.11.106 - 관리자 Markdown 에디터의 슬래시 명령 적용 판단을 `markdown-slash-commands` helper로 분리. - 에디터 컴포넌트에는 미디어 모달 열기, 줄 교체, 포커스 복원 같은 실제 UI 적용 책임만 남기도록 정리. - 슬래시 명령 적용 계획의 미디어·줄 삽입·무효 입력 단위 테스트 추가. ## v1.11.105 - 관리자 Markdown 에디터의 코드 펜스 범위·본문 줄 판별과 라이브 전환 포커스 대상 보정 계산을 `markdown-editor-focus` helper로 분리. - 에디터 컴포넌트에는 라이브/소스 모드 전환 시 실제 DOM 포커스·스크롤 적용 책임만 남기도록 정리. - 코드 펜스 범위, 닫히지 않은 코드 블록, 콜아웃·토글·인용 옵션 줄 포커스 보정 단위 테스트 추가. ## v1.11.104 - 관리자 Markdown 에디터의 소스 textarea 선택·치환·인라인 감싸기·링크 삽입·줄 변환 계산을 `markdown-source-selection` helper로 분리. - 에디터 컴포넌트에는 textarea 포커스·스크롤 복원 책임만 남기고, 본문 문자열 변경 결과와 다음 선택 위치 계산은 순수 함수로 이동. - 소스 선택 helper의 줄 오프셋, 선택 치환, 블록 조각 삽입, 인라인 링크, 줄 변환·삭제 단위 테스트 추가. ## v1.11.103 - 관리자 Markdown 에디터의 undo/redo 스택·기록 그룹화·복원 중 상태 관리를 `useAdminMarkdownHistory` composable로 분리. - 히스토리 복원 후 textarea·라이브 편집 포커스 복원 콜백은 에디터 컴포넌트에 남겨 DOM 책임과 상태 책임을 분리. - 히스토리 기록, undo/redo 복원, 빠른 입력 그룹화, undo 보관 개수 제한 단위 테스트 추가. ## v1.11.102 - 공개 Markdown 렌더러의 라이브 인용 블록 커밋·아래 이탈·일반 문단 복귀 이벤트를 `useContentMarkdownQuotes` composable로 분리. - 렌더러 안에 남아 있던 미사용 인용 줄 단위 편집 함수와 원본 블록 줄 helper를 제거. - 인용 composable의 옵션 선언 줄 보존, `>. ` 접두 정리, 아래 문단 삽입, 일반 문단 복귀 단위 테스트 추가. - v1.11 내부 개선 todo에서 완료된 공개 Markdown 렌더러 편집 이벤트 분리 항목 제거. ## v1.11.101 - 공개 Markdown 렌더러의 라이브 목록 번호 계산·항목 커밋·Enter 분기 이벤트를 `useContentMarkdownLists` composable로 분리. - 빈 목록 마커 판별 유틸을 보정해 `- `, `1. ` 같은 빈 목록 줄의 문단 탈출 처리를 안정화. - 목록 composable의 순서 목록 번호 유지, 항목 커밋, 중간 분리, 빈 마커 탈출, 아래 문단 삽입, 원문 모드 단위 테스트 추가. - v1.11 내부 개선 todo에서 완료된 목록 편집 이벤트 분리 범위를 제외하고 남은 블록 이벤트 범위를 인용으로 재정리. ## v1.11.100 - 공개 Markdown 렌더러의 라이브 문단·스페이서 편집 이벤트와 문단 Enter 단축 변환을 `useContentMarkdownParagraphs` composable로 분리. - 문단 composable의 여러 줄 커밋, 인용 변환, 일반 분리, 코드·콜아웃 단축 변환 단위 테스트 추가. - v1.11 내부 개선 todo에서 완료된 문단 편집 이벤트 분리 범위를 제외하고 남은 블록 이벤트 범위를 목록·인용으로 재정리. ## v1.11.99 - 공개 Markdown 렌더러의 코드·콜아웃·토글 fenced 블록 편집 이벤트를 `useContentMarkdownFencedBlocks` composable로 분리. - fenced 블록 composable의 코드·콜아웃·토글 아래 문단 삽입 단위 테스트 추가. - v1.11 내부 개선 todo에서 완료된 fenced 블록 편집 이벤트 분리 범위를 제외하고 남은 블록 이벤트 범위를 재정리. ## v1.11.98 - 공개 Markdown 렌더러의 라이브 선택·포커스 복원·line focus/blur·원문 편집 표시 상태를 `useContentMarkdownLiveSelection` composable로 분리. - 라이브 선택 composable의 포커스 요청, 예약 포커스 초기화, line focus/blur 전달 단위 테스트 추가. - v1.11 내부 개선 todo에서 완료된 공개 렌더러 상태 분리 범위를 제외하고 남은 작업을 더 좁게 정리. ## v1.11.97 - 공개 Markdown 렌더러의 라이브 단일 이미지·갤러리 드래그 상태와 이벤트 중개를 `useContentMarkdownImageDrag` composable로 분리. - 단일 이미지 병합, 갤러리 삽입, 갤러리 순서 변경, 갤러리 이미지 분리 삽입 단위 테스트 추가. ## v1.11.96 - 공개 Markdown 렌더러의 본문 파싱·제목 ID·인아티클 광고 삽입 렌더 블록·하단 삽입 줄·라이트박스 대상 목록 계산을 `useContentMarkdownBlocks` composable로 분리. - 공개 Markdown 블록 계산 composable의 제목 ID, 광고 삽입 제외, 하단 삽입 줄 단위 테스트 추가. ## v1.11.95 - 공개 Markdown 렌더러의 이미지 라이트박스 상태·좌우 이동·ESC 닫기·전역 키보드 이벤트 관리를 `useContentMarkdownLightbox` composable로 분리. - 라이트박스 키보드 이벤트 중복 연결 방지와 닫힘 시 해제 동작 단위 테스트 추가. ## v1.11.94 - 관리자 Markdown 에디터의 슬래시 메뉴 상태·억제 줄·키보드 탐색 타이머 관리를 `useAdminMarkdownSlashMenu` composable로 분리. - 관리자 Markdown 에디터의 전역 키보드 단축키 판별을 `markdown-editor-keyboard` helper로 분리. - 슬래시 메뉴 상태 관리와 에디터 Cmd/Ctrl 조합, undo/redo, 작성/미리보기 전환, 미디어 선택 닫기 단축키 단위 테스트 추가. ## v1.11.92 - 관리자 Markdown 에디터의 슬래시 메뉴 키보드 입력 동작 판별을 `markdown-slash-commands` helper로 분리. - 슬래시 메뉴 방향키·Enter·Escape 동작 분류 단위 테스트 추가. ## v1.11.91 - 관리자 Markdown 에디터의 슬래시 메뉴 방향키 순환 인덱스 계산을 `markdown-slash-commands` helper로 분리. - 슬래시 메뉴 방향키 위·아래 순환 단위 테스트 추가. ## v1.11.90 - 관리자 Markdown 에디터의 슬래시 메뉴 하이라이트 인덱스 보정을 `markdown-slash-commands` helper로 분리. - 슬래시 메뉴 하이라이트 범위 보정 단위 테스트 추가. ## v1.11.89 - 관리자 Markdown 에디터의 슬래시 메뉴 제외 줄 Set 갱신을 `markdown-slash-commands` helper로 분리. - 슬래시 제외 줄 추가·제거 단위 테스트 추가. ## v1.11.88 - 관리자 Markdown 에디터의 미디어 슬래시 action → 미디어 선택 모달 종류 변환을 `markdown-slash-commands` helper로 분리. - 슬래시 미디어 action 변환 단위 테스트 추가. ## v1.11.87 - 관리자 Markdown 에디터의 슬래시 명령 textarea 커서 복원 계산을 `markdown-slash-commands` helper로 분리. - 슬래시 명령 단일 줄·여러 줄 삽입 후 textarea 선택 위치 단위 테스트 추가. ## v1.11.86 - 관리자 Markdown 에디터의 슬래시 메뉴 상태 초기화 로직을 `clearLiveSlashState`로 통합. - 소스·라이브 슬래시 입력 종료 경로의 상태 정리 방식을 일관되게 정리. ## v1.11.85 - 관리자 Markdown 에디터의 슬래시 메뉴 선택 항목 스크롤 계산을 `markdown-slash-menu-scroll` helper로 분리. - 슬래시 메뉴 선택 항목의 위·아래 스크롤 보정 단위 테스트 추가. ## v1.11.84 - 관리자 Markdown 에디터의 슬래시 메뉴 재배치 이벤트 리스너를 안정적인 참조로 정리. - 슬래시 메뉴 닫힘·컴포넌트 해제 시 window/편집 표면 scroll·resize 리스너가 제거되도록 보강. ## v1.11.83 - 관리자 Markdown 에디터의 슬래시 메뉴 뷰포트 위치 보정 계산을 `markdown-slash-menu-position` helper로 분리. - 슬래시 메뉴 위치 보정 단위 테스트를 추가해 아래·위·좌우 경계 동작을 고정. ## v1.11.82 - 관리자 Markdown 에디터의 라이브 미리보기 표면을 `AdminMarkdownPreviewSurface` 컴포넌트로 분리. - 미리보기 DOM·라이브 편집 메서드 접근을 컴포넌트 노출 메서드로 정리해 에디터 부모 파일의 렌더링 책임 축소. ## v1.11.81 - 관리자 Markdown 에디터의 소스 작성 표면(textarea·라인 번호·업로드 배지)을 `AdminMarkdownWriteSurface` 컴포넌트로 분리. - 작성 표면 DOM 접근을 컴포넌트 노출 메서드로 정리해 부모 편집 로직과 UI 렌더링 경계 분리. ## v1.11.80 - 관리자 Markdown 에디터의 작성/미리보기 모드 전환 버튼과 업로드 상태 배지를 하위 컴포넌트로 분리. - 미디어 선택 모달 업로드 애니메이션 스타일을 실제 모달 컴포넌트로 이동해 scoped style 연결 정리. ## v1.11.79 - 관리자 Markdown 에디터의 슬래시 명령 메뉴 UI를 `AdminMarkdownSlashMenu` 컴포넌트로 분리. - 슬래시 메뉴 위치 보정·키보드 선택 스크롤을 유지하도록 메뉴 DOM 참조 연결 정리. ## v1.11.78 - 관리자 Markdown 에디터의 미디어 선택 모달 UI를 `AdminMarkdownMediaPickerModal` 컴포넌트로 분리. - 미디어 선택 페이지 번호 보정 helper 추가 및 단위 테스트 보강. ## v1.11.77 - 관리자 Markdown 에디터 미디어 선택 적용 버튼 상태 계산을 공통 helper로 분리. - 미디어 선택 적용 버튼 상태 단위 테스트 추가. ## v1.11.76 - 관리자 Markdown 에디터 미디어 선택 라이브러리의 빈 상태 문구 계산을 공통 helper로 분리. - 미디어 선택 빈 상태 문구 단위 테스트 추가. ## v1.11.75 - 관리자 Markdown 에디터 미디어 선택 대상별 모달 제목 계산을 공통 helper로 분리. - 미디어 선택 대상별 제목 계산 단위 테스트 추가. ## v1.11.74 - 관리자 Markdown 에디터 미디어 선택 대상별 accept·API kind·다중 선택 여부·업로드 안내 문구 계산을 공통 helper로 분리. - 미디어 선택 대상별 입력·안내 계산 단위 테스트 추가. ## v1.11.73 - 관리자 Markdown 에디터 미디어 선택 모달의 기본 페이지네이션 상태 생성과 API 응답 정규화 로직을 공통 helper로 분리. - 미디어 선택 응답 정규화 단위 테스트 추가. ## v1.11.72 - 관리자 Markdown 에디터 미디어 선택 모달의 페이지 범위 문구와 페이지 번호·말줄임 항목 계산을 공통 helper로 분리. - 미디어 선택 페이지네이션 helper 단위 테스트 추가. ## v1.11.71 - 관리자 Markdown 에디터 미디어 업로드 API 오류 메시지 변환과 파일 개수·총량·개별 크기 한도 검증 로직을 공통 helper로 분리. - 미디어 업로드 오류 메시지와 업로드 한도 검증 단위 테스트 추가. ## v1.11.70 - 관리자 Markdown 에디터 미디어 선택 모달의 선택 순서·단일/갤러리 선택 토글·선택 URL 기반 항목 해석 로직을 공통 helper로 분리. - 미디어 선택 상태 토글과 선택 항목 해석 단위 테스트 추가. ## v1.11.69 - 관리자 Markdown 에디터의 미디어 선택 모달 종류 판별·대상별 선택 가능 여부·미리보기 URL·업로드 MIME 판별·미디어 블록 생성 로직을 공통 helper로 분리. - 미디어 선택 helper의 파일 크기 표시·종류 판별·파생 썸네일 제외·fenced 미디어 블록 생성 단위 테스트 추가. ## v1.11.68 - 관리자 Markdown 에디터의 히스토리 항목 생성·본문 값 추출·선택 범위 보정 로직을 공통 helper로 분리. - 에디터 undo/redo 히스토리의 레거시 문자열 항목과 선택 범위 보정 단위 테스트 추가. ## v1.11.67 - 관리자 Markdown 에디터의 슬래시 명령 미디어 액션 판별·지연 commit 무시·명령 줄 교체 삽입 로직을 공통 helper로 분리. - 슬래시 명령 파싱·미디어 액션·포커스 대상·미디어 삽입 줄 교체 단위 테스트 추가. ## v1.11.66 - 라이브 작성 모드에서 오른쪽 코드 블록 설정의 줄번호 토글을 누르면 패널이 닫히는 문제 수정. - 라이브 작성 모드 `/image` 미디어 명령 실행 후 원래 `/image` 텍스트 줄이 남을 수 있는 문제 수정. ## v1.11.65 - 소스 작성 모드에서 한글 IME 조합 입력 중 현재 줄이 블록 밖인데도 직전 콜아웃·갤러리 패널이 유지되는 문제 수정. ## v1.11.64 - 소스 작성 모드에서 목록 입력 직후 블록 설정 패널이 이전 갤러리·코드 블록 컨텍스트를 표시하지 않도록 textarea 최신 본문 기준으로 패널 컨텍스트를 판별. ## v1.11.63 - 관리자 코드 블록 설정의 언어 입력을 chevron이 있는 공통 셀렉트 UI로 변경. - 코드 블록 줄번호 표시 컨트롤을 게시물 설정과 같은 ON/OFF 토글 UI로 통일. - 소스 작성 모드에서 목록 첫 글자 입력 중 이전 코드 블록 패널이 남지 않도록 커서 줄 갱신 타이밍을 즉시 처리하도록 수정. ## v1.11.62 - 관리자 콜아웃 블록 설정 패널 내부 포인터 조작 중에는 포커스 이탈로 패널이 닫히지 않도록 수정. - 콜아웃 아이콘 표시가 꺼진 상태에서는 아이콘 입력·프리셋 영역을 비활성화하고 흐리게 표시하도록 수정. ## v1.11.61 - 관리자 콜아웃 블록 설정의 아이콘 표시 컨트롤을 게시물 설정과 같은 ON/OFF 토글 UI로 통일. - 콜아웃 아이콘 미사용 상태에서도 아이콘 입력·프리셋 선택이 즉시 아이콘 표시를 켜고 적용되도록 수정. ## v1.11.60 - 브라우저 BFCache에 들어가거나 뒤로가기로 복원되는 공개 문서에서 전환 베일 상태를 즉시 정리하도록 수정. - HTML 문서 페이지 이동 후 뒤로가기로 블로그 화면에 돌아올 때 로딩 오버레이가 남는 회귀를 방지. ## v1.11.59 - 사용자 iframe 렌더링에서 `allowfullscreen`을 DOM 속성으로 중복 출력하지 않고 `allow`의 `fullscreen` 권한으로 정규화해 브라우저 경고를 줄임. - 공개 번호형 페이지네이션의 현재 페이지를 브랜드 포인트 배경색으로 표시해 활성 페이지 구분을 강화. - iframe 속성 정규화 단위 테스트를 추가. ## v1.11.58 - 공개 전환 베일 시작 조건을 정리해 `/posts?page=2`에서 `/posts?page=3`처럼 같은 path의 query만 바뀌는 페이지네이션 이동에서는 베일을 켜지 않도록 수정. - 사이트 라우트 전환 베일 판별 helper와 단위 테스트를 추가. - 게시물 목록 페이지네이션 클라이언트 이동 무한 로딩 회귀를 방지. ## v1.11.57 - 공개 사이트 설정 조회를 `usePublicSiteSettings` composable로 통합해 Nuxt `site-settings-public` async data 옵션 충돌 경고를 제거. - HTML 블록 렌더러의 `sanitize-html` 정적 import를 서버 전용 동적 import로 바꿔 브라우저 번들 유입을 차단. - `/posts?page=2` SSR 응답과 게시물 페이지 API 응답, 프로덕션 빌드에서 페이지네이션 회귀를 확인. ## v1.11.56 - 공개 Markdown 렌더러의 라이트박스 이미지 목록과 갤러리 행 분할 계산을 `lib/content-gallery-images.js`로 분리. - 단일 이미지·갤러리 이미지 `lightboxKey` 생성과 갤러리 3열 행 분할 단위 테스트를 추가. - `ContentMarkdownRenderer`는 라이트박스 상태와 갤러리 이벤트 연결에 집중하도록 정리. ## v1.11.55 - 공개 Markdown 렌더러의 본문 이미지 표시·라이트박스·srcset·갤러리 sizes 계산을 `lib/content-image-urls.js`로 분리. - 업로드 원본 이미지의 body-720/body-1600/body-2560 파생 URL 선택과 외부 이미지 fallback 단위 테스트를 추가. - `ContentMarkdownRenderer`는 이미지 렌더링 상태와 이벤트 연결에 집중하도록 정리. ## v1.11.54 - 공개 Markdown 렌더러의 블록 파싱 로직을 `lib/markdown-block-parser.js`로 분리. - 제목·문단·이미지·fenced 블록·인용·목록·코드·표 변환 단위 테스트를 추가. - 토글 블록의 기본 펼침 상태가 파서 결과에 보존되도록 정리. ## v1.11.53 - 관리자 블록 컨텍스트의 fenced 블록 시작·종료 줄 탐색 helper를 `lib/markdown-fenced-meta.js`로 통합. - fenced 블록 시작·종료 탐색과 닫힘 표식 경계 단위 테스트를 추가. - `markdown-block-context`는 활성 블록 종류별 컨텍스트 조립에 집중하도록 정리. ## v1.11.52 - 관리자 블록 컨텍스트의 인용 줄 판별·옵션 파싱 중복을 `lib/markdown-quote.js` 공통 helper로 통합. - 인용 블록 설정 패널이 받는 `quoteBackground`·옵션 존재 여부 컨텍스트 단위 테스트를 추가. - 공개 렌더러와 관리자 블록 설정 패널의 인용 옵션 해석 경로를 맞춤. ## v1.11.51 - 공개 Markdown 렌더러의 인용 줄 판별·옵션 파싱·편집 줄 변환 helper를 `lib/markdown-quote.js`로 분리. - 인용 옵션 선언과 라이브 편집 중 `>. ` 접두 정리 단위 테스트를 추가. - `ContentMarkdownRenderer`는 인용 블록 생성과 편집 이벤트 연결만 담당하도록 정리. ## v1.11.50 - 공개 Markdown 렌더러의 인아티클 광고 삽입 위치 계산을 `lib/content-in-article-ad.js`로 분리. - 본문 길이별 광고 목표 위치와 문단 후보 판별 단위 테스트를 추가. - `ContentMarkdownRenderer`는 광고 코드 표시 여부와 렌더 블록 삽입 연결만 담당하도록 정리. ## v1.11.49 - 공개 Markdown 렌더러의 fenced 블록 본문 수집과 북마크·회원가입·미디어 메타 파싱을 `lib/markdown-fenced-meta.js`로 분리. - fenced 블록 닫힘 표식 처리와 메타 필드 파싱 단위 테스트를 추가. - `ContentMarkdownRenderer`는 fenced 블록 파싱 결과를 블록 데이터로 연결하는 책임만 남기도록 정리. ## v1.11.48 - 공개 Markdown 렌더러의 표 행·구분선·정렬·블록 파싱 helper를 `lib/markdown-table.js`로 분리. - 표 파싱 단위 테스트를 추가해 정렬과 이스케이프된 파이프 문자 처리를 회귀 확인. - `ContentMarkdownRenderer`는 표 렌더링 데이터 소비에 집중하도록 내부 파싱 책임을 축소. ## v1.11.47 - 관리자 미디어 화면의 대표 이미지·페이지 커버·본문 이미지 재생성 상태와 API 호출을 `useAdminMediaThumbnailRegeneration` composable로 분리. - 썸네일 생성 가능 여부 판별과 생성 중 URL 상태를 한 경로에서 관리하도록 정리. - 미디어 화면은 재생성 버튼 이벤트 연결만 담당하도록 축소. ## v1.11.46 - 관리자 미디어 화면의 상세 모달 렌더링을 `AdminMediaDetailModal` 컴포넌트로 분리. - 미디어 미리보기·파일 정보·사용 현황·폴더 입력·파일명 입력·썸네일 생성 버튼 표시 책임을 하위 컴포넌트로 이동. - 미디어 화면은 선택 항목 상태와 다운로드·저장·삭제·재생성 이벤트 연결만 담당하도록 정리. ## v1.11.45 - 관리자 미디어 화면의 그리드 카드 목록 렌더링을 `AdminMediaGrid` 컴포넌트로 분리. - 미디어 카드 썸네일·선택 체크·사용처 개수·상태 배지·영상 썸네일 표시 책임을 하위 컴포넌트로 이동. - 미디어 화면은 목록 데이터 계산과 선택·드래그·상세 열기·이미지 fallback 이벤트 연결만 담당하도록 정리. ## v1.11.44 - 관리자 미디어 화면의 폴더 사이드바 렌더링을 `AdminMediaFolderPanel` 컴포넌트로 분리. - 라이브러리 폴더 트리와 대표·본문·프로필 이미지 탭 안내 패널 표시 책임을 하위 컴포넌트로 이동. - 미디어 화면은 폴더 목록 계산·선택·드롭·삭제·생성 액션 연결만 담당하도록 정리. ## v1.11.43 - 관리자 게시물 폼의 우측 설정 패널 렌더링을 `AdminPostSettingsSidebar` 컴포넌트로 분리. - Post URL·상태·발행 시각·요약·태그·노출 토글·작성 통계·삭제 버튼 표시 책임을 하위 컴포넌트로 이동. - 게시물 폼은 설정 패널 상태와 태그 입력 ref·블록 패널 이벤트 연결만 담당하도록 정리. ## v1.11.42 - 관리자 게시물 폼의 발행·예약·발행취소 상태 판별과 모달 상태를 `useAdminPostPublishState` composable로 분리. - 발행 시각 datetime-local 변환·예약 날짜 입력·발행취소 표시 문구 계산을 한 경로로 정리. - 게시물 저장 payload 생성은 폼에 유지하면서 발행 상태 관리 책임을 축소. ## v1.11.41 - 관리자 게시물 폼의 대표 이미지 선택·검색·페이지네이션·업로드 로직을 `useAdminFeaturedImagePicker` composable로 분리. - 대표 이미지 모달 상태와 미디어 API 조회 흐름을 게시물 폼 외부에서 관리하도록 정리. - 글쓰기 폼의 스크립트 책임을 줄이고 대표 이미지 선택 UI 연결만 남김. ## v1.11.40 - 관리자 게시물 폼의 태그 파싱·추천·선택·삭제 로직을 `useAdminPostTags` composable로 분리. - 태그 입력 상태·키보드 처리·추천 목록 메타 계산을 게시물 폼 외부에서 관리하도록 정리. - 태그 입력 동작은 유지하면서 글쓰기 폼의 스크립트 책임을 축소. ## v1.11.39 - 어나운스 바 설정 정규화·스냅샷 복사·변경 비교 로직을 `lib/admin-announcement-settings-section.js`로 분리. - 설정 화면의 어나운스 바 편집 시작·취소·저장 로직을 공통 helper 기반으로 정리. - 설정 저장 payload의 어나운스 바 설정 필드 정규화를 한 경로로 통합. ## v1.11.38 - 브랜드 설정 정규화·스냅샷 복사·변경 비교 로직을 `lib/admin-brand-settings-section.js`로 분리. - 설정 화면의 브랜드 컬러 입력 정규화와 편집 시작·취소·저장 로직을 공통 helper 기반으로 정리. - 설정 저장 payload의 브랜드 설정 필드 정규화를 한 경로로 통합. ## v1.11.37 - 스팸 필터 설정 정규화·스냅샷 복사·변경 비교 로직을 `lib/admin-spam-settings-section.js`로 분리. - 설정 화면의 스팸 필터 textarea 변환과 편집 시작·취소·저장 로직을 공통 helper 기반으로 정리. - 설정 저장 payload의 스팸 필터 필드 정규화를 한 경로로 통합. ## v1.11.36 - SNS 설정 정규화·스냅샷 복사·변경 비교 로직을 `lib/admin-social-settings-section.js`로 분리. - 설정 화면의 SNS 편집 시작·취소·저장 로직을 공통 SNS 설정 helper 기반으로 정리. - 설정 저장 payload의 SNS 설정 필드 정규화를 한 경로로 통합. ## v1.11.35 - POST 설정 정규화·스냅샷 복사·변경 비교 로직을 `lib/admin-post-settings-section.js`로 분리. - 설정 화면의 POST 설정 시작·취소·저장 로직을 공통 POST 설정 helper 기반으로 정리. - 설정 저장 payload의 POST 설정 필드 정규화를 한 경로로 통합. ## v1.11.34 - 관리자 설정의 블로그 제목·설명 카드에서 POST 설정에 속한 업로드 제한 입력을 제거. - 업로드 제한 표시·편집 위치를 POST 설정 카드로 단일화. - 설정 화면에서 블로그 제목·설명 카드로 전달하던 업로드 제한 선택지 props를 제거. ## v1.11.33 - 관리자 설정 내비게이션 검색·필터·스크롤 스파이 상태를 `useAdminSettingsNavigation` composable로 분리. - 설정 화면의 좌측 내비 구역 정의와 활성 구역 계산 로직을 페이지 컴포넌트에서 제거. - 설정 화면은 composable에서 받은 상태와 이벤트를 내비게이션 컴포넌트에 연결하도록 정리. ## v1.11.32 - 관리자 설정의 단순 섹션 저장 흐름을 `saveSimpleSettingsSection` 헬퍼로 정리. - 제목·사이트 정보·메인 화면·사이트 코드·광고 슬롯의 스냅샷 복사·복원·저장 후 편집 종료 반복 로직을 필드 목록 기반으로 통합. - 설정 화면의 카드 상태 로직을 이후 composable로 분리하기 쉽도록 공통 저장 경로를 정리. ## v1.11.31 - 관리자 설정 좌측 내비게이션을 `AdminSettingsNavigation` 컴포넌트로 분리. - 설정 검색 입력·검색 결과 목록·모바일 구역 선택 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 검색 상태·활성 구역 계산·스크롤 이동 처리만 담당하도록 정리. ## v1.11.30 - 관리자 설정의 메인 화면 카드를 `AdminHomeCoverSettingsCard` 컴포넌트로 분리. - 라이트·다크 커버 미리보기·드롭존·파일 선택·오버레이 문구 입력 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 메인 화면 편집 상태·저장 요청·커버 업로드 처리만 담당하도록 정리. ## v1.11.29 - 관리자 설정의 SNS 정보 카드를 `AdminSocialSettingsCard` 컴포넌트로 분리. - 관리자 설정의 어나운스 바 카드를 `AdminAnnouncementSettingsCard` 컴포넌트로 분리. - 설정 화면은 SNS·어나운스 바 편집 상태와 저장 요청만 담당하도록 정리. ## v1.11.28 - 관리자 설정의 사이트 정보 카드를 `AdminSiteInfoSettingsCard` 컴포넌트로 분리. - 로고 미리보기·로고 파일 선택·사이트 URL·저작권 문구 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 사이트 정보 편집 상태·저장 요청·로고 업로드 처리만 담당하도록 정리. ## v1.11.27 - 관리자 설정의 블로그 제목·설명 카드를 `AdminTitleDescriptionSettingsCard` 컴포넌트로 분리. - 제목·설명 읽기 행, 편집 입력, 공개 화면 미리보기 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 제목·설명 편집 상태·저장 요청·스냅샷 복원만 담당하도록 정리. ## v1.11.26 - 관리자 설정의 POST 설정 카드를 `AdminPostSettingsCard` 컴포넌트로 분리. - 수정일 표시·태그 최대 개수·공개 목록 표시개수·업로드 제한 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 POST 설정 편집 상태·저장 요청·스냅샷 복원만 담당하도록 정리. ## v1.11.25 - 관리자 설정의 브랜드 컬러 카드를 `AdminBrandSettingsCard` 컴포넌트로 분리. - 브랜드 컬러 읽기 미리보기·색상 입력·텍스트 입력·예시 배지 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 브랜드 컬러 정규화·편집 상태·저장 요청만 담당하도록 정리. ## v1.11.24 - 관리자 설정의 스팸 필터 카드를 `AdminSpamSettingsCard` 컴포넌트로 분리. - 가입 금지 닉네임 읽기·편집 textarea·저장 버튼 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 스팸 필터 편집 상태·저장 요청·값 정규화만 담당하도록 정리. ## v1.11.23 - 관리자 설정의 최근 게시물 내보내기 작업 목록을 `AdminPostExportJobList` 컴포넌트로 분리. - Export 작업 상태·진행도·실패 상세·파일 선택·다운로드 버튼 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면에서 더 이상 사용하지 않는 Export 파일 용량 포맷 함수를 제거. ## v1.11.22 - 관리자 설정의 게시물 내보내기 요청 카드를 `AdminPostExportRequestCard` 컴포넌트로 분리. - Export 범위·연도·월·직접 날짜·분할 옵션·요청 버튼 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 Export 요청 body 생성·작업 등록·작업 목록 갱신만 담당하도록 정리. ## v1.11.21 - 관리자 설정의 게시물 가져오기 카드를 `AdminPostImportCard` 컴포넌트로 분리. - Import ZIP 파일 input·드롭존·작업 센터 버튼·적용 버튼 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 Import 파일 검증·작업 생성 요청·작업 모달 연결만 담당하도록 정리. ## v1.11.20 - 관리자 설정의 사이트 용량 카드를 `AdminBackupSummaryCard` 컴포넌트로 분리. - 사이트 용량 콘텐츠·파일 용량 포맷팅과 행 계산 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 사이트 용량 데이터 조회·새로고침 이벤트 연결만 담당하도록 정리. ## v1.11.19 - 관리자 설정의 게시물 가져오기 작업 센터 모달을 `AdminPostImportJobModal` 컴포넌트로 분리. - Import 작업 상태 라벨·진행률·게시물별 행 렌더링 책임을 설정 화면에서 하위 컴포넌트로 이동. - 설정 화면은 Import 작업 선택·새로고침·삭제 이벤트 연결만 담당하도록 정리. ## v1.11.18 - 게시물 Import를 단일 요청 처리에서 DB job 기반 백그라운드 작업으로 전환. - 관리자 설정의 게시물 가져오기에 작업 센터 모달 추가. - Import 작업 센터에서 게시물별 대기·진행중·완료·스킵·오류 상태와 진행률 표시. - Import 작업 원본 ZIP을 작업 폴더에 보관하고 완료·실패 작업 삭제 시 함께 제거하도록 추가. - Import 참조 자산 누락 시 게시물을 생성하지 않고 해당 게시물 행을 오류로 남기도록 수정. - 서버 시작·주기 확인 시 대기 중이거나 중단된 Import 작업 재개 처리 추가. - 작업용 `_import-jobs` ZIP 경로가 공개 업로드 라우트에서 제공되지 않도록 차단. ## v1.11.17 - 게시물 Import에서 이미 같은 slug가 있는 게시물은 새 slug로 복제하지 않고 건너뛰도록 수정. - Import 재시도 시 건너뛴 게시물의 자산은 다시 저장하지 않고, 같은 ZIP 자산 또는 같은 해시의 기존 저장 파일은 재사용하도록 보완. - 관리자 게시물 가져오기 UI에 진행 중 안내와 가져옴·건너뜀·신규 자산·재사용 자산 결과 요약 추가. ## v1.11.16 - 태그 추천 연속 선택, 관리자 미디어 파생 탭 역할 배지, 단일 이미지 `{size=}` 표시 너비 회귀를 확인하는 Playwright E2E 테스트 추가. - 단일 이미지 너비 테스트는 공개 게시물 화면과 관리자 글쓰기 미리보기 화면을 함께 검증하도록 구성. ## v1.11.15 - 관리자 설정 화면의 업로드 제한·SNS 아이콘·공개 표시개수·게시물 내보내기 범위 select를 공용 `AdminSelectInput`으로 정리. - 설정 화면 select 옵션을 `{ value, label }` 구조로 모아 반복 마크업과 chevron SVG 중복 제거. ## v1.11.14 - 관리자 멤버 고급 필터의 필드·조건·상태 선택 입력을 공용 `AdminSelectInput` 기준으로 정리. - 멤버 필터 필드 변경 시 조건·값 초기화 동작을 유지하면서 select 마크업 중복 제거. ## v1.11.13 - 게시물 Export frontmatter에 대표 이미지 본문 상단 표시 여부(`show_featured_image`) 추가. - 기존 Export ZIP Import 시 `show_featured_image`가 없어도 기본값 `false`로 게시물을 생성하도록 수정. ## v1.11.12 - 관리자 팝오버 표면 스타일을 공용 `AdminPopoverSurface` 컴포넌트로 분리. - 글쓰기 태그 추천, 게시글 태그 필터, 페이지 섹션 추천, 멤버 작업 메뉴, 행 더보기 메뉴의 반복 border·shadow·radius 마크업 정리. ## v1.11.11 - 관리자 일반 모달 오버레이·패널을 공용 `AdminModalFrame` 컴포넌트로 분리. - 미디어 폴더 생성과 네비게이션 생성·페이지 섹션·페이지 순서·추천 사이트 편집 모달의 반복 wrapper 제거. ## v1.11.10 - 관리자 페이지네이션 계산 로직을 `lib/admin-pagination.js` 순수 함수로 분리. - 관리자 페이지네이션 페이지 보정·ellipsis 계산 단위 테스트 추가. ## v1.11.9 - 관리자 공용 select 입력이 숫자 옵션 값을 보존하도록 보완. - 관리자 미디어 표시 개수 select를 공용 `AdminSelectInput`으로 교체. - 관리자 미디어 종류·사용 상태 필터를 공용 `AdminFilterPillGroup` 컴포넌트로 분리. ## v1.11.8 - 관리자 목록 select 입력을 공용 `AdminSelectInput` 컴포넌트로 분리. - 게시글·페이지 목록의 상태·추천·노출·정렬 필터 select 마크업과 chevron 중복 제거. ## v1.11.7 - 관리자 목록 검색 입력을 공용 `AdminSearchInput` 컴포넌트로 분리. - 게시글·페이지·미디어·멤버 목록의 검색 입력 마크업과 IME 이벤트 연결 중복 제거. ## v1.11.6 - 관리자 번호형 페이지네이션을 공용 `AdminPagination` 컴포넌트로 분리. - 게시글 목록과 미디어 목록의 페이지 버튼 계산·렌더링 중복 제거. ## v1.11.5 - 관리자 토스트 표시 마크업을 공용 `AdminToast` 컴포넌트로 분리. - 관리자 화면별 반복 토스트 클래스와 상태 표시 DOM을 `AdminToast` 사용으로 통일. ## v1.11.4 - 관리자 게시글 목록 행 메뉴를 공용 `AdminRowMoreMenu`와 `useAdminRowMenu` 기준으로 통일. - 게시글 목록의 중복 행 메뉴 위치 계산·Teleport 렌더링 로직 제거. ## v1.11.3 - v1.11 내부 개선 TODO 추가. - 현재 코드에서 참조되지 않는 구형 `AdminBlockEditor.vue` 제거. - 파일-화면 매핑 문서를 현재 구현 기준 표현으로 정리. - v1.11 내부 개선 TODO에서 구형 블록 에디터 검토 항목 완료 처리. - 게시글 작성·수정, 페이지 작성·수정, 태그 목록, 사이트 설정 토스트를 공용 `useAdminToast` 기준으로 통일. ## v1.11.2 - 관리자 미디어 `카드 썸네일` 탭 명칭을 `대표 이미지`로 변경. - 관리자 미디어 파생 탭 전환 중 본문·카드 역할 배지가 잠깐 나타나는 표시 문제 수정. ## v1.11.1 - 관리자 글쓰기 태그 추천 선택 후 남은 후보 목록이 유지되도록 수정. ## v1.11.0 - 블로그 게시용 업데이트 기록 `v1.11` 초안 작성(v1.10 개발 구간 정리). - 관리 버전을 `1.11.0`으로 올리고 이후 패치는 `1.11.1`부터 진행하도록 기준점 정리. - v1.10.88까지의 품질·보안·미디어 카탈로그 database 전환 내용을 minor 릴리스로 마감. - `docs/update-log` v1.0~v1.11을 방문자 체감 중심으로 재작성. 관리자·내부 절차·광고/수익 안내 제거. - update-log 작성 기준을 `docs/convention.md`에 추가. - v1.1~v1.11 서두를 `안녕하세요. sori.studio입니다.` 형태로 통일하고 `조금 늦게 정리하는`·`이번 업데이트에서는` 반복 문구를 정리. - v1.1~v1.11 하단 `한 줄 요약` 제거(서두 요지와 중복). - update-log 각 버전에 minor(`.0`) 릴리스 날짜 추가. - update-log 제목을 `sori.studio vX.Y 업데이트 — {짧은 요약}` 형식으로 변경. ## 이전 이력 - v1.10 이하 상세 작업 이력은 [docs/update-archive.md](./update-archive.md)에서 보관한다.