2026-09-11 ServiceOn Blog 작업일지입니다. 오늘은 27건의 작업을 진행했습니다.

다음 작업 (기억)

현상/기능

  • 앞으로 진행할 사항을 기억해놔

작업

  • 미착수. 메일 해지는 n8n `7p6KtUGdcYAOnJfv` HTML 하단. 광고는 사용자 ca-pub만

페이지 (구독 15항목 + 메일 발송)

현상/기능

  • 구독 메일 발송 포함 15가지를 순서대로 실행

작업

  • 관리자 `/subscribers` 목록·중지·삭제·지금 발송, 대시보드 오늘 호/장·구독자·Working 수
  • 웹 구독 API 속도제한·이메일검사·허니팟, 푸터 수집 안내, `/unsubscribe?token=`
  • `sitemap.xml` / `robots.txt` / `rss.xml` / OG / 404·error, 카드 `uniquePostsByTitle`
  • 업로드: `BLOB_READ_WRITE_TOKEN` 있으면 Vercel Blob, 없으면 `public/uploads`
  • `ThemeInitScript` type 고정, 미사용 삭제, `pnpm test` (shared)
  • n8n `SO-블로그 구독 메일` (`7p6KtUGdcYAOnJfv`) 매일 09:00 Asia/Seoul + 관리자 웹훅 발행
  • UI: n8n-워크플로우
  • 운영 배포는 main 푸시 CI. 이번 작업은 커밋하지 않음
  • AdSense ID는 만들지 않음 (`NEXT_PUBLIC_ADSENSE_CLIENT` 있을 때만 로드)

n8n (Working 파이프라인 발행)

현상/기능

  • Working n8n이 꺼져 있음을 켜고, 나머지 추가/수정 내용을 순서대로 표로 정리

작업

  • `SO-블로그 파이프라인-working` (n8n-워크플로우) 발행
  • `activeVersionId`: `2da1cfd8-8c1a-49ef-a725-1f291c56fd8e`
  • 매일 07:00 Asia/Seoul 스케줄 활성. 뉴스 파이프라인은 미변경
  • UI: n8n-워크플로우

페이지 (매거진 바로가기·푸터 저작권)

현상/기능

  • IT·AI 소식으로 / 구독 / 카드 덱으로 버튼도 삭제
  • SubscribePanel 구독 버튼 옆 안내에 copyright 를 넣는다

작업

  • `MagazineArticle`: 하단 바로가기 3버튼 제거
  • `SubscribePanel`: 구독 버튼 옆을 `© 2026 ServiceOn` 으로 표시
  • `SiteFooter`: 아래쪽 중복 copyright 제거

페이지 (푸터 구독)

현상/기능

  • 매거진 화면을 열면 하단에 이미지와 같은 구독 기능이 있는데 이를 foot 로 옮기고 기존 foot 의 구독은 삭제, copy right 는 옮기 구독 기능 밑으로 보낸다

작업

  • `SiteFooter`: 매거진형 `SubscribePanel` → 그 아래 © 2026 ServiceOn
  • `MagazineArticle`: 본문 하단 구독 카드 제거. 구독 버튼은 `#subscribe`
  • `SubscribePanel`: compact(기존 푸터) 분기 삭제

페이지 (달력 데이터 있는 날)

현상/기능

  • 뉴스, working 데이터가 있으면 달력의 해당일을 좀 더 잘 표시
  • 특히 선택해 일자는 데이터가 있으나 없으나 똑같다

작업

  • `DateCalendar`: 글 있는 날은 옅은 앰버+점. 선택+데이터는 이너링+어두운 점
  • `DateStrip`: 같은 규칙. 선택일도 점이 사라지지 않음
  • `getCalendarMarkRange`: 달력 점용 날짜 범위. 홈은 IT·AI+Working 합침

페이지 (헤더 메뉴 선택)

현상/기능

  • 프로젝트, working 를 클릭해도 IT,AI소식 항목이 계속 선택되어 있다

작업

  • `MainNav`의 `navFocus`(ai_news)는 `/posts/[id]` 에서만 IT·AI 소식을 켠다
  • 프로젝트·Working 등 다른 경로에서는 레이아웃에 남은 포커스를 쓰지 않음

