Skip to content

fix: 제목에 괄호가 든 글의 이미지가 발행 때마다 지워지던 문제 수정 - #132

Merged
Wisesaturn merged 3 commits into
v3from
fix/#131
Sep 27, 2026
Merged

Wisesaturn merged 3 commits into
v3from
fix/#131

Conversation

@Wisesaturn

Copy link
Copy Markdown
Owner

Pull Request Type

  • feat: 기능 구현 (새로운 요구사항 구현, 기존 기능 개선)
  • fix: 버그 수정
  • refactor: 코드 리팩토링

    성능 개선, 구조 변경, 기능 수정 없을 때

  • style: 포매팅, 린트 (기능 변화 없음)
  • chore: 환경설정, 패키지 관리, 라이브러리 설치 등
  • docs: 문서 작성

관련 이슈

closes #131

작업 내용

이미지 폴더 이름도 안전한 문자로 바꿔 저장

  • 글 제목으로 만드는 이미지 폴더 이름에서 문자, 숫자, -, _ 만 남기고 나머지를 - 로 바꿉니다. 예를 들어 쌩-npm으로-MFE-구축하기-(1)-:-개념 폴더는 쌩-npm으로-MFE-구축하기-1-개념 이 됩니다.
  • 제목에 괄호가 있으면 발행할 때마다 그 글의 썸네일과 본문 이미지가 모두 지워졌습니다. v3.0.3 에서 파일 이름의 괄호는 고쳤지만, 폴더 이름에 남은 괄호 때문에 남길 파일을 고르는 규칙이 경로를 폴더째 잘랐기 때문입니다.
  • 이미지를 올리는 쪽과 옛 파일을 지우는 쪽이 같은 함수로 폴더를 만들게 해 둘이 다른 폴더를 보지 않게 했습니다. 글 주소와 문서 id 로 쓰는 제목은 바꾸지 않았습니다.
  • 파일 이름과 폴더 이름이 같은 정리 규칙을 씁니다. 공백을 - 로 바꾼 제목에서 - 가 여럿 이어지지 않도록 하나로 합칩니다.

검증

  • spec 10건 추가(toSafePathSegment 7건, getStorageFolder 3건). pnpm test 321건, pnpm typecheck, eslint 통과
  • 올린 파일 주소에서 getStoragePaths 가 꺼낸 경로가 실제 경로와 같은지 MFE 글의 제목으로 확인합니다
  • 머지와 배포 뒤 MFE 글을 다시 발행해 썸네일 주소가 200 을 돌려주는지 확인합니다
  • 괄호가 든 옛 폴더는 지워지지 않고 남습니다

- 📋 작업 내역

  - `features/publish/lib/toSafePathSegment.ts` 추가
    - NFC 정규화 후 문자와 숫자, `-`, `_` 이외의 문자를 `-` 로 바꾸고 이어진 `-` 를 하나로 합친다
  - `features/publish/lib/getStorageFolder.ts` 추가
    - `collection/category/title` 의 각 조각을 `toSafePathSegment` 로 정리해 폴더 경로를 만든다
  - `uploadImage.ts` 와 `deleteStore.ts` 가 `getStorageFolder` 로 같은 폴더를 만든다
  - `toStorageFileName.ts` 의 정리 단계를 `toSafePathSegment` 로 바꿨다
  - spec: `toSafePathSegment` 7건, `getStorageFolder` 3건. 올린 파일의 주소에서 `getStoragePaths` 가 꺼낸 경로가 실제 경로와 같은지 확인한다

- 💡 설계 이유

  - #129 는 파일 이름만 정리했다. 폴더 이름(`title`)은 `spaceToDash` 로 공백만 바뀌어 괄호가 남고, `getStoragePaths` 가 `)` 에서 폴더째 잘라 그 글의 썸네일과 본문 이미지가 발행할 때마다 모두 지워졌다. 운영의 `쌩 npm으로 MFE 구축하기 (1) : 개념` 썸네일이 404 인 것을 확인했다
  - 라우트가 넘기는 `title` 은 Firestore 문서 id 로도 쓰여 바꿀 수 없다. 그래서 Storage 경로를 만드는 곳에서만 정리하고, 올리는 쪽과 지우는 쪽이 어긋나지 않게 한 함수를 함께 쓴다
  - 파일 이름과 폴더 이름이 같은 규칙을 쓰도록 #129 의 치환을 `toSafePathSegment` 로 떼었다. 제목은 공백이 이미 `-` 로 바뀌어 있어 `-(1)-:-` 가 `---` 처럼 이어지므로 연속된 `-` 를 합친다
  - 괄호가 든 옛 폴더는 `deleteStore` 가 새 폴더만 보므로 남는다. 사용자와 확인해 이 이슈 범위에서 뺐다
@vercel

vercel Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
blog Ready Ready Preview Sep 27, 2026 9:16am UTC

@Wisesaturn Wisesaturn added the patch 버전 patch 를 올린다 (수정, 스타일, 리팩토링) label Sep 27, 2026

@Wisesaturn Wisesaturn left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Found 1 issue:

  1. [!NOTE]
    P4. uploadImage.ts 를 고쳤는데 JSDoc 이 아직 @summary 다 (.claude/rules/jsdoc.md says "기존 파일을 고칠 때 그 파일의 @summary 를 함께 바꾼다")

    /**
    * @summary firebase에 image를 업로드하는 함수
    * @param props
    * @returns
    */

    ---
    paths:
    - '**/*.ts'
    - '**/*.tsx'

그 밖에 CLAUDE.md 와 .claude/rules/ 준수, 변경 라인 버그, git 이력(#104, #129)과의 정합, 이전 PR(#105, #130) 리뷰 코멘트, 주석과 @example 의 정확성을 확인했고 문제는 없었다. 세 발행 라우트와 create*.ts 가 uploadImage 와 deleteStore 에 같은 값을 넘기므로 두 쪽의 폴더가 어긋나지 않는다.

참고: 같은 카테고리에서 문장 부호만 다른 두 제목(X (1) 과 X 1)은 문서 id 는 다르지만 Storage 폴더가 같아져, 한쪽을 발행하면 다른 쪽 이미지가 지워질 수 있다. 지금 운영 문서에는 해당 사례가 없다.

- 📋 작업 내역

  - `features/publish/api/uploadImage.ts` 의 `@summary` 를 `@description` 으로 바꾸고, 비어 있던 `@param`, `@returns` 를 채우고 `@throws` 를 추가

- 💡 설계 이유

  - PR #132 코드 리뷰에서 나온 P4. `jsdoc.md` 는 기존 파일을 고칠 때 그 파일의 `@summary` 를 함께 바꾸라고 한다
  - 주소가 비었거나 이미지가 아닌 응답이면 에러를 던지므로 `jsdoc.md` 에 따라 `@throws` 를 적었다
@Wisesaturn
Wisesaturn merged commit e352cea into v3 Sep 27, 2026
3 checks passed
@Wisesaturn
Wisesaturn deleted the fix/#131 branch September 27, 2026 09:17

This branch was successfully deployed

1 active deployment
Preview — be4b2916 Deployed Sep 27, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

patch 버전 patch 를 올린다 (수정, 스타일, 리팩토링)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Storage 폴더 이름에 괄호가 있으면 그 글의 이미지를 모두 지우는 문제가 있다

1 participant