Suffix Array vs Suffix Tree vs Trie

Suffix Array vs. Suffix Tree vs. Trie Suffix Array, Suffix Tree, 그리고 Trie는 모두 문자열 처리와 패턴 매칭을 위한 데이터 구조로, 각각 고유한 특성과 용도를 가지고 있다. 특성 Suffix Array Suffix Tree Trie 기본 구조 모든 접미사를 정렬하여 저장하는 1차원 배열 모든 접미사를 트리 형태로 저장하는 압축된 트리 구조 문자열을 문자 단위로 저장하는 트리 구조 메모리 효율성 O(n), 매우 효율적 O(n), 하지만 실제로는 4n 정도로 큼 O(ALPHABET_SIZE key_length n), 매우 큼 구축 시간 O(n log n) O(n) (Ukkonen’s Algorithm 사용 시) O(n * key_length) 검색 시간 O(m log n + occ), m은 패턴 길이 O(m + occ), m은 패턴 길이 O(m), m은 검색할 문자열 길이 구현 난이도 비교적 간단 매우 복잡 비교적 간단 LCP 계산 추가 배열 필요 트리 구조에서 직접 계산 가능 해당 없음 패턴 매칭 이진 검색 이용 트리 순회로 직접 검색 트리 순회로 직접 검색 공간 지역성 매우 좋음 (연속된 메모리) 보통 (포인터로 인한 흩어짐) 나쁨 (노드가 메모리에 흩어짐) 주요 응용 텍스트 검색, DNA 분석 문자열 처리, 바이오인포매틱스 사전 구현, 자동 완성 동적 업데이트 어려움 가능하나 복잡 쉬움 접두사 검색 어려움 가능하나 비효율적 매우 효율적 최장 공통 접두사 추가 작업 필요 직접 계산 가능 직접 계산 가능 최장 공통 부분 문자열 LCP 배열 필요 직접 계산 가능 부적합 압축 가능성 제한적 매우 좋음 있음 (압축 트라이) 캐시 성능 매우 좋음 보통 나쁨 실제 사용 사례 대용량 문자열 검색 시스템 생물정보학, 문자열 처리 자동 완성, 사전 검색 추가적인 중요 고려사항: ...

October 12, 2024 · 2 min · Me

CCE vs CVE vs CWE

CCE vs. CVE vs. CWE CCE, CVE, CWE는 모두 컴퓨터 시스템과 소프트웨어의 보안 취약점을 식별하고 분류하기 위한 표준화된 체계이다. 이 세 가지 개념은 각각 다른 측면의 보안 취약점을 다루고 있다. 구분 CCE (Common Configuration Enumeration) CVE (Common Vulnerabilities and Exposures) CWE (Common Weakness Enumeration) 정의 시스템 보안 구성 문제를 식별하고 추적하기 위한 표준 명명 체계 공개된 사이버 보안 취약점에 대한 표준 식별자 시스템 소프트웨어/하드웨어 보안 취약점의 유형을 분류하는 표준 목록 주요 목적 보안 구성 설정의 표준화된 참조 제공 특정 보안 취약점의 고유한 식별과 추적 취약점의 유형과 원인에 대한 분류 체계 제공 식별자 형식 CCE-XXXX-X CVE-YYYY-NNNNN CWE-XXX 사용 범위 시스템 구성 및 설정 특정 제품의 구체적 취약점 취약점의 유형과 분류 주요 내용 - 구성 매개변수 - 권장 설정 값 - 구성 지침 - 취약점 설명 - 영향받는 시스템 - 해결 방안 - 취약점 유형 - 원인과 결과 - 완화 방법 구조 특징 - 플랫폼별 구성 항목 - 기술적 메커니즘 - 검증 기준 - 타임라인 기반 - 영향도 평가 - 참조 정보 - 계층적 구조 - 다중 뷰 - 관계 정의 주요 활용 - 보안 구성 관리 - 컴플라이언스 점검 - 시스템 강화 - 취약점 관리 - 패치 관리 - 위험 평가 - 보안 설계 - 코드 리뷰 - 취약점 분석 관리 주체 NIST MITRE MITRE 업데이트 주기 새로운 구성 항목 발견 시 새로운 취약점 발견 시 정기적 업데이트 연관 표준 - SCAP XCCDF OVAL - CVSS NVD SCAP - CVE CAPEC SANS Top 25 주요 이점 - 구성 표준화 - 자동화 지원 - 감사 효율성 - 취약점 추적 - 명확한 의사소통 - 위험 관리 - 체계적 분류 - 원인 분석 - 예방 가이드 한계점 - 플랫폼 의존성 - 구성 복잡성 - 업데이트 지연 - 공개된 취약점만 포함 - 시간 지연 - 상세도 차이 - 추상적 성격 - 복잡한 분류 - 실제 적용 어려움 이러한 세 가지 표준은 각각 다른 관점에서 보안 취약점을 다루며, 서로 보완적인 관계를 가지고 있다. ...

November 7, 2024 · 2 min · Me

Little Endian

Little Endian 리틀 엔디안(Little Endian)은 컴퓨터 시스템에서 메모리에 데이터를 저장하는 중요한 바이트 순서 방식이다. 엔디안은 컴퓨터가 여러 바이트로 구성된 데이터(예: 정수, 부동소수점)를 메모리에 저장하는 순서를 나타내는 용어이다. 리틀 엔디안은 현대 컴퓨터 시스템에서 가장 널리 사용되는 바이트 순서 방식이다. 대부분의 개발자는 리틀 엔디안 시스템에서 작업하게 될 가능성이 높지만, 네트워크 프로그래밍이나 다양한 플랫폼 간의 데이터 교환에서는 엔디안 차이를 인식하고 적절히 처리하는 것이 중요하다. 엔디안 관련 문제는 종종 디버깅하기 어려운 미묘한 버그를 발생시킬 수 있으므로, 바이너리 데이터를 처리할 때 항상 엔디안을 고려하는 습관을 들이는 것이 좋다. 다행히 대부분의 현대 프로그래밍 언어와 라이브러리는 엔디안 변환을 위한 도구를 제공하므로, 이러한 도구를 적절히 활용하면 엔디안 관련 문제를 효과적으로 처리할 수 있다. ...

December 13, 2024 · 3 min · Me

Big Endian

Big Endian 빅 엔디안(Big Endian)은 컴퓨터 시스템에서 데이터를 저장하는 바이트 순서 방식 중 하나이다. 엔디안은 컴퓨터가 메모리에 다중 바이트 데이터를 저장하는 순서를 의미한다. 모든 데이터는 결국 바이트 단위로 저장되는데, 2바이트 이상의 데이터(예: 정수, 부동소수점)를 저장할 때 바이트 배열 순서가 중요해진다. 빅 엔디안은 다중 바이트 데이터에서 가장 중요한 바이트를 먼저 저장하는 방식으로, 특히 네트워크 프로그래밍이나 크로스 플랫폼 개발에서 중요하다. 개발자는 데이터 교환 시 엔디안 차이를 인식하고 적절히 변환하는 것이 중요하다. 현대 프로그래밍 언어와 라이브러리는 대부분 이러한 변환을 위한 도구를 제공하므로, 이를 적절히 활용하면 엔디안 관련 문제를 효과적으로 처리할 수 있다. ...

December 13, 2024 · 3 min · Me