Files
game-fe-agent/.claude/skills/work-log/SKILL.md

13 KiB

name, description, license
name description license
wiki:work-log Confluence 위키 페이지에 업무일지를 작성합니다 MIT

Confluence 업무일지 작성

Confluence 위키 페이지에 업무일지를 작성하는 스킬입니다.

빠른 참조

프로세스:

  1. 위키 페이지 ID 또는 URL 확인 (환경변수 WIKI_DAILY_WORK_LOG_URL 우선 사용)
  2. 날짜 입력 (MM/DD 형식)
  3. 업무 내용 입력
  4. 기존 페이지 읽기
  5. 해당 날짜에 업무 내용 추가
  6. 페이지 업데이트

API 호출 순서:

// 1. 페이지 읽기
const page = await mcp__wiki__get_page_by_id({ page_id: "페이지ID" })

// 2. 내용 파싱 및 업데이트
// HTML 테이블 형식의 업무일지에서 해당 날짜 행 찾기
// 업무 내용 추가

// 3. 페이지 업데이트
await mcp__wiki__update_page({
  page_id: "페이지ID",
  title: page.title,
  body: updatedBody
})

입력 파라미터

1. 위키 페이지 식별자 (조건부 필수)

  • 환경변수 우선: .env.localWIKI_DAILY_WORK_LOG_URL이 설정되어 있으면 자동 사용
  • 수동 입력: 환경변수가 없거나 다른 페이지를 사용할 경우
    • 페이지 ID: 숫자로 된 페이지 ID (예: 684252757)
    • 페이지 URL: Confluence 페이지 전체 URL
      • URL에서 pageId 추출: https://wiki.smilegate.net/pages/viewpage.action?pageId=684252757
      • pageId= 뒤의 숫자가 페이지 ID

2. 날짜 (필수)

  • 형식: MM/DD (예: 04/02, 12/25)
  • 업무일지 테이블에서 해당 날짜 행을 찾는 데 사용

3. 업무 내용 (필수)

  • 형식: 텍스트 또는 HTML
  • 업무일지의 "진행업무" 열에 추가될 내용
  • HTML 마크업 지원 (리스트, 링크 등)

업무일지 테이블 구조

일반적인 업무일지는 다음과 같은 HTML 테이블 구조를 가집니다:

<table class="fixed-width wrapped">
  <tbody>
    <tr>
      <th style="text-align: center;">날짜</th>
      <th style="text-align: center;">진행업무</th>
      <th style="text-align: center;">기타 기록</th>
    </tr>
    <tr>
      <td style="text-align: center;">04/01</td>
      <td>업무 내용...</td>
      <td><br /></td>
    </tr>
    <tr>
      <td style="text-align: center;">04/02</td>
      <td><br /></td>
      <td><br /></td>
    </tr>
  </tbody>
</table>

프로세스 상세

Step 1: 페이지 식별자 추출

URL에서 페이지 ID 추출:

function extractPageId(input: string): string {
  // 이미 숫자인 경우
  if (/^\d+$/.test(input)) {
    return input
  }

  // URL에서 pageId 추출
  const match = input.match(/pageId=(\d+)/)
  if (match) {
    return match[1]
  }

  throw new Error('유효한 페이지 ID 또는 URL을 입력해주세요')
}

Step 2: 환경변수 확인 및 사용자 입력 받기

먼저 .env.local에서 환경변수 확인:

