728x90

 웹 서비스를 하고 분석 자료를 구하기 위해 구글 어시스트와 같이 유료 서비스가 있지만 결국 Data분석을 별도로 활용하기 어려운 것이 현실이다.

 그래서 대안이 오픈 소스를 활용해서 데이터를 필요에 따라 수집하고 검색하는 것을 구현했다.

 Elasticsearch, Kibana, Beats, Logstach( ELK Stack 이라고도 함 ) 등으로 구성하여 데이터를 확보해서 사이트 맞춤 데이터를 수집하는 것이 그것이다.

 로그를 쌓는 것만하고 실제 구현이후 활용하는 것부터는 구현 프로젝트 진행자들이 경험하기 어려운 것이 업무영역의 한계이다. 

 그래서 오늘을 이것에 대해서 알아보려 한다.


 

 1. ELK 스택이란?

 ELK 스택은 로그 수집, 저장, 검색, 시각화를 위한 오픈소스 기반의 통합 플랫폼이다. 이름은 세가지 주요 구성 요소의 앞글자를 따러 부른다.

  • Elasticsearch (엘라스틱서치): 분산형 검색 및 분석 엔진으로, 대용량의 로그 데이터를 빠르게 검색하고 분석할  수 있습니다.
  • Logstach (로그스태시): 데이터 수집 및 처리 파이프라인 도구로, 다양한 소스에서 데이터를 수집하고 변환하여 Elasticsearch로 전송합니다.
  • Kibana (키바나) : Elasticsearch에 저정된 데이터를 시각화하고 대시보드를 통해 모니터링 할 수 있는 도구입니다.

 이러한 구서은 시스템 로그, 애플리케이션 로그, 보안 로그 등 다양한 로그 데이터를 중앙에서 관리하고 분석하는 데 유용하다.

 

 2. ELK 스택과 유사한 기능을 하는 다른  구성 방법

 ELK 스택과 비슷한 기능을 제공하는 다른 오픈소스 및 상용 솔루션들이 있다.

  • EFK 스택: Logstash 대신 **Fluentd (플루언트디)**를 사용하는 구성으로, 로그 수집 및 전송에 특화되어 있습니다.
  • Graylog (그레이로그): Elasticsearch와 MongoDB를 기반으로 하는 로그 관리 플랫폼으로, 사용자 친화적인 인터페이스를 제공합니다.
  • Splunk (스플렁크): 강력한 로그 분석 및 시각화 기능을 제공하는 상용 솔루션입니다.
  • Datadog (데이터독), New Relic (뉴렐릭): 애플리케이션 성능 모니터링(APM)과 로그 관리를 통합한 클라우드 기반의 상용 서비스입니다.

※ perplexity를 이용한 시장점유율 참고 자료

더보기

※ perplexity를 이용한 사용량 검색하니 실제 그래프는 저작권 때문에 자료 검색이 안되네요. 대신 아래와 같이 알려주었습니다.

- ELK와 경쟁 시스템의 시장 점유율 및 도입률 참고용

 

ELK      ██████████████████████ 45%
Splunk   ████████████           25%
EFK      █████████              15%
Graylog  ██████                 8%
기타      ████                   7%

  스택데이터 수집저장/검색시각화라이선스주요 특징

ELK Logstash/Beats Elasticsearch Kibana 오픈소스 강력한 검색/시각화, 확장성
EFK Fluentd Elasticsearch Kibana 오픈소스 경량 수집, 플러그인 다양
Splunk 자체 수집기 자체 엔진 자체 대시보드 상용 통합 솔루션, 자동화 강점
Graylog 자체 수집기
/Beats
Elasticsearch 자체 대시보드 오픈소스
/상용
쉬운 관리, 플러그인 지원
Prometheus+Grafana 자체 수집기 Prometheus TSDB Grafana 오픈소스 메트릭 특화, Alerting

 

