전체 글

신승환의 기술 블로그
개발 & 구현

[Python] Telegram 응답 받기

https://goodbyeanma.tistory.com/157 [Python] Telegram 메시지 보내주기 Python과 Telegram을 조합해서 알람 서비스를 만드는 이유 1. 편리한 알림 기능 Python과 Telegram을 함께 사용하면 간단하고 빠르게 알람 서비스를 구축할 수 있다. Telegram의 알림 기능을 활용하여 사용 goodbyeanma.tistory.com 위의 글에서는 Python 외부라이브러리를 사용해서 telegram 봇이 메시지를 보내주는 기능을 구현해 보았다. 이번 글에서는 사용자의 메시지에 Telegram 봇이 응답해 주는 기능을 구현해 볼 것이다. 라이브러리 로직 기본 구조 이번에는 안정적인 구현을 위해서 python-telegram-bot 13.8 버전을 다운로드..

개발 & 구현

[Python] Telegram 메시지 보내주기

Python과 Telegram을 조합해서 알람 서비스를 만드는 이유 1. 편리한 알림 기능 Python과 Telegram을 함께 사용하면 간단하고 빠르게 알람 서비스를 구축할 수 있다. Telegram의 알림 기능을 활용하여 사용자에게 즉각적으로 알림을 보낼 수 있다. 2. 높은 접근성 Telegram은 모바일 기기, 데스크톱, 웹 등 다양한 플랫폼에서 사용할 수 있어서 사용자들이 서비스에 쉽게 접근이 가능하다. 3. 안정성과 보안성 Telegram은 안정적이며 보안성이 뛰어나기 때문에 사용자들이 안심하고 서비스를 이용할 수 있다. 4. 다양한 용도로 활용 가능 Telegram은 채팅뿐만 아니라 봇을 활용한 다양한 기능을 제공하기 때문에, 알람 서비스 외에도 다양한 용도로 활용이 가능하다. 5. 유연성 ..

보안

[보안] 랜섬웨어(Ransomware) 테스트

랜섬웨어(Ransomware) 란? 랜섬웨어(Ransomware)는 악성 코드의 일종으로, 컴퓨터 파일을 암호화하거나 사용자의 파일 시스템을 블록 하는 등의 방법으로 파일에 대한 액세스 권한을 제한하고, 해독에 대한 비용을 요구하는 소프트웨어이다. 랜섬웨어는 일반적으로 이메일, 소셜 미디어, 악성 웹사이트, P2P 네트워크 등을 통해 유포된다. 일단 사용자가 랜섬웨어에 감염되면, 랜섬웨어는 암호화된 파일에 대한 복호화 키를 보유하고, 사용자에게 이를 구매하는 것을 요구한다. 대개 랜섬웨어의 요구 금액은 비트코인과 같은 암호화폐로 지불하도록 요구되며, 요구 금액은 몇 백 달러에서 몇 만 달러까지 다양합니다. 랜섬웨어 요구금을 지불하면, 일반적으로 복호화 키를 제공하지만 그렇지 않은 경우도 많다. 랜섬웨어로..

Spring

[Spring] 좋은 객체 지향이란 ? - SOLID

좋은 객체지향 설계를 위한 다섯 개의 원칙이 존재한다. [ SOLID ] 1. SRP : 단일 책임 원칙 (Single Responsibility Principle) 2. OCP : 개발-폐쇄 원칙 (Open/closed Principle) 3. LSP : 리스코프 치환 원칙 (Liskov Substitution Principle) 4. ISP : 인터페이스 분리 원칙 (Interface Segregation Principle) 5. DIP : 의존관계 역전 원칙 (Dependency Inversion Principle) SRP (Single Responsibility Principle) 1) 하나의 클래스는 하나의 책임만 가져야 한다. (하나의 책임이란 것은 모호한 개념) 2) 중요한 판단의 기준은 변..

Redis

[Redis] SCAN

SCAN 이란? Redis는 인-메모리 데이터 구조 스토어이다. Redis는 Key-Value 데이터 구조를 사용하여, 데이터를 메모리에 유지하고, 매우 빠른 성능으로 데이터를 읽고 쓰기가 가능하다. Redis는 데이터베이스에 저장된 키/값 쌍의 목록을 관리하는 데 사용할 수 있는 다양한 명령어를 제공한다. "SCAN"은 이러한 명령어 중 하나로, Redis 데이터베이스에서 키/값 쌍을 반복적으로 조회하는 데 사용된다. Redis KEYS 명령어를 사용하여 Redis 데이터베이스에서 특정 패턴에 일치하는 키를 찾아 반환할 수 있지만, 싱글스레드를 사용하는 Redis 구조의 특성상 다른 모든 일을 제쳐두고 해당 명령만 수행하게 되므로 (작업시간 O(N) 소요) 대규모 데이터베이스에서 사용할 때는 Redis..