페이지 (매거진 관련 뉴스 제목)

현상/기능

  • "관련 뉴스는 아래 카드에서 이어서 볼 수 있습니다." 이 항목은 무조건 이미지 밑으로 나오게 하고 오늘의 요약과 같은 스타일로 변경한다
  • 오늘의 요약과 함께 앞에 아이콘을 추가한다

작업

  • 관련 뉴스를 `h2.magazine-related-news`로 표시. `clear: both`로 이미지 아래 고정
  • 오늘의 요약·관련 뉴스 h2 앞에 아이콘(책 / 신문). 번호는 없음

페이지 (매거진 오늘의 요약·광고)

현상/기능

  • 매거진에 "01 오늘의 요약" 을 "오늘의 요약"으로 수정하고
  • 광고칸이 2개 있는데 상위 광고칸을 오늘의 요약 위로 옮긴다

작업

  • `오늘의 요약` h2에 `magazine-today-summary` — CSS 번호(01) 숨김
  • n8n-워크플로우: 오늘의 요약이 있으면 그 앞에 인아티클 광고. 하단 출처 앞 광고는 그대로

페이지 / n8n (매거진 관련 뉴스 링크)

현상/기능

  • 9/10 호에는 "관련 뉴스는 아래 카드에서 이어서 볼 수 있습니다." 뉴스 링크가 있고 9/11 호에는 없다. 만들 때 빠지는 것 같다
  • 뉴스링크에 영문이 있으면 한글로 변경해서 링크를 추가해라

작업

  • `attachMagazineRelatedNews`: 오늘의 요약 앞에 관련 뉴스 ul을 넣고, 영문 앵커는 카드 한글 제목으로 교체
  • `MagazineArticle` / `posts/[id]`: 같은 날 카드(제목 중복 제외, 최대 10)를 `newsLinks`로 전달
  • n8n `SO-블로그 파이프라인`: Validate가 문구 없으면 목록을 붙이고, `Attach Related News`가 한글 카드 제목으로 다시 고정

페이지 (매거진 본문 이미지)

현상/기능

  • 매거진에 이미지가 너무 크게 들어간다. 1/4 로 줄여보이게 하고 이미지와 글자가 어울리게 표현
  • 너무 작은 것 같다. 지금 상태에서 2배 정도 키워줘

작업

  • `.post-content-magazine` 이미지(요약 그림·단독 img·figure)를 열 폭 50%로 왼쪽 배치
  • 본문 문단이 이미지 옆을 감싸고, 다음 h2는 아래부터 시작
  • 카드 본문 이미지 스타일은 변경하지 않음

페이지 (구독 저장)

현상/기능

  • 구독을 누르면 메일이 저장되고 "구독신청되었습니다. 매일 아침 9시에 blog 소식을 보내드리겠습니다." 메시지를 보여준다
  • 메일 저장은 별도의 저장이 필요하다

작업

  • `POST /api/subscribe` 가 이메일을 소문자로 저장 (중복이면 재활성화)
  • `SubscribePanel` 성공 문구를 요청 문장으로 표시. 매일 9시 발송 자체는 미구현

페이지 (구독 안내 문구)

현상/기능

  • 구독 버튼 옆에 구독하면 매일 9시에 blog 뉴스를 발송한다는 메시지 추가

작업

  • `SubscribePanel` 구독 버튼 옆: 구독하면 매일 9시에 블로그 뉴스를 발송합니다

페이지 (푸터 메뉴·구독)

현상/기능

  • foot 에 메뉴는 빼고, 매뉴부분에 구독기능을 옮겨

작업

  • `SiteFooter` 내비(홈/소식/Working/구독/serviceon.kr) 제거
  • 메뉴가 있던 자리에 `SubscribePanel` compact + 저작권

페이지 (Working 프로젝트 바로 가기)

현상/기능

  • working 에서 프로젝트 선택하면 바로 밑에 프로젝트 링크가 나오는데 프로젝트 링크 앞에 "프로젝트 바로 가기 " 를 넣고 화살표가 깜빡거리게 한다

