본문 바로가기
걸어서 개발 속으로

admin page를 위한 차트 구현의 잿빛로드

by puy0 2024. 3. 31.

구현 하고싶은 관리자 페이지의 기능에는

이벤트 카운트, 문제 유저, 시스템 자원을 모니터링, 관리 하는것 이다

 

SML 서비스에는 실행 횟수에 따라 의미를 유추할수 있는 특정 메서드들의 로그를 DB에 기록하도록 했다

해당 로그를 열람할수 있는 관리자 페이지에서

악성 유저를 모니터링하거나 서비스의 오류 등을 확인 할수 있고

로그를 매시,매일,매달 별로 카운트해서

일정 기간마다 특정 기능의 사용량을 모니터링 할수도 있다

 

앞서말한 관리자 페이지를 구현 하면서 있었던 문제, 해결 방법, 이유를 이 글에 기록하고 갱신하는 중이다

 


최대한 쉽게 구현할수는 없을까?

기존 페이지를 위한 컨트롤러에서는 api 요청을 받았을때

관련 메서드를 실행하고 데이터, 페이지를 반환하는 방식으로 웹서버가 동작한다

하지만 매시, 매일, 매월 기준으로 기록하기 위해선 기존 방식으로는 적절하지 않다

물론 새로운 방법을 도입하지않고 구현 하는방법도 있다

유저에 의해 이벤트가 발생 했을때 저장 되는 해당 이벤트의 reg 데이터를 응용하는것 이다

철저하게 유저에 의한 기능 실행시 실행시간이 저장되고

관리자의 요청(관리자페이지 접속 이벤트 발생)으로 인해

관리에 필요한 데이터가 생성된다

해당 방법은 필요한 데이터를 그때그때 생성하기때문에

관리자의 요청전에는 데이터가 없는상태지만 관리자 작업에는 지장이 없다

하지만 관리자페이지 접속시 일시적으로 많은자원이 소모되고 서비스가 느려지거나

데이터베이스를 까보거나 하는 방법으로 시스템을 체크할때

갱신되지않은데이터가 있을수 있다는것은 별로 바람직하지않다고 생각했다.

그렇다면 어떤  방법을 사용할까?

그래서 찾아본 새로운 기능에는 springboot - Scheduled 과 DB- scheduler가 있다

springboot - Scheduled 를선택했으며
이유는 sml 서비스가 jpa를 사용하는데 jpa를 사용하는 목적이

서비스에서 java 코드만을 사용해 sql 의 의존성을 줄여보자는 것 이라고 생각한다

그런 프로젝트에서 사용하는 DB가 트리거나 스케줄러를 사용한다는건

jpa를 사용하는 서버에서 특정기능이 쿼리로 동작한다는것 이고 이는 부적절하다고 생각했다

 

springboot - Scheduled 적용방법

 

main 메서드가 있는 클래스 위에 @EnableScheduling 어노테이션을 추가 한다

@EnableScheduling // 스케줄을 위해 추가
@SpringBootApplication

 

스캐줄을 위해 생성한 컨트롤러에 @Component 어노테이션을 추가 한다

@Component //스케줄을 위해 추가
public class MtfbwyController {
}

 

 

매시 정각 동작을 위해 cron을 사용한다

@Scheduled(cron = "0 0 0 * * *")//초 분 시 일 월 요일
public void mtfbwyMethod() {
logger.info("still alive!!");
}

 

admin page의 구동(환경)

admin page는 서비스 프로젝트와 분리 해야 한다고 한다

도메인/admin, 도메인/manager 같은 엔드포인트도 위험하다고 한다

정보보안 매뉴얼 취약점 점검 가이드 등을 검색하면 좋은정보가 많다

최하단에 링크 있음

나의 경우 데이터베이스와 sml 서버는 oci 에서 돌리고

admin 페이지는 로컬서버에서 돌리기로 했다

로컬서버는 윈도우 pc에 평소에 사용하는 다른 로컬서버가 돌아가고 있기때문에

이번기회에 도커같은 스택을 사용해 기존 로컬 서비스와 분리 시킬것이다

 

sml서버는 원격지에서 다른 원격지의 DB 와 통신하며

0.0.0.0/0 클라이언트에게 서비스를 제공하고

이벤트 발생시 즉시 로그를 DB에 갱신한다

admin 프로그램은 로컬에서 원격지 데이터베이스와 통신하며

sml이 갱신한 로그를 기반으로 일정기간마다(Scheduled)

admin기능을 제공할수 있는 데이터를 갱신하며

로컬에서만 admin page에 접속이 가능하도록 했다

 

 

 

 

https://www.ncsc.go.kr:4018/main/cop/bbs/selectBoardArticle.do?bbsId=InstructionGuide_main&nttId=18588&pageIndex=1

 

국가사이버안보센터

국제 및 국가배후 해킹 조직 관련 사이버위협 예방·대응, 보안적합성·암호모듈 검증제도 등 정보수록

www.ncsc.go.kr:4018

https://ssv.skill.or.kr/cloud-security/linux-security-vulnerability

 

Linux 시스템 취약점 점검 가이드 | System Security Vulnerability

출처 : [2020.12] 한국인터넷진흥원 발간 내용 "클라우드 취약점 점검 가이드"

ssv.skill.or.kr

 

'걸어서 개발 속으로' 카테고리의 다른 글

백준 14551 Card Game Contest Java  (0) 2024.10.15
서버에서 정렬 vs DB에서 정렬  (0) 2024.05.15
https 지원(ssl)  (0) 2024.02.25
html snippet include  (0) 2023.12.23
HttpSession 와 HttpServletRequest  (0) 2023.12.20

댓글