본문 바로가기

컴퓨터 공학

(76)
정보 보호) SSL, HTTP, HTTPS SSL(Secure Socket Layer) : 보안 소켓 계층 서버-서버 또는 서버-클라이언트 사이에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술 TLS(Transport Layer Secure Protocol) TLS 네스케이프에 의해서 SSL이 발명되었고, 이것이 점차 폭넓게 사용되다가 표준화 기구인 IETF의 관리로 변경되면서 TLS라는 이름으로 바뀌었습니다. TLS 1.0은 SSL 3.0을 계승합니다. 하지만 TLS라는 이름보다 SSL이라는 이름이 훨씬 많이 사용되고 있습니다. 출처: https://12bme.tistory.com/80 [길은 가면, 뒤에 있다.:티스토리] HTTP (HyperText Transfer Protocol) 와 HTTPS (HyperText Tr..
자료구조/Python3) 큐 두 개로 스택 구현하기 두 개의 큐로 스택을 구현할 수 있다. 이때 큐는 이미 구현된 것 클래스를 사용했다. class Stack: def __init__(self) -> None: self.inq = linked_list_queue.Queue() self.outq = linked_list_queue.Queue() ... push 큐 둘 중 하나에 값을 enqueue해주면 된다. 이건 일반적인 스택 push 방법과 동일하다. ... def push(self, data) -> None: self.inq.enqueue(data) ... pop 이 부분에 조작이 필요하다. 일단 값을 추가한 큐(=inq)에 값이 1개 남을 때까지 dequeue에서 앞에 있는 값들을 모두 또 다른 큐(=outq)에 넣어준다. 그러면 먼저 들어간 요소들..
자료구조/Python3) 스택 2개로 큐 구현하기 스택과 큐는 출력되는 순서가 정반대다. 스택은 가장 나중에 들어간 요소가 가장 먼저 나오고, 큐는 가장 먼저 들어간 요소가 가장 먼저 나온다. 이러한 특성을 이용해서 스택 2개로 큐를 구현할 수도 있다. 스택은 미리 구현해 둔 클래스를 사용했다. 일단 스택 두개를 가지고 있어야 한다. import linked_list_stack class Queue: def __init__(self): self.in_stack = linked_list_stack.Stack() self.out_stack = linked_list_stack.Stack() ... enqueue 데이터 삽입은 그냥 스택 둘 중 하나에 넣으면 된다. 이 스택은 나는 In_stack이라고 선언했다. ... def enqueue(self, data..
자료구조/Python3) 연결 리스트로 큐 구현하기 Queue는 선입선출 (First In First Out) 형식의 자료구조이다. 브라우저가 Javascript를 동작시킬 때 api콜, setTimeout 등 비동기로 처리할 수 있는 함수들은 콜 스택에 쌓지 않고 web api에서 비동기로 처리한 후 처리 결과와 함께 콜백 함수를 테스크 큐에 넣는다. 이 때 테스크 큐가 큐 구조로 이루어져 선입선출 방식으로 작동한다. python에서는 collections라는 라이브러리에 deque 모듈을 임포트해서 사용하면 간단하지만 원리를 이해하기 위해 연결리스트로 구현해보았다. class Node 연결리스트의 노드는 각 노드의 값과 다음 노드를 가리키는 포인터로 이루어져있다. class Node: def __init__(self, data) -> None: sel..
자료구조/Python3) 연결리스트로 스택 구현 후입 선출 (Last in First Out) 자료구조인 스택은 Python에서 이미 list[]라는 자료형으로 구현되어 있다. 그래서 내장된 append, pop 함수를 이용해서 push,pop 메소드를 간단하게 구현할 수 있다. 그래서 이번에는 리스트 자료형을 사용하지 않고 각 노드가 next 노드에 대한 포인터를 가지고 있는 연결리스트로 스택을 구현해보았다. class Node class Node: def __init__(self, data): self.data = data self.next = None 연결 리스트의 각 노드들은 값(=data)을 가지고 다음 노드에 대한 포인터 (=next)를 갖는다. class Stack 스택은 기본적으로 top 포인터를 가지고 있다. LIFO 구조로 데이터에 ..
SQLD) 내가 보려고 정리한 사소한 포인트 정리 반정규화 데이터 조회시 디스크 입출력 양이 많아서 성능이 저하되거나 조인으로 인한 성능저하가 예상되는 경우 반정규화 수행 반정규화 수행 전, 통계/중복/이력/부분 테이블 추가를 통해 반정규화를 회피하려고 함 반정규화 검토 대상 한 테이블의 일정 범위만 자주 조회하는 경우 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우 통계성 정보를 자주 필요로 하는 경우 통계 테이블을 추가 테이블이 지나치게 많은 조인이 필요한 경우 데이터 성능 로우 체이닝 : 로우 길이가 너무 길어서 두 개 이상의 데이터 블록에 걸쳐서 하나의 로우가 저장되는 경우 로우 마이그레이션 : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식으로 디스크..
SQLD) 데이터베이스 구조와 성능 1. 대용량 데이터에 따른 성능 테이블 반정규화 중 테이블 분할 관련 내용 블록 : 테이블의 데이터 저장 단위 대량 데이터 발생으로 인해 발생하는 현상 블록 입출력 횟수가 증가 → 디스크 입출력 횟수 증가 → 성능 저하 row chaining : 행 길이가 너무 길어 여러 블록에 걸쳐 저장되는 형상 row migration : 수정된 데이터가 해당 블록이 아닌 다른 블록의 빈 공간에 저장되는 현상 테이블 분할은 블록, 디스크 입출력을 감소시킴 Partitioning 테이블 수평 분할 기법 (레코드, 행 기준) 논리적으로는 하나의 테이블이지만 물리적으로 여러 데이터 파일에 분산 저장 데이터 조회 범위를 줄여 성능을 향상시킴 종류 range partition : 데이터 값의 범위를 기준으로 분할 list p..
반정규화 De-normalization 1. 반정규화 기본 개념 데이터 무결성을 희생하고, 데이터 중복을 허용하여 조인을 줄여 조회 성능을 향상시키는 방법 시스템 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터모델을 통합, 중복, 분리하여 의도적으로 정규화 원칙을 위배하는 행위 절차 반정규화 대상 조사 뷰, 클러스터링, 인덱스, 애플리케이션 등 다른 성능 향상 방법 검토 반정규화 적용 2. 테이블 병합 자주 조인되는 두 개의 테이블을 하나로 합치는 것 특징 데이터 조회 성능은 향상 중복 데이터가 생겨 처리량이 증가 not null, default,check 등 제약 조건 설계가 어려움 종류 1:1 관계 테이블 병합 : 병합했을 때 이행적 종속이 발생하더라도 자주 변경되는 정보가 아니고 조회시 조인이 자주되는 경우가 많은 경우 병..