작업

  • `HistoryClient` 선택 프로젝트 카드 위에 `프로젝트 바로 가기 →` 링크
  • `globals.css.animate-working-go-blink` 로 화살표 점멸

Working (프로젝트·날짜 일지)

현상/기능

  • working 등록시 프로젝트별-날짜별 하나로 만들어야 한다
  • 파일을 읽어서 업무 내용을 읽어서 일지쓰듯이 작성한다
  • SO-블로그 파이프라인(ID) 같은 n8n ID는 안 나오게, SO-블로그 파이프라인(n8n-워크플로우) 로 표시

작업

  • 로컬 `history:sync`: 프로젝트·날짜당 일지 1건, `history-day://{slug}/{date}`
  • n8n Working `Parse History Files` 동일. 뉴스 파이프라인은 미변경, 미발행
  • `sanitizeN8nWorkflowIds`: 워크플로 ID → (n8n-워크플로우)
  • Working 전체 칩은 프로젝트별 일지를 보여 줌. `history-day://all` 카드는 정리

페이지 (홈 공유링크 카테고리)

현상/기능

  • 공유링크도 앞에 카테고리 추가

작업

  • `HomeBoard` CompactShareLink 제목 앞에 `categoryName` 표시

페이지 (홈 Working 프로젝트명)

현상/기능

  • working 은 앞에 어떤 프로젝트 인지 앞에 표시

작업

  • 홈 Working 미리보기는 하루 종합 카드를 빼고 프로젝트별 최근 4건
  • `HomeBoard` Working 행 제목 앞에 `getProjectName` 표시

페이지 (홈 2×2 칸 제목)

현상/기능

  • 소식, 공유링크 등 타이틀을 좀더 표나게 변경

작업

  • `HomeBoard` 칸 제목: text-base/lg, extrabold, --ink, 하단 구분선

페이지 (홈 2×2 행 간격)

현상/기능

  • 공유링크 리스트와 소식 항목 리스트 간격을 같게. 공유링크가 좁아 하단이 남음

작업

  • `HomeBoard` CompactPostLink / CompactShareLink 행을 `min-h-14` 로 맞춤
  • 공유링크 부제 타이포를 소식 날짜 줄과 동일하게

페이지 (홈 2×2 보드 배치)

현상/기능

  • 홈 2×2 위치를 소식·공유링크 / 프로젝트·Working 순서로 변경

작업

  • `HomeBoard` 칸 순서: 1×1 IT·AI 소식, 1×2 공유링크, 2×1 프로젝트, 2×2 Working

페이지 (RootLayout 테마 스크립트)

현상/기능

  • Console Error: Encountered a script tag while rendering React component ( ThemeInit)

작업

  • `ThemeInitScript`: 서버는 `text/javascript`, 클라 하이드레이션은 `text/plain`
  • FOUC 방지 동작은 유지. 인라인 `<script>` 직접 렌더 경고 제거

페이지 (홈 2×2 보드)

현상/기능

  • 홈 2×2 Working 칸은 가장 최근 4건. 다른 칸들도 4건

작업

  • `HOME_BOARD_PREVIEW_COUNT = 4`
  • Working은 선택일과 무관하게 `dev_history` 최근 4편 (하루 카드 우선)
  • IT·AI / 프로젝트 / 공유링크도 각 칸 4건

페이지 (Working / 프로젝트)

현상/기능

  • blog 내 모든 '포트폴리오'를 '프로젝트'로 변경하고 /portfolio 를 /project 로 변경
  • working 페이지의 프로젝트와 /project 항목을 서로 일치
  • working에서 전체 이외 프로젝트 선택 시 /project 카드가 바로 아래 표시

작업

  • 공개 웹 메뉴·홈 보드·카드·상세 문구를 프로젝트로 변경. 경로 `/project`, `/project/[id]`
  • `/portfolio` → `/project` 영구 리다이렉트
  • `listProjectPortfolios` 로 Working 칩과 공개 카드 순서를 맞춤
  • Working에서 칩 선택 시 해당 `PortfolioCard` 를 칩 아래에 표시
  • 관리자 포트폴리오 폼에 Working 프로젝트 연결 셀렉트 추가 (관리자 메뉴명은 유지)
  • 기존 미연결 카드(집합 운동의 한계를 넘다)는 공개 목록에서 제외