3. 유료/무료 구분 및 오픈소스로 구성하기 좋은 추천
- 오픈소스 기반 (무료):

  • ELK 스택: 강력한 커뮤니티 지원과 다양한 플러그인을 통해 유연한 구성이 가능합니다.
  • EFK 스택: 경량화된 로그 수집 도구인 Fluentd를 활용하여 리소스 효율적인 구성이 가능합니다.
  • Graylog: 사용자 친화적인 인터페이스와 함께 다양한 플러그인을 지원합니다.

- 상용 솔루션 (유료):

  • Splunk: 대규모 환경에서의 로그 분석에 강점을 가지며, 다양한 기업에서 사용되고 있습니다.
  • Datadog, New Relic: 클라우드 기반의 통합 모니터링 및 로그 분석 서비스를 제공합니다.

 오픈소스로 구성하기에 가장 추천하는 것은 ELK 스택인것 같습니다. 다양한 커뮤니티 자료와 플러그인을 통해 유연하게 시스템을 구성할 수 있으며, 대규모 로그 데이터를 효과적으로 처리할 수 있을것 같네요.

 참고로, Cloud 기반으로 시스템 구성시 Fluentd를 사용한 EFK가 좋아 보이네요


4. ELK 스택 데이터를 활용한 AI 챗봇 구성 사례 및 방법
 4.1. 사례:
ELK 스택에 수집된 로그 데이터를 활용하여 AI 챗봇을 구성한 사례 예:

  • 고객 지원 챗봇: 고객의 문의 로그를 분석하여 자주 묻는 질문(FAQ)을 자동으로 생성하고, 이를 기반으로 챗봇이 응답하도록 구성합니다.
  • 시스템 모니터링 챗봇: 시스템 로그를 분석하여 이상 징후를 감지하고, 이를 챗봇을 통해 관리자에게 실시간으로 알립니다.

 4.2. 구성 방법:
   4.2.1. 데이터 수집 및 전처리:

  • Logstash 또는 Fluentd를 사용하여 다양한 소스의 로그 데이터를 수집합니다.
  • 수집된 데이터를 Elasticsearch에 저장하고, 필요한 전처리 작업을 수행합니다.

   4.2.2.  AI 모델 학습:

  • Elasticsearch에 저장된 데이터를 기반으로 자연어 처리(NLP) 모델을 학습시킵니다.
  • 예를 들어, 고객 문의 로그를 분석하여 의도 분류 및 개체 인식 모델을 구축합니다.

   4.2.3.  챗봇 인터페이스 구성:

  • 학습된 AI 모델을 기반으로 챗봇을 개발합니다.
  • 사용자로부터 입력을 받아 모델을 통해 분석하고, 적절한 응답을 제공합니다.

   4.2.4.  시각화 및 모니터링:

  • Kibana를 활용하여 챗봇의 응답 로그 및 사용자 상호작용 데이터를 시각화하고 모니터링합니다.

 시스템 로그 분석을 통한 보안 강화와 최근 AI 도입을 위한 데이터 확보를 통한 챗봇 구성까지 간략하게 정리해 보았습니다. 

 

728x90
728x90
더보기

 잠시 개인 사정으로 머리를 식히고 다시 개인 프로젝트 시작합니다.

( 2024.11.08~ 1W : 신규프로젝트 투입으로 중지)

( 2025.04.08~ 진행중)

 멈춰서서 돌아보고 추진력이 없으면 수입이 들어오기 어렵다는 것을 알고 프로그램을 완성 못하는 솔루션을 경험도 해봤지만, 추진력을 예측만하고 프로그램을 완성해야 하는 경우도 경험해 봤습니다.

 이번 개인프로젝트는 요청이 들어왔지만 개인적 확인을 목적도 있었기 때문에 더욱 빨리 완성할 수 있다고 생각했습니다. 솔루션 개발시 늘 경험을 하듯 어떤 원인으로든 추진력을 잃어버리고 방황하는 시기를 볼 수 있는데 개인 프로젝트에서도 ...

 중요한 것은 다시 시작하기!!! 칠전팔기 정신으로 다시 정리하면서 시작하려합니다.

 이번에 할것은 로그인 처리와 공통코드 메모리 업데이트 관리부터 접근해 봅시다.

 