// .env.local 파일 읽기 (Read 툴 사용)
const envContent = await readFile('.env.local')
const wikiUrlMatch = envContent.match(/WIKI_DAILY_WORK_LOG_URL=['"](.+?)['"]/)
const defaultWikiUrl = wikiUrlMatch ? wikiUrlMatch[1] : null

// 환경변수가 있으면 자동 사용, 없으면 사용자에게 입력 받기
let pageIdInput: string

if (defaultWikiUrl) {
  console.log(`✅ 환경변수에서 업무일지 URL 발견: ${defaultWikiUrl}`)
  pageIdInput = defaultWikiUrl
} else {
  // 사용자에게 입력 받기
  const pageAnswer = await askUserQuestion({
    questions: [{
      question: "업무일지 페이지 ID 또는 URL을 입력해주세요",
      header: "페이지",
      options: [
        {
          label: "URL 입력",
          description: "https://wiki.smilegate.net/pages/viewpage.action?pageId=..."
        },
        {
          label: "페이지 ID 입력",
          description: "숫자만 입력 (예: 684252757)"
        }
      ],
      multiSelect: false
    }]
  })
  pageIdInput = pageAnswer.페이지 // Other 응답에서 실제 값 가져오기
}

// 날짜 입력 받기
const dateAnswer = await askUserQuestion({
  questions: [{
    question: "날짜를 입력해주세요 (MM/DD 형식)",
    header: "날짜",
    options: [
      { label: "오늘", description: "오늘 날짜 자동 입력" },
      { label: "직접 입력", description: "Other를 선택하여 MM/DD 형식으로 입력" }
    ],
    multiSelect: false
  }]
})

// 업무 내용은 별도로 입력받기 (긴 텍스트)
const contentAnswer = await askUserQuestion({
  questions: [{
    question: "업무 내용을 입력해주세요\n(Jira 이슈 번호를 포함하면 자동으로 링크가 생성됩니다)",
    header: "업무내용",
    options: [
      { label: "직접 입력", description: "Other를 선택하여 상세 내용 입력" }
    ],
    multiSelect: false
  }]
})

Step 3: 날짜 처리

function formatDate(dateInput: string): string {
  if (dateInput === "오늘") {
    const today = new Date()
    const month = String(today.getMonth() + 1).padStart(2, '0')
    const day = String(today.getDate()).padStart(2, '0')
    return `${month}/${day}`
  }

  // MM/DD 형식 검증
  if (!/^\d{2}\/\d{2}$/.test(dateInput)) {
    throw new Error('날짜는 MM/DD 형식으로 입력해주세요 (예: 04/02)')
  }

  return dateInput
}

Step 4: 페이지 읽기 및 파싱

// 페이지 내용 가져오기
const page = await mcp__wiki__get_page_by_id({
  page_id: pageId,
  expand: "body.storage,version"
})

const currentBody = page.body.storage.value
const currentTitle = page.title

Step 5: 업무 내용 포맷팅

Jira 이슈 자동 링크 변환:

function formatWorkContent(content: string): string {
  // SWV-123 형식을 Jira 링크로 변환
  const withJiraLinks = content.replace(
    /\b(SWV-\d+)\b/g,
    '<a href="https://jira.smilegate.net/browse/$1">$1</a>'
  )

  // 간단한 마크다운 스타일 HTML 변환
  let formatted = withJiraLinks

  // 줄바꿈 처리
  formatted = formatted.replace(/\n/g, '<br />')

  return formatted
}

Step 6: 테이블에서 날짜 행 찾기 및 업데이트

function updateWorkLog(htmlBody: string, date: string, content: string): string {
  // 날짜 셀 찾기: <td style="text-align: center;">04/02</td>
  const datePattern = new RegExp(
    `(<td[^>]*style="text-align: center;"[^>]*>${date}</td>\\s*<td[^>]*>)([^<]*|.*?)(</td>)`,
    'i'
  )

  const match = htmlBody.match(datePattern)

  if (!match) {
    throw new Error(`날짜 ${date}에 해당하는 행을 찾을 수 없습니다.`)
  }

  // 기존 내용이 <br />만 있는 경우 대체, 아니면 추가
  const existingContent = match[2].trim()
  const newContent = existingContent === '<br />' || existingContent === ''
    ? content
    : existingContent + '<br /><br />' + content

  // 업데이트된 HTML 반환
  return htmlBody.replace(datePattern, `$1${newContent}$3`)
}

Step 7: 페이지 업데이트

const updatedBody = updateWorkLog(currentBody, date, formattedContent)

await mcp__wiki__update_page({
  page_id: pageId,
  title: currentTitle,
  body: updatedBody
})

console.log(`✅ 업무일지 업데이트 완료`)
console.log(`📅 날짜: ${date}`)
console.log(`🔗 페이지: https://wiki.smilegate.net/pages/viewpage.action?pageId=${pageId}`)

업무 내용 작성 예시

예시 1: 간단한 업무

입력:

로드나인 아시아 사전등록 페이지 버그 수정

결과:

로드나인 아시아 사전등록 페이지 버그 수정

예시 2: Jira 이슈 포함

입력:

FE AI 표준화 로드맵 기술 검토 (SWV-955)
Schema.org 구조화된 데이터 추가 (SWV-956)

결과:

FE AI 표준화 로드맵 기술 검토 (<a href="https://jira.smilegate.net/browse/SWV-955">SWV-955</a>)<br />
Schema.org 구조화된 데이터 추가 (<a href="https://jira.smilegate.net/browse/SWV-956">SWV-956</a>)

예시 3: 구조화된 업무 내용

입력:

<u>FE AI 표준화 및 SEO 개선</u>

- FE AI 표준화 로드맵 기술 검토 (SWV-955)
  - Nuxt 3 기반 FE 개발 프로세스와 Claude Code AI Skills 통합
  - 개발 프로세스 전 단계(기획~검증) AI 어시스턴트 활용 체계 수립

- Schema.org 구조화된 데이터 추가 (SWV-956)
  - SEO 최적화 및 검색 엔진 가시성 개선 작업
  - JSON-LD 형식으로 구조화된 데이터 구현 방안 검토

결과:

<p><u>FE AI 표준화 및 SEO 개선</u></p>
<ul style="list-style-type: square;">
  <li>FE AI 표준화 로드맵 기술 검토 (<a href="https://jira.smilegate.net/browse/SWV-955">SWV-955</a>)
    <ul style="list-style-type: square;">
      <li>Nuxt 3 기반 FE 개발 프로세스와 Claude Code AI Skills 통합</li>
      <li>개발 프로세스 전 단계(기획~검증) AI 어시스턴트 활용 체계 수립</li>
    </ul>
  </li>
  <li>Schema.org 구조화된 데이터 추가 (<a href="https://jira.smilegate.net/browse/SWV-956">SWV-956</a>)
    <ul style="list-style-type: square;">
      <li>SEO 최적화 및 검색 엔진 가시성 개선 작업</li>
      <li>JSON-LD 형식으로 구조화된 데이터 구현 방안 검토</li>
    </ul>
  </li>
</ul>

에러 처리

1. 페이지를 찾을 수 없는 경우

try {
  const page = await mcp__wiki__get_page_by_id({ page_id: pageId })
} catch (error) {
  console.error(`❌ 페이지를 찾을 수 없습니다: ${pageId}`)
  console.error('페이지 ID 또는 URL을 확인해주세요.')
  throw error
}

2. 날짜를 찾을 수 없는 경우

if (!htmlBody.includes(`>${date}</td>`)) {
  console.error(`❌ 날짜 ${date}를 찾을 수 없습니다.`)
  console.error('업무일지 테이블에 해당 날짜가 있는지 확인해주세요.')
  throw new Error(`날짜 ${date}에 해당하는 행을 찾을 수 없습니다.`)
}

3. 페이지 업데이트 실패

try {
  await mcp__wiki__update_page({
    page_id: pageId,
    title: currentTitle,
    body: updatedBody
  })
} catch (error) {
  console.error(`❌ 페이지 업데이트 실패`)
  console.error('권한이 있는지 확인해주세요.')
  throw error
}

사용 예시

기본 사용 (환경변수 설정됨)

.env.localWIKI_DAILY_WORK_LOG_URL이 설정되어 있으면:

/wiki:work-log

스킬 실행 후:

  1. 환경변수에서 페이지 URL 자동 인식 (입력 불필요)
  2. 날짜 선택: "오늘" 또는 "04/02"
  3. 업무 내용 입력:
    <u>FE AI 표준화 및 SEO 개선</u>
    
    - FE AI 표준화 로드맵 기술 검토 (SWV-955)
      - Nuxt 3 기반 FE 개발 프로세스와 Claude Code AI Skills 통합
    
    - Schema.org 구조화된 데이터 추가 (SWV-956)
      - SEO 최적화 및 검색 엔진 가시성 개선 작업
    

고급 사용: Jira 이슈 자동 연동

업무 내용에 Jira 이슈 번호를 포함하면 자동으로 링크가 생성됩니다:

로드나인 사전등록 기능 개선 (SWV-960)
SEO 메타 태그 최적화 (SWV-961)

→ 자동 변환:

로드나인 사전등록 기능 개선 (<a href="https://jira.smilegate.net/browse/SWV-960">SWV-960</a>)<br />
SEO 메타 태그 최적화 (<a href="https://jira.smilegate.net/browse/SWV-961">SWV-961</a>)

환경변수 설정

기본 업무일지 페이지를 환경변수로 설정하면 매번 입력할 필요가 없습니다.

.env.local 설정

# Confluence 업무일지 페이지 URL
WIKI_DAILY_WORK_LOG_URL='https://wiki.smilegate.net/pages/viewpage.action?pageId=YOUR_PAGE_ID'

예시:

WIKI_DAILY_WORK_LOG_URL='https://wiki.smilegate.net/pages/viewpage.action?pageId=684252757'

환경변수 우선순위

  1. .env.localWIKI_DAILY_WORK_LOG_URL 설정됨 → 자동 사용
  2. 환경변수 없음 → 사용자에게 수동 입력 요청

다른 페이지 사용하기

환경변수가 설정되어 있어도 다른 페이지에 작성하려면:

  • 스킬 실행 시 "Other"를 선택하여 다른 페이지 URL/ID 입력 가능

주의사항

  • 페이지 권한: 페이지를 수정할 수 있는 권한이 필요합니다
  • 날짜 형식: MM/DD 형식을 정확히 지켜야 합니다 (예: 04/02, 12/25)
  • 테이블 구조: 업무일지가 표준 테이블 구조를 따라야 합니다
  • 기존 내용: 해당 날짜에 이미 내용이 있으면 추가됩니다 (덮어쓰지 않음)
  • HTML 형식: 업무 내용은 Confluence HTML 형식을 따라야 합니다

토큰 효율

이 스킬 문서: ~2000 tokens

검증 완료

이 스킬은 실제 Confluence 업무일지 작성으로 검증되었습니다:

  • 테스트 페이지: 684252757 (2604_김형길 차장)
  • 작성일: 2026-04-02
  • 상태: 성공적으로 업데이트 완료
  • 환경변수: .env.localWIKI_DAILY_WORK_LOG_URL 지원 추가됨