n8n 워크플로우 (SO-블로그 파이프라인 / World of AI)

현상/기능

  • https://intheworldofai.com/archive 여기 정보도 blog IT/AI 소식으로 수집하고 싶다

작업

  • 새 워크플로 없음. `SO-블로그 파이프라인`(n8n-워크플로우)에 `HTTP - World of AI` 추가
  • 목록: `/p/` 카드. 본문: `content-blocks`. Merge 입력 7개
  • 당일(KST) 기사만 기존 `Filter Today Tech News`로 통과
  • 발행함. 매일 06:00부터 수집
  • Schedule Trigger 수동 실행 #84 성공(13분). World of AI 목록 8건 → 당일 1건 `GPT-7 BEL LEAKS` 카드 upsert (`de69e208-…`, 제목 `GPT-7 추정 보도의 핵심`)

n8n 워크플로우 (SO-블로그 파이프라인-working)

현상/기능

  • 원소스파일이 자동으로 연동되지 않아서 working 을 만들지 못하고 있다
  • PC 가 꺼져있으면 소용이 없다. n8n 에서 git 에 접근해서 파일을 읽고 작업 가능한가
  • 'SO-블로그 파이프라인-working' 이라는 워크플로우를 만들었다. 여기에 작업을 진행
  • 자격증명 넣었다
  • pulseup 은 pulseup2 로 대체 한다. pulseup 은 사용하지 않는다. blog 에 이름은 pulseup 으로 그대로 둔다
  • blog 의 interior 는 PinPoint 로 변경.(git 은 그대로 interior)
  • blog에 CineEcho 추가 하고 해당 git 도 워크플로우에 추가한다
  • blog 에 komng chat, htmltohwpx 도 삭제

작업

  • 새 워크플로 n8n-워크플로우 에 GitHub → Working 동기화 구성. 뉴스 파이프라인은 미수정
  • 매일 07:00 Asia/Seoul + Manual. 원격: ServiceOn_Blog, PulseUp2, pinpoint, Ruga, CineEcho
  • 원본 `history-sync://` 와 하루 카드 `history-day://` 를 MariaDB에 upsert
  • `GitHub account`(`githubApi`) 를 `Get History File`에 연결. Set raw `jsonOutput` 은 문자열로 수정
  • Manual 실행 82 성공: 파일 4개, upsert 739건(project 4 / raw 561 / day 174)
  • `history-day://all/2026-09-10` 카드 확인됨. 워크플로는 아직 unpublished
  • Shopify Auto 는 로컬 동기화만. Kmong Chat / htmltohwpx 는 블로그에서 제거
  • PulseUp 표시이름/슬러그(`pulseup`) 유지. Git 소스는 `CJungHwi/PulseUp2`만 사용. 예전 `CJungHwi/PulseUp` 미사용
  • `scripts/history-sources.json`에 `repo: CJungHwi/PulseUp2` 명시. 로컬 폴더명은 그대로 PulseUp
  • Interior 표시명을 PinPoint로 변경. 슬러그/로컬 git은 `interior`, 원격은 `CJungHwi/pinpoint`
  • CineEcho 추가. 슬러그 `cineecho`, 로컬 `CineEcho_kiro/.cursor/rules/project_history.md`, 원격 `CJungHwi/CineEcho`
  • Kmong Chat / htmltohwpx 를 소스 목록과 DB에서 삭제 (`저장 절차`, `저장 절차`)

관리자 (이력 소스 테이블)

현상/기능

  • history-sources.json 이 내용을 db의 테이블로 변경해서 관리하게

작업

  • `scripts/history-sources.json` 삭제. `pnpm history:sync` 가 테이블을 읽음
  • 관리자 `/history-sources` 에서 추가·수정·삭제
  • n8n Working 파이프라인 `List History Sources` 가 같은 테이블을 조회
  • git_owner/repo/path 가 있는 활성 행만 n8n GitHub 수집. Shopify Auto 는 로컬만