※ 최신버전도 좋지만 버전변경 점을 확인하고 적용해야 함으로 버전을 유지

  spring boot version 3.3.3   ( spring.io 에 3.3.5 버전가이드가 나와있네요. )

  spring security version 6.3.X

  ( thymeleaf-extras-springsecurity6:3.1.2release )

  흠음 spring AI 메뉴가 추가 되어 있네요. 개인 플제 간단하게 하고 spring.io 사이트 공부 다시 해야 겠네요. ai 시대에 맞춰서 변경된 것이 있는것 같습니다.

 

 spring boot 에서 security 관련된 것은 사전에 정의된 filter 를 재정의해서 사용하면 되기 때문에 버전별 사용가능한 필터를 알고 있어야 하기 때문에 사용하는 버전의 필터를 정리해 봅시다. 주 사용은 로그인 예외페이지 설정, 로그인 정보 관리하는 것, 그외 api 연동등 port나 url 접근 허용 처리 입니다.

 

SAML 추후 확장을 고려해서 검토

더보기

SAML( Security Assertion Markup Language) : 외부 애플리케이션 및 서비스에 사용자가 자신이 누구인지 알려주는 표준화된 방법으로 사용자를 한번 인증한 다음 해당 인증을 여러 애플리케이션에 전달하는 방법을 제공하여 SSO(Single Sign-On) 기술을 가능하게 합니다. 

SAML인증은 id 공급자를 활용하여 광범위한 비제휴 웹사이트에서 사용자를 중심적으로 인증하는 신원 확인 방법으로

신뢰할 수 있는 단일 ID 공급자에게 인증 프로세스를 전달함으로써 기업은 다양한 보안 및 관리, 비용 절감 이점을 달성할 수 있으며, 특히 사용자에게서 수십 개의 사로 다른 사용자 이름과 비밀번호를 관리할 필요성을 줄여줍니다.

SAML 최신버전은 2.0으로 2005년부터 사용되고 있습니다.

 

SAML 인증 작동 원리

1. SAML 인증을 이용하면, 사용자가 앱에 접근할 때마다 SAML ID 공급자가 인증 프로세스를 전달받습니다.

2. 사용자가 자격증명(예: 비밀번호, OTP, 컨텍스트 속성)을 입력하면 ID 공급자가 확인합니다.

3. ID공급자가 SAML 표명(assertion) 형식으로 접근 또는 거부 응답을 반환합니다.

인증에 성공하면 사용자에게 리소스에 대한 접근 권한을 부여하고 그렇지 않으면 권한을 거부합니다.

 

유저 -> login ->

 

https://github.com/spring-projects/spring-security-samples/tree/main/servlet/java-configuration/saml2/login

1. 로그인 기본 필터  

더보기

필터 기본 구조

 

https://docs.spring.io/spring-security/reference/servlet/architecture.html

 

Multiple SecurityFilterChain

 

Authentication Architecture

 이중에 우리가 사용할 것은 SecurityFilterChain를 통해서 authorize와 login, session를 관리하고 인증(Authentication)처리를 UserDetailsService를 구현하여 처리할 것입니다.

 추후 인증 성공/실패 핸들러를 구현하고 기억처리도 할 예정입니다.

2. 로그인처리 과정

더보기

 다양한 필터와 전처리 후처리를 사용가능하나 기본 정의 되어 있는 것을 사용 기준으로 로그인한 유저 정보로 인증처리를 다음과 같이 한다고 보면 됩니다.

SecurityFilterChain -> formLogin -> Authentication () -> session create -> SecurityContextHolder

 

 요약하면 세션에 userdetails를 상속받은 객체를 저장한다고 보면 되고 그것을 위해 UserDetailsService와 UserDetails 상송받은 User정보 저장객체를 만들것입니다.

