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. 시스템 구성도
시스템 구성도