본문 바로가기

분류 전체보기240

[mongoDB] 인덱스(Index) 1) 인덱스란? 1-1) 인덱스의 구분 1-1-1) 역할 1-1-2) 저장 방식 1-1-3) 중복 허용 여부 1-1-4) 기능 1-2) 인덱스 내부 1-3) 인덱스 키 엔트리 자료 구조 2) 인덱스를 사용하는 방법 2-1) 인덱스 레인지 스캔 2-2) 인덱스 프리픽스(Prefix) 스캔 2-3) 커버링 인덱스 2-4) 인덱스 풀 스캔 2-5) 컴파운드 인덱스 (Compound Index) 2-5-1) 복합 필드 인덱스 2-6) MongoDB의 Hash Index 2-7) 멀티 키 인덱스 (Multi key Index) 2-7-1) 멀티 키 인덱스의 정렬 2-8) Full Text Search Index (전문 검색 인덱스) 2-8-1) N-Gram 알고리즘 형태소 분석과 N-Gram의 장단점 참고 자료 .. 2022. 7. 18.
[mongoDB] 샤딩(Sharding) 1) 샤딩(Sharding)이란? 1.1) 샤딩의 필요성 1.2) 샤딩의 종류 2) MongoDB 샤딩 아키텍처 2.1) 컨피그 서버 컨피그 서버의 복제 방식 2.2) 라우터 주요 역할 쿼리 분산 배포 3) 샤딩 알고리즘 청크 3.1) 레인지 샤딩(Range Sharding) 3.2) 해시 샤딩(Hashed Sharding) 제약 사항 3.3) 지역 기반 샤딩(Zone Sharding) 사용 목적 4) 프라이머리 샤드 5) 청크 밸런싱 5.1) 샤드 클러스터 밸런서 5.2) 청크 스플릿(Chunk split) 6) 샤딩으로 인한 제약 6.1) 트랜잭션 6.2) 샤딩과 유니크 인덱스 6.3) 조인과 그래프 쿼리 참고자료 1) 샤딩(Sharding)이란? 샤딩이란 데이터를 여러 서버에 분산해서 저장하고 처리.. 2022. 7. 18.
[mongoDB] WiredTiger 스토리지 엔진 1) 플러그인 스토리지 엔진 스토리지 엔진 특성 비교 2) 스토리지 엔진 혼합 사용 3) WiredTiger 스토리지 엔진 4) WiredTiger 스토리지의 저장 방식 5) 데이터 파일 구조 6) WiredTiger의 내부 작동 방식 공유 캐시 하자드 포인터(Hazard Pointer) 스킵 리스트(Skip-List) 캐시 이빅션(Cache Eviction) Checkpoint MVCC 데이터 블록(페이지) 운영체제 캐시(페이지 캐시) 압축 암호화 참고자료 1) 플러그인 스토리지 엔진 클라이언트 드라이버 (Java, Python, C/C++, Go, Spark, OGG ... ) ↕ 네트워크 프로토콜 (Wire Protocol) 쿼리 처리기, 샤드 관리자, 보안 관리자, 레플리케이션 매니저 스토리지 엔.. 2022. 7. 15.
[DB] SQL Injection 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 1. 공격 방법 1.1. Error based SQL Injection 보통 로그인을 할 때, 아이디와 비밀번호를 input 창에 입력하게 된다. 위의 사진에서 보이는 쿼리문은 일반적으로 로그인 시 많이 사용되는 SQL 구문이다. 해당 구문에서 입력값에 대한 검증이 없음을 확인하고, 악의적인 사용자가 임의의 SQL 구문을 주입했다. 주입된 내용은 ‘ OR 1=1 -- 로 WHERE 절에 있는 싱글쿼터를 닫아주기 위한 싱글쿼터와 OR 1=1 라는 구문을 이용해 WHERE 절을 모두 참으로 만들고, -- 를 넣어줌으로 뒤의 구문을 모두 주석 처리 했다. 매우 간단한 구문이지만, 결론적으로 Users 테이블.. 2021. 10. 13.
[OS] 페이지 교체 알고리즘 페이지 부재 발생 → 새로운 페이지를 할당해야 함 → 현재 할당된 페이지 중 어떤 것 교체할 지 결정하는 방법 Demanding Paging은 요구되어지는 페이지만 backing store에서 가져온다. 하지만 프로그램들이 계속 실행함에 따라 요구 페이지도 계속 늘어나고, 언젠가는 메모리가 가득 차게 될 것이다.(memory full) 여기서 다른 프로그램이 새로 실행되거나 실행중인 프로세스가 다른 페이지를 요구한다면 이미 메모리에 있는 페이지 중 하나를 다시 backing store에 보내고(page-out), 새로운 페이지를 메모리에 올려야한다.(page-in) 이를 페이지 교체라고 한다. 여기서 backing store로 page-out이 된 페이지를 victim page라고 한다. 요구 페이징(D.. 2021. 10. 13.
[OS] 페이징 & 세그먼테이션 Paging vs Segmentation 가상 메모리를 관리하는 기법 가상 메모리는 메모리에 로드된 즉, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 갖고 있는 것처럼 사용할 수 있도록 하는 것이다. 간단하게 말해 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. 가상 메모리는 각 프로세스당 메인 메모리와 동일한 크기로 하나씩 할당된다. 그 공간은 보조기억장치 공간을 이용한다. 프로세스의 일부만 메모리에 로드하고 나머지는 보조기억장치에 두는 형태이다. 이렇게 할당되면 메모리 관리 장치(MMU : memory management unit)에 의해 물리 주소로 변환되어 사용자가 메모리 맵핑이 어떻게 되는지 의식할 필요 없이 알아서 가상 메모리를 활용하여 작업한다. 내부 .. 2021. 10. 13.
[Web] Stateful vs. Stateless 서비스 1. Stateful Service Stateful '구조'는 Server와 Client간 세션의 'State(상태)'에 기반하여 Client에 response를 보냅니다. 이를 위해 서버 사이드에 '클라이언트와 서버의 동작, 세션 상태 정보'를 저장한다. TCP 대표적인 Stateful 구조를 따르는 프로토콜로 TCP가 있다. TCP의 3-way handshaking 과정을 생각해보면, Server와 Client는 3-way handshaking 과정에서 SYN과 SYNACK을 주고 받으며, 양단간 세션 '상태'를 established한 '상태'로 만든다. 세션 '상태'가 established가 되면 client와 server는 데이터를 주고 받을 수 있다. 이렇게 TCP는 세션 '상태'에 따라 Ser.. 2021. 9. 26.
[Network] OSI 7계층 OSI 7계층 Open System Intercon-nection 시스템 상호 연결에 있어 개방(열려있다, 표준)모델을 뜻한다 실제 인터넷에서 사용되는 TCP/IP OSI 참조 모델을 기반으로 상업적이고 실무적으로 이용될 수 있도록 단순하된 현실화의 과정에서 채택된 모형 7계층은 왜 나눌까? 표준과 학습도구 표준화를 통해 장비별 포트, 프로토콜을 구별 OSI 계층별 기능과 통신의 과정을 정립하여 교육하기 위한 목적으로 사용 통신이 일어나는 과정을 단계별로 알 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있다 캡슐화 & 역캡슐화 캡슐화(Encapsulation) 데이터를 전송할 때 각각의 레어마다 인식할 수 있는 헤더를 붙이는 과정 2계층(Data layer, 데이터링크계층)에서는 오류제어를.. 2021. 9. 9.
[DB] NoSQL NoSQL은 초고용량 데이터 처리 등 성능에 특화된 목적을 위해, 비관계형 데이터 저장소에, 비구조적인 데이터를 저장하기 위한 분산 저장 시스템이다. NoSQL NoSQL이 무엇의 약자인지는 사람에 따라 No SQL, Not Only SQL, Non-Relational Operational Database SQL로 엇갈리는 의견들이 있지만, 현재 Not Only SQL로 풀어 설명하는 것이 다수를 차지하고 있다. 이 말의 의미를 풀어보면, 단순히 기존 관계형 DBMS가 갖고 있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 것을 의미한다. 사용해야 하는 이유 NoSQL 데이터베이스는 탁월한 사용자 경험을 제공하기 위하여 유연성과 확장성을 비롯해 고성능의 매우 기능적인 데이터베이스를 필요로 하는 .. 2021. 9. 9.