- SecurityContextHolder = 시큐리티 인메모리 세션 저장소

- security_session에 athentication 타입 객체로 user정보가 UserDetails타입 개체로 들어간다.

 개념은 접어두고 구현 항목을 적어보자. 참고로 개념이 더 중요하다 전체 filter와 처리 프로세스를 알고 있다면 처리를 다른 곳에서 처리하는 방법도 고려할 수 있기 때문이다.

(2025..4.10 예제코드 구현부분 참고용으로 정리 )

  -- SecurityConfig.java

 @Bean PasswordEncoder 선언

 인증예외페이지 등록 : login 페이지 필수

 cors 예외 주소 등록 : front, back 분리 개발 또는 개발서버와 로컬 구동등 고려

로그인, 로그아웃(세션정리까지)

필터체인에 OncePerRequestFilter 추상화 클래스를 상속받은 사용자 클래스(jwtFilter)를 UsernamePasswordAuthenticationFilter 클래스 보다 먼저 실행하도록 필터 등록

( 로그인 성공시 필요한 처리를 하는 것과 로그인 실패시 처리 추가 )

 -- jwtFilter.java

doFilterInternal 를 오버로드로 구현

HttpServletRequest 에서 토큰 정보를 가져와서 정상이면 토큰에 있는 유저 정보로 UsernamePasswordAuthenticationToken를 만들어 SecurityContextHolder에 인증정보로 등록

-- UserDetailServiceImpl.java

userDetailService를 상속받아 loaduserByusername를 오버로드구현 로그인 정보로 들어온 id로 DB조회 구현하고 조회된 유저의 UserDetails 를 구성해서 넘겨주면 화면에서 넘겨준 패스워드와 DB에서 조회한 패스워드를 다른 곳에서 비교한다. 

 이부분까지가 jwt 구성의 가장 단순정리일 것 같다. 

 

(2025..4.10 예제코드 구현부분 참고용으로 정리  AuthenticationProvider 상속한 사용자 클래스를 만들어  UsernamePasswordAuthenticationToken 를 생성해서 넘기는 방식도 있습니다.)

 

 

※ 기본 폴더구조(아키텍쳐)

더보기

src>comm>config:공통설정-Thymeleaf,security config

src>comm>service: 공통서비스

src>comm>utils: 공통유틸

 

src>업무분류폴더>controller: 개별컨트롤&서비스

src>업무분류폴더>service: 개별서비스

src>업무분류폴더>mapper: interface ( sql matching - mybatis )

 

src>repository : jpa 레파지토리 인터페이스 ( JPA 사용 )

src>model : 계층간 연결용 DTO - service data 단위, domain DB연결용 VO - domain

 

※용어 간략 설명 

※ DTO : Data Transfer Object 계층간 데이터 전달을 위한 객체로 View 모델 정도로 개념을 잡으면 편하다.

※ VO : Value Object 로 DB domain 기준으로 작성

DAO : Data Access Object 실제 DB data에 접근하기 위한 객체, Service 단과 DB 연결하는 고리 역할.

※ POJO : Plain Old Java Objects로 EJB에 대응되는 개념으로 특정 기술에 종속되어 있지 않은 순수 자바 객체로 getter, setter 만 가지고 있는 기본적인 형태의 java 객체

AOP : Apsect-Oriented Programming 관점 지향 프로그래밍, 공통 관심사를 모듈화하여 코드의 중복을 줄이고 유지보수성을 향상시키기 위한 것으로 주로 로깅, 트랜젝션 관리, 보안 등에 활용( Aspect - 공통 관심사를 모듈화한 단위 )

PSA : Portable Service Abstraction 은 개발자가 특정 기술에 강한 결합이 되지 않은 애플리케이션을 만들수 있도록 하는 설계 구조 ( etc. service interface와 service implemented 를 따로 구현하여 추상화를 사용, dbclient에서 jdbc 라이브러리를 사용하는거 )

