Develop/CMS

CMS 개발 계획

jjh0119 2025. 4. 15. 17:01

전 포스팅에서는 CMS가 뭔지에 대해 알아보았다.
결과적으로 CMS란 콘텐츠를 관리할 수 있는 기능이 포함된 사이트라면 넓은 의미에서 CMS라 볼 수 있고, Java를 이용해서 콘텐츠를 관리할 수 있는 대시보드를 제공하는 회사 페이지를 만들어보려고 한다.

1. 요구사항 정의

1-1. 공통

1-1-1. 기능적 요구사항

항목 설명
로그인 기능 아이디, 비밀번호 기반 로그인
JWT 기반 인증 Access/Refresh 토큰 발급 및 검증 (Spring Security)
역할 기반 접근 제어 (RBAC) 사용자 역할별 접근 권한 제한
비밀번호 암호화 Bcrypt 등 안전한 해시 알고리즘 사용
감사 로그 기록 관리자 및 일반 사용자 행동 로그 수집 (Kafka → ELK)
관리자 IP 제한 허용된 IP 대역에서만 관리자 페이지 접근 가능
알림 시스템 중요 이벤트 발생 시 이메일 또는 Slack 연동

1-1-2. 비기능적 요구사항

항목 설명
응답시간 대시보드 2초 이내 로딩
가용성 99.9% 이상 (로드밸런서 + 이중화 구성)
백업 정기적인 콘텐츠 및 사용자 데이터 백업
로그 수집 통합 Logging Service → Kafka → Logstash → Elasticsearch
모니터링 Prometheus + Grafana 기반의 모니터링 시스템

1-2. 관리자

1-2-1. 대시보드

항목 설명
시스템 통계 시각화 사용자 수, 콘텐츠 수, 방문 수, CPU/MEM 사용량 그래프
최근 활동 내역 콘텐츠 등록/수정/삭제 로그, 로그인 내역
실시간 사용자 모니터링 현재 접속자, 최근 API 호출, 관리자 활동 추적
콘텐츠 상태 요약 초안/승인대기/게시 상태별 콘텐츠 개수
빠른 콘텐츠 등록 버튼 새 콘텐츠 등록 페이지로 바로 이동 가능

1-2-2. 메뉴 관리

항목 설명
메뉴 CRUD 상단 메뉴, 사이드 메뉴 생성/수정/삭제
메뉴 트리 구조 2단 이상 계층 구조 지원
메뉴 숨김 처리 메뉴 비노출 설정 가능
메뉴 정렬 순서 변경 가능 (drag & drop or 정렬 필드)
콘텐츠 연결 메뉴에 CMS 콘텐츠, 외부 URL 연결 가능
권한 기반 표시 역할에 따라 메뉴 노출 여부 조절 가능

1-2-3. 콘텐츠 관리

항목 설명
콘텐츠 CRUD 콘텐츠 생성, 수정, 삭제
콘텐츠 버전 관리 이전 버전 복구 및 비교
태그/카테고리 관리 콘텐츠 분류 기능
승인 워크플로우 작성 → 검토 → 승인 → 게시 흐름
미리보기 기능 게시 전 실제 렌더링 페이지 확인

1-2-4. 사용자 관리

항목 설명
사용자 목록 조회 전체 사용자 검색/필터/정렬
권한 변경 역할 변경 및 부여 기능
계정 활성/비활성화 강제 잠금 또는 해제
사용자 로그 조회 활동 이력 및 감사 로그 확인 가능

1-3. 운영자

항목 설명
콘텐츠 검토 및 승인 승인 워크플로우 참여 (검토/승인)
콘텐츠 통계 확인 역할에 맞는 통계/로그 확인
한정된 메뉴 관리 권한 허용 범위 내에서 메뉴 편집
사용자 활동 알림 수신 Slack 등으로 알림 받아볼 수 있음

1-4. 일반 사용자 (게스트)

항목 설명
콘텐츠 열람 승인된 콘텐츠만 접근 가능
검색 및 필터 콘텐츠 검색 및 카테고리/태그 필터링
사용자 가입 선택사항 (게스트일 경우 익명 접근 허용)
기본 마이페이지 기능 (옵션) 프로필 수정, 열람 이력 등

1-5. 실시간 대시보드 시스템 (WebSocket 기반)

항목 설명
통계 스트리밍 사용자 수, 방문 수, 등록 콘텐츠 실시간 반영
실시간 알림 콘텐츠 등록, 승인, 오류 등 관리자 알림 표시
사용자 접속 현황 현재 접속 중인 관리자/사용자 수, IP 등 표시
로그 스트리밍 ELK 연동 로그 실시간 표시
실시간 필터링 기간/유형/사용자 기준 필터 기능
WebSocket 통신 WebSocket 기반 Pub/Sub 구조, Kafka 연동
토픽 구조 topic/system, topic/logs, topic/activity 등

 

2. 필요 기술 스택

2-1. 백엔드 (Backend)

구분 기술 / 프레임워크 설명
언어 Java 17+ 모든 마이크로서비스의 기본 언어
프레임워크 Spring Boot 3.x 각 서비스의 기본 애플리케이션 프레임워크
인증/인가 Spring Security + JWT 인증/인가 처리 (RBAC 포함)
ORM Spring Data JPA (Hibernate) DB 연동 및 엔티티 관리
API 문서화 Swagger UI REST API 문서 자동화
Validation Jakarta Bean Validation 입력값 검증

2-2. 서비스 간 통신

목적 기술 / 프로토콜 설명
비동기 이벤트 처리 Apache Kafka 서비스 간 이벤트 발행/구독
실시간 통신 WebSocket 대시보드 실시간 갱신 (집계 및 사용자 활동)
API 간 통신 Spring Cloud OpenFeign 서비스 간 API 요청 / 응답

2-3. 프론트엔드 (Frontend)

구분 기술 설명
프레임워크 Vanilla JS / HTML / CSS 관리자 및 사용자용 UI
상태 관리 LocalStorage (추후 상태관리 라이브러리 제작 및 적용 예정) 상태 관리 (간단한 구조)
통신 Fetch API / WebSocket REST 및 실시간 통신
시각화 Chart.js / ApexCharts 대시보드 통계 그래프 시각화

2-4. 데이터베이스 (Database)

종류 기술 설명
RDBMS PostgreSQL CMS 메인 데이터 저장소
In-Memory Redis 대시보드 실시간 데이터 캐싱, 토큰 저장

 


2-5. 로그 / 모니터링 / 테스트

목적 기술 설명
로그 수집 Filebeat / Logstash Kafka → Elasticsearch로 로그 전달
로그 저장/검색 Elasticsearch 로그 색인 및 검색
로그 시각화 Kibana 감사 로그, 사용자/관리자 행동 분석
모니터링 Prometheus + Grafana 시스템 상태, 트래픽, 성능 시각화
감사로그 Custom Logging Service + Kafka 각 서비스에서 이벤트 수집 및 통합
테스트 JUnit5 / Mockito 유닛 및 통합 테스트

2-6. 배포 및 인프라

구분 기술 설명
빌드 도구 Gradle 모듈별 빌드 관리
컨테이너 Docker 각 서비스 컨테이너화
오케스트레이션 K8s 다중 서비스 실행 관리
CI/CD Jenkins 자동 빌드 및 배포 파이프라인
백업/복구 pg_dump, Spring Batch PostgreSQL 데이터 정기 백업
 

3. 시스템 구성도

시스템 구성도