JAVA

[JAVA] JAVA GC(Garbage Collection)

GC (Garbage Collection) 이란? 자바 가비지 컬렉션(Garbage Collection, GC)은 자바 가상 머신(Java Virtual Machine, JVM)에서 동작하는 메모리 관리 기법 중 하나다. 이는 프로그램에서 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 객체(가비지)를 자동으로 탐지하고 제거하여 메모리 누수를 방지하고 메모리 사용량을 최적화하는 역할을 한다. GC (Garbage Collection)가 필요한 이유? 메모리 누수 방지 프로그램에서 객체를 생성하면, 해당 객체는 동적으로 할당된 메모리 영역에 저장된다. 이후 해당 객체를 사용하지 않더라도, 개발자가 명시적으로 메모리를 해제하지 않는다면 해당 객체가 차지하는 메모리는 계속 유지된다. 이러한 상황이 지속되..

MongoDB

[MongoDB] WiredTiger StorageEngine

WiredTiger StorageEngine 이란? MongoDB WiredTiger는 MongoDB의 기본 스토리지 엔진 중 하나이다. WiredTiger는 2014년 MongoDB 버전 3.0에서 처음 도입되었으며, 기존의 MMAPv1 엔진 대신 새로운 알고리즘과 데이터 구조를 도입하여 더 빠르고 효율적인 데이터베이스 엔진을 만들어내는 데 중점을 두고 개발되었다. WiredTiger StorageEngine 구조 및 작동 방식 WiredTiger 스토리지 엔진은 B-Tree 구조의 데이터 파일과 서버의 장애 시 데이터 복구를 위한 저널 로그를 가지고 있다. WiredTiger의 저널 로그는 데이터 디렉터리 하위에 있는 journal이라는 디렉터리에 저장되며, 다른 RDBMS의 redo 로그처럼 로테이..

JAVA

[JAVA] JAVA 메모리 영역과 JVM 구조 - Stack, Heap, Method

프로그래머라면 한 번쯤은 JAVA 언어를 통해서 코드를 작성해봤을 것이다. 하지만, 내가 작성한 JAVA Code 가 어떤 식으로 작동하는지 정확하게 알고 있는 프로그래머는 많지 않을 것이다. 그럼 JAVA 가 어떤식으로 작동하는지 알아보자. 자바에서 실행 과정을 단계별로 나눈다면 크게 컴파일 타임(Compile Time), 클래스 로딩 타임(Class Loading Time), 런타임(Run Time)으로 나눌 수 있다. 컴파일 타임은 소스코드를 작성한 후 javac와 같은 컴파일러를 사용해 . java 파일을. class 파일(바이트 코드)로 컴파일하는 단계이다. 클래스 로딩 타임은 JVM이 클래스 파일을 읽어 메모리에 로딩하는 단계이다. 이 과정에서 클래스를 검증하고, 필요한 메모리 공간을 할당하고..

Elasticsearch

[Elasticsearch] Disk-based shard allocation

Disk-based shard allocation 이란? disk-based shard allocation 이란 elasticsearch 서버 내부의 디스크를 파악하고 효율적인 데이터 분산처리를 위한 자동화 옵션이다. elasticsearch는 새로운 샤드를 어디에 할당할지 결정하기 전에 disk-based shard allocator 를 통해서 노드의 사용 가능한 디스크 공간을 고려한다. disk-based shard allocator 의 옵션은 elasticsearch.yml 파일을 통해 수정하고 재시작하거나 cluster-update-setting API를 통해 운영 상태의 클러스터에서도 변경할 수 있다. 기본적으로 disk-based shard allocator 는 1) low watermark ..

Elasticsearch

[Elasticsearch] text, keyword 타입

text, keyword 타입이란? Elasticsearch에서 지원하는 데이터타입 요소로써 text, keyword 모두 문자열을 나타내기 위한 타입이다. 하지만, text 타입은 Full-text search를 위해 토큰이 생성되지만, keyword 타입은 Exact Matching을 위한 토큰이 생성된다. 여기서 Full-text search 이란, 문서의 전체 텍스트에 키워드나 구문을 일치시켜 관련 문서를 검색할 수 있는 기술이다. Exact Matching 은 검색 중인 정확한 용어 또는 구문과 일치하는 문서만 반환하는 검색 기술이다. 그럼 직접 analyzer를 지정하여 Full-text search, Exact Matching 가 어떤 식으로 다른지 확인해 보자. 1. Full-text se..

ssh9308
신승환의 기술 블로그