IoC / DI : Inversion of Control - 제어의 역전, Dependency Injection - 의존성 주입

  

 

  

728x90
728x90

figma 로 대략적인 페이지 설계...( 2024.07.13~)

 전에는 화면 설계를 엑셀로 목록을 만들어서 트리구조를 잡고 파워포인터로 보통 페이지를 설계했는데 이제는 디자이너가 FIGMA 툴을 사용해서 디자인 클래스와 네임까지 거의 다 정의해서 줄수 있기 때문에 화면 설계는 FIGMA가 대세(?)라 생각되어 선택해서 화면 설계중입니다.

 우선 비주얼한 사용자 입장 페이지를 설계했고... 여기서 파일럿 시스템을 최소 기능으로 구현하고 관리자 페이지에서 해당 관리하는 곳을 만들면 1차 목표가 끝날것 같네요.

 우선 대략적인 화면을 도출하였습니다.

더보기
강의 수강생 기초 화면 구성 1차 작성

( ~ 2024.07.13 20.30 )

 일단 이번주말은 여기까지 차주에 관리자 시스템 설계 들어가면 되겠네요. 겸사겸사 프로젝트 프레임웍 구성을 짬짬히 하면 차주까지 개발준비는 어느정도 될것 같네요. 


(2024.07.17) DB 설계 ... erd 관련해서 기존에 있던 툴에서는 오라클 기반으로 데이터 타입을 지원해서 잘 사용했었습니다.

그런데 요즘 mariaDB를 사용하다보니 타입이 은근 신경쓰여서 mariadb 데이터 타입을 지원하고 좀 깔끔하게 관리되는 것이 있는지 찾아 보았습니다.

 우선 저와는 아무런 관련 없는 곳이고 우연히 인터넷에서 찾은 사이트입니다. 사용해보니 편해서 공유합니다.

https://www.erdspace.com 

 

ERD Space

 

www.erdspace.com

장점은 sub-area까지 디자인 반영이되며 논리, 물리명과 타입을 보여주고 sql 생성스크립트를 만들수 있다는 것이고, 단점은 도메인 관리나 Entity를 여러 sub-area에 보여주고 하나로 관리는 안된다는 것이다. 여러 영역에 보이는 것들은 각각 다른 Entity라고 보고 수정시 각각 찾아가서 모두 바꿔주어야 합니다.

더보기

 

 --------------공통영역 -------------

--------------강좌 ---------------

- 관리 시스템에서 배너 관리 노출 관련해서도 DB보완이 필요하지만 일단 파일럿 시스템 일차에는 고려하기 어려울것 같습니다. 

( 진행중 )

 

728x90
728x90

가볍게 접근하며 만들어 봅시다.

요구사항 분석, 기술검토, 프로젝트 특이사항 검토를 통한 프로젝트 분석 진행했습니다.

 

1. 웹서비스 목적과 구성, 사전 검토 필요사항 도출

:  서비스 구성은 관리자 사이트랑 회원 사이트, 강사용 사이트 정도로 구성하고, 회원 사이트는 Thymeleaf로 만들고 추후 flutter, react

2024.07.07 - [프로그램/mariadb] - 심심풀이_온라인강의사이트 DATABASE(2024.07.07~)

 

심심풀이_온라인강의사이트 DATABASE(2024.07.07~)

지인중에 온라인 강좌를 회원 가입해서 볼 수 있는게 필요하다고 해서 사이드 프로젝트로 해볼까 생각중에 문득 오늘 해보는 것도 좋을 것 같아서 시작하게 되었습니다. 서비스 구성은 일단 최

jsi0.tistory.com

: 시스템 사용자 분석, 고객요청 사항 분석, 기본 기술 선택을 위한 구성 테스트, 설계 및 개발 툴 검토

 

- 초기고객요청사항: 초등학생대상, 회원가입후 강의 목록 및 샘플강의 노출, 강의신청 후 별도 결제 진행(1차는 오프라인 결제, 추후 온라인 결제), 강의별 신청 승인, 승인된 강좌에 대해서 1년간 온라인 강의 수강 기능제공

 

