- 자주 묻는 질문 4개 Bootstrap 아코디언으로 구현
(기장료, 양도세 상담, 무료 상담, 첫 상담 준비물)
- 최종 CTA 섹션 앞에 배치
- site.css: faq-accordion, faq-item, faq-question, faq-answer 스타일
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TaxSeason / CurrentSeasonDto에 RelatedCategorySlug 추가
- TaxSeasonCalendar 각 시즌에 카테고리 슬러그 매핑
(income-tax→income-tax, vat-1st/2nd→vat, 종부세→real-estate-tax 등)
- IBlogPostRepository.GetByCategorySlugAsync 추가
- BlogService.GetSeasonalPostsAsync: 시즌 관련 글 2개 우선 + 나머지 최신 글로 채움
- IndexModel: SeasonalPosts / RecentPosts 분리 로드
- Index.cshtml 블로그 섹션: 시즌 중 "이번 시즌 추천" 배지 + 시즌별 전체보기 버튼
- site.css: blog-card--seasonal, seasonal-blog-tag, btn-seasonal 스타일
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Program.cs: MapRazorComponents에 AllowAnonymous 추가
JWT 미들웨어가 Blazor 셸 요청을 401로 차단하던 문제 수정
(인증은 Blazor AuthorizeRouteView → RedirectToLogin에서 처리)
- deploy.yml: SSH 1회 연결로 배포+헬스체크 통합
서버 사이드 폴링으로 대기(최대 120초), CI 측 sleep 제거
구 배포 디렉토리 최근 5개 자동 정리
secrets 파일 사전 검증 추가
- maintenance.html: 배포 중 Nginx가 직접 서빙할 점검 페이지
15초 자동 새로고침, 카카오 채널 링크 포함
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 연간 세무 캘린더(7개 시즌) 기반 자동 Hero 섹션 전환
- 시즌 감지 시 D-Day 카운트다운, 긴박감 배지, 시즌 CTA 표시
- 서비스 카드 순서 시즌 관련 항목 우선 정렬
- 어드민 공지사항 CRUD (등록·수정·삭제, 기간·유형 설정)
- 홈페이지 상단 공지 배너 자동 노출 (일반/배너/긴급)
- CLAUDE.md에 세무 캘린더 및 마케팅 방향 하네스 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
App.razor:
• MudBlazor CSS: jsdelivr CDN
• MudBlazor JS: jsdelivr CDN
• admin.css: 로컬 파일 (기본 스타일)
결과:
✅ 로그인 페이지: MudBlazor 스타일 + 기본 스타일 로드
✅ 페이지 로딩 중: admin.css로 기본 UI 표시
✅ MudBlazor 로드 후: 완전한 스타일 적용
이제 Gitea Actions가 자동으로 배포합니다.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
wwwroot/css/admin.css 생성:
• 폼 요소 기본 스타일
• MudBlazor 컴포넌트 기본 스타일
• Responsive 디자인
• Material Design Blue 컬러
결과:
✅ 페이지 로딩 중에도 깔끔한 UI
✅ MudBlazor 로드 후 자동 오버라이드
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
문제:
❌ 로그인 페이지에서 MudBlazor CSS가 적용되지 않음
❌ 스타일이 없는 상태로 렌더링됨
원인:
• BlankLayout에만 MudThemeProvider가 있음
• Login.razor는 직접 MudThemeProvider를 가지지 않음
• Blazor Interactive Server에서 컴포넌트 초기화 전 렌더링됨
수정:
✅ Login.razor에 MudThemeProvider 추가
✅ MudDialogProvider, MudSnackbarProvider도 추가
✅ 버전 파일 자동 생성 (git commit hash + timestamp)
배포:
Release 빌드 → wwwroot/version.txt 생성 → 서버 배포 → systemctl restart
결과:
✅ 로그인 페이지 CSS 정상 렌더링
✅ 버전 정보 최신화
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1️⃣ HttpClient 서비스 추가
- IApiClient 인터페이스 구현
- GET, POST, PUT, DELETE 메서드
- JWT 토큰 자동 관리
- /taxbaik/api 경로 자동 처리
2️⃣ Razor Pages 리팩토링
- Pages/Index.cshtml.cs: API /api/blog 호출
- Pages/Blog/Index.cshtml.cs: API /api/blog, /api/category 호출
- Pages/Contact.cshtml.cs: API /api/inquiry 호출
- Service 의존성 제거
3️⃣ Blazor Components 리팩토링
- Login.razor: API /api/auth/login 호출로 변경
- BlogList.razor: API /api/blog/admin/all 호출로 변경
- Service 의존성 제거
아키텍처:
View (Razor Pages + Blazor)
↓ HttpClient
Controllers (REST API)
↓
Services (비즈니스 로직)
↓
Repository (DB)
테스트 결과:
✅ 홈페이지: 200 OK
✅ 블로그 페이지: 200 OK
✅ 문의 페이지: 200 OK
✅ 로그인 페이지: 200 OK
✅ API 엔드포인트 모두 작동
장점:
• UI 리뉴얼 시 API 변경 불필요
• 모바일앱, 데스크톱 클라이언트 추가 가능
• 비즈니스 로직과 UI 완전 독립
• 테스트 가능한 구조 완성
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
4개 API 컨트롤러 구현:
✅ AuthController: POST /api/auth/login
✅ BlogController: GET/POST/PUT/DELETE /api/blog
✅ CategoryController: GET/POST/PUT/DELETE /api/category
✅ InquiryController: POST/GET/PUT /api/inquiry
아키텍처 개선:
- Application 서비스 레이어 확장 (CategoryService 추가)
- Repository 인터페이스 CRUD 지원 추가
- Program.cs에 MapControllers() 추가
- 비즈니스 로직과 UI 완전 분리
장점:
- 향후 UI 리뉴얼 시 API 변경 불필요
- 모바일 앱, 데스크톱 클라이언트 추가 가능
- 테스트 가능한 API 엔드포인트
테스트 결과:
✅ 블로그 API: 5개 포스트 조회
✅ 카테고리 API: 5개 카테고리 조회
✅ 문의 API: 문의 제출 성공
⚠️ 인증 API: 예정된 수정 대기
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Microsoft.AspNetCore.Authentication.JwtBearer 패키지 추가
- Program.cs: JWT 인증 스키마 설정
- Middleware: app.UseAuthentication() 추가
- Admin 대시보드 접근 시 인증 필요 (401 Unauthorized 반환)
테스트 결과:
✅ 홈페이지 (200 OK)
✅ 블로그 (200 OK)
✅ 문의 폼 (200 OK)
✅ 로그인 페이지 (200 OK)
✅ 관리자 대시보드 (401 - 인증 필요)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
분리의 단점을 제거하고 단일 앱으로 통합:
구조 변경:
- TaxBaik.Admin → TaxBaik.Web/Components/Admin/
- Admin Services → TaxBaik.Web/Services/
- 포트: 5001 (기존 5002 제거)
경로:
- 홈페이지: http://localhost:5001/taxbaik
- 관리자: http://localhost:5001/taxbaik/admin
기술:
- Razor Pages (Web) + Blazor Server (Admin) 통합
- 단일 Program.cs로 양쪽 모두 지원
- JWT 인증 유지
- MudBlazor UI 유지
장점:
- 개발 복잡도 감소 (터미널 1개)
- 배포 단순화 (앱 1개)
- DB 마이그레이션 1회 실행
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- 포트 5001로 설정 (기존 5012 → 5001)
- DB 연결 없이도 페이지 렌더링 가능하도록 error handling 추가
- Index.cshtml.cs: 블로그 로드 실패 시 빈 리스트 반환
- Blog/Index.cshtml.cs: 카테고리 및 포스트 로드 실패 시 빈 리스트 반환
- Contact.cshtml.cs: 문의 제출 실패 시 사용자 친화적 에러 메시지
- Program.cs: 마이그레이션을 non-blocking으로 변경
페이지 구성:
- 홈페이지 (Index): 회사 소개 및 최근 블로그
- 블로그 (Blog): 게시글 목록 및 카테고리 필터
- 서비스 (Services): 서비스 소개
- 문의 (Contact): 상담 신청 폼
- 소개 (About): 회사 정보
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>