[Spring Boot] ELK 스택 구축 - 3. logstash 설치
·
Web Development/BackEnd
logstash란?logstash 는 데이터 수집, 처리 및 변환을 하기 위한 오픈소스 도구이다, 주로 로그 데이터나 이벤트 데이터를 수집하며, 수집한 데이터를 엘라스틱서치에 전송한다. 데이터베이스, 메시지 큐, 소켓 등에서 데이터를 가져올 수 있으며, 데이터를 가공하여 원하는 형식으로 변환할 수 있다.로그스태시는 input, filter, output을 조합하여 데이터 파이프라인을 구성할 수 있다. 이는 logstash.conf 파일을 통해 정의된다.logstash 설치services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.3.3 container_name: elasticsearch environm..
[Spring Boot] ELK 스택 구축 - 2. kibana 설치
·
Web Development/BackEnd
Kibana란?kibana 는 엘라스틱서치와 함께 사용하는 데이터 시각화 및 분석 도구이다. 엘라스틱서치 내에 존재하는 데이터를 시각화할 수 있으며, 여러 플러그인을 통해 기능을 확장할 수 있다.kibana 기능DiscoverDiscover는 엘라스틱서치 인덱스의 데이터에 대한 검색 기능을 제공한다. 쿼리를 통해 데이터를 필터링하고 조건에 맞는 결과를 탐색할 수 있다. 결과를 테이블 형식으로 미리 보거나, 특정 기간의 데이터를 집중적으로 분석할 수 있다.Visualize키바나는 바 차트, 라인 차트, 파이 차트, 히트맵 등과 같은 여러 형태의 시각화 차트를 제공한다. 또한 사용할 데이터 필드를 선택하고 집계 방식으로 설정하여 원하는 정보만 따로 시각화할 수 있다.메트릭 집계 : 합계, 평균, 최대 및 최..
[Spring Boot] ELK 스택 구축 - 1. Elasticsearch 설치
·
Web Development/BackEnd
초기 세팅Spring Initializr먼저 Spring Initializr를 통해 프로젝트를 생성한다. Docker를 사용하여 ElasticSearch를 설치할 예정이다. Spring Boot와 ElasticSearch와의 통합을 위한 의존성도 추가한다.services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.3.3 container_name: practice_elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false ports: - "9200:9200"compose..
[Network] Polling, Long Polling, SSE, Websocket이란?
·
Web Development/BackEnd
Pollingpolling은 클라이언트가 주기적으로 서버에 요청을 보내고, 서버는 클라이언트의 요청에 대한 응답을 리턴하는 방법이다. 구현이 간단하고 HTTP 프로토콜을 사용하므로 호환성이 좋다.서버는 클라이언트의 요청에 매번 응답을 전송해야 한다. 따라서 특수한 상황이 아니면 대부분의 요청이 불필요한 경우가 될 수 있다. 또한 클라이언트의 요청이 많아질수록 서버에 부하가 증가할 수 있다. 또한 데이터가 변경되어도 클라이언트가 새로운 데이터를 받기까지 시간이 걸리므로 실시간성이 떨어진다.Long Pollinglong polling은 클라이언트가 서버에 요청을 보낸 후 서버가 새로운 데이터가 준비될 때까지 요청을 유지하는 방식이다. 다시 말해 서버로부터 응답을 받을 때까지 클라이언트는 대기한다. 데이터가 ..
[AWS] AWS와 VPC
·
Web Development/BackEnd
AWSAWS(Amazon Web Services)는 아마존이 제공하는 클라우드 컴퓨팅 서비스 플랫폼이다.컴퓨팅, 스토리지, 데이터베이스, 모니터링, 머신러닝 등의 다양한 서비스를 제공한다.VPCVPC(Virtual Private Cloud)는 AWS 클라우드 내에서 격리된 가상 네트워크를 생성할 수 있도록 하는 서비스이다.VPC를 통해 만든 네트워크에서 자체적인 IP 주소, 퍼블릭/프라이빗 서브넷, 라우팅 테이블, 네트워크 게이트웨이 등의 기능을 사용할 수 있다.즉, 각각의 VPC는 격리되어 있으며 이를 통해 보안성을 높인다.애플리케이션 중 일부는 VPC 클라우드에서, 일부는 온프레미스(on-premises)에서 실행할 수 있다.온프레미스는 조직의 자체 공간에서 물리적인 서버와 인프라를 구축하고 운영하는..
[Flask] 4. 게시판 기능 추가
·
Web Development/BackEnd
준비게시판 기능을 추가하려면 다음과 같은 파일들이 필요하다. 게시판에 대한 라우터를 정의하는 board.py작성된 게시글을 보여주는 템플릿인 board.html글을 작성하는 페이지인 new_post.html 추가된 파일들에 맞게 기존 파일들을 적절히 수정해야 할 것이다.먼저 게시글에 대한 DB 테이블을 구현해야 한다. 테이블명이 post인 테이블을 생성했다.config.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), unique=True, nullable=..
[Flask] 3. Flask와 MySQL 연결하기
·
Web Development/BackEnd
준비Flask 애플리케이션과 MySQL을 연결하여 회원 정보를 관리하려고 한다. 먼저 회원 정보를 저장하는 테이블을 생성한다. 나는 다음과 같이 생성하였다. model.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), unique=True, nullable=False) password = db.Column(db.String(150), nullable=False)model.py는 SQLAlchemy를 통해 DB 모델을 정의한다.생성한 테이블의 구조와 동일..
[Flask] 2. 회원가입, 로그인 기능 만들기 / Blueprint
·
Web Development/BackEnd
준비/templates에 register.html, login.html을 작성하고 /routes에 __init__.py와 회원가입 및 로그인에 관련된 라우터인 auth.py를 작성할 예정이다.Blueprint먼저 Flask의 Blueprint에 대해 알아보자. Blueprint는 Flask 애플리케이션의 구성 요소를 모듈화하게 하는 기능이다. bp = Blueprint('bp_name', __name__)Blueprint는 위와 같이 생성할 수 있다. bp_name은 생성된 Blueprint의 이름, bp는 Blueprint 인스턴스, __name__은 현재 모듈의 이름이다. app = Flask(__name__)app.register_blueprint(bp)Blueprint를 생성한 후, Flask 애..
[Flask] 1. 프로젝트 환경 만들기
·
Web Development/BackEnd
목표파이썬 Flask 프레임워크, MySQL을 통한 기본적인 회원가입, 로그인, 게시판 기능을 구현해보고자 한다.가상환경 구축본격적으로 프로젝트를 진행하기 전, 가상환경을 구축하여 진행하고자 한다. 혹시 모를 의존성 충돌 방지 및 시스템 환경을 보호하기 위함이다. 프로젝트 폴더명은 'practice_flask'이다. python -m venv .venv터미널에 위 명령을 입력하여 가상환경을 생성한다. 폴더명은 '.venv'로 설정하였다.여담으로, 가상환경을 구축할 때 폴더명 앞에 온점('.')을 붙이는 이유는 해당 폴더를 숨김으로써 프로젝트 폴더를 깔끔하게 유지하고 실수로 폴더를 삭제하는 일을 방지하기 위함이라고 한다. 지금 같은 상황에도 굳이 폴더를 숨겨야 하나 싶지만... 관습이라고 하니 넘어가려고 ..
SQL Injection이란? SQL Injection을 방어하는 방법은?
·
Web Development/BackEnd
정의 SQL Injection은 공격자가 SQL 쿼리를 조작하여 데이터베이스를 사용하는 웹 애플리케이션을 공격하는 방법이다. 이는 사용자가 입력한 데이터가 적절히 검증되거나 필터링되지 않을 때 발생하며, 공격자는 이를 통해 데이터베이스에 대한 비정상적인 접근이나 조작을 수행할 수 있다. 공격자는 모든 사용자의 정보를 조회하거나 데이터 삭제 및 수정을 할 수도 있고, 관리자 권한을 얻을 수도 있다. 동작 원리1. 공격자가 웹 애플리케이션의 입력 필드에 악의적인 SQL 쿼리문을 입력한다.2. 애플리케이션이 사용자의 입력을 검증하지 않고 쿼리로 변환할 때 입력한 SQL이 실행된다. 이를 통해 공격자가 데이터베이스에 대한 접근이 가능해진다.공격 종류1. Error based SQL InjectionSELECT ..