2. 공통영역 설계

: 유저, 유저그룹, 유저그룹권한

: 메뉴-메뉴트리, 메뉴그룹, 유저그룹별 접근 가능한 메뉴그룹-메뉴트리와화면메뉴

: 공통코드-상위코드-콤보등

: 기초생성자료-슈퍼유저-프로그램구성설정을위한최소설정등

 

3. 작업순서를 위한 작업내용 도출

: 테이블설계, 기초화면설계

: 로그인 후 랜딩페이지- 메뉴및레이아웃설계, 

: 관리자시스템 설계, 온라인수강 시스템 설계, 온라인교수자 시스템 설계

: 디자인 시안

: 개발방법 검토

 

4. 개발특이사항도출

: 짬짬히 시간 날때 해야 하는 관계로 전체 설계를 완성 후 개발하기는 어려움 - 개발시간 연속성 확보 불가

: 특별한 요청사항보다는 온라인 강좌 서비스 파일롯 시스템을 고객이 요청한 상태라 단계별 개발 필요

: 기술관련 선택 제한 없음( 잦은 테이블 변경 대응을 위해 JPA 도입, 상세조건 적용 단계시 mybatis적용으로 변경 )

: 사이드 프로젝트로 3개월이 넘어갈 경우 업무 부하 발생시 중지될 가능성 존재함

: 비주얼한 파일롯 시스템을 만들고 해당 사이트 구성에 필요한 관리자 시스템을 만들고 강좌 개설 시스템을 만드는 방식 검토

  - 단위 기능 구현 후 통합시스템 구성방식으로 개발

: 핵심 기능분해도 도출 후 일정 산정 필요 - 개발 기한 산정 필요 ( 개발 중단 방지를 위한 일정관리 )

: 제출용이 아니기 때문에 문서는 최소한으로 선택적 작성

: 필요시 밴치마킹 - 일반유료강좌 사이트 이용 경험을 살려 초등학생 특이점 반영필요

 

5. 핵심 기능

: 로그인, 회원가입, 회원탈퇴, 회원정보관리, 비밀번호찾기, 비밀번호변경, 비밀번호초기화

: 비회원 강좌조회, 강좌안내페이지, 무료샘플강좌보기, 강좌스트리밍시 무료여부 확인 로직

: 회원강좌신청, 회원강좌신청정보, 회원승인강좌(기한관리), 회원승인강좌 영상별진도관리

: 스트리밍시 진도관리, 강좌스트리밍시 해당회원 승인강좌 여부 확인 로직

: 강의자료 등록, 무료자료, 유료자료, 샘플영상, 유료영상, 다운로드제한방안

: 스트리밍 서비스 속도 및 환경 별 해상도 지원방안

 

6. 개발방법 선택

: 에자일 방법 적용

   - 최우선 단위 기능에 대해서 선택적 개발

: 나선형 개발 방법 적용

  - 1단계 기능 개발 후 통합 기능 개발을 진행하고 전체적 통합 개발 하는 방법

  - 개발 후 리팩토링 발생 빈도가 높음, 1인 설계로 일관성 유지로 해결

  - 점진적 설계로 인해 미 검토된 부분 발생시 전체 재검토로 일정 지연 발생 가능

  - 단계 구분 마일스톤 사전 정의 필요 

 

7. 기타 개발툴 및 에자일 개발방법시 사용할 것들

: 테이블 기초 설계 - 엑셀,erd - (검토중)

: mariadb, dbever, 인텔리제이, springboot, figma

: 초등학생대상 교수자료

 

------- 기본 분석 종료.... 더 자세히 분석 정리하는 것이 더 좋겠지만 가볍게 개발을 위해서 여기까지.

다음은 에자일 방법론으로 개발할 기초 테이블 설계, 화면 설계, 기능 모듈 설계 및 기능 테스트 설계 대상 도출

728x90

+ Recent posts