CS(Computer Science) 정리
데이터 베이스
트랜잭션(Transaction)
데이터 베이스의 상태를 변화시키는 작업 중 더 이상 쪼개선 안되는 작업들의 모임이다.
즉, 원자성을 보장하는 작업들을 말한다. 트랜잭션이 진행되는 도중에 부분 작업이 실패하면 전체 작업에 영향을 끼치므로 롤백을 통해 처음으로 되돌려햐 하며 모든 부분 작업이 성공적으로 완료되면 커밋을 통해 변경 사항을 한꺼번에 데이터베이스에 반영하게 된다.
RDBMS - 관계형 데이터베이스 관리 시스템
모든 데이터가 관계로서 표현되는 데이터 베이스 시스템으로, 모든 데이터는 행, 열로 묶인 테이블의 형태로 사용자에게 제공된다.
테이블 형식의 데이터를 관계 연산자를 사용한 쿼리문을 날려 조작하게 된다.(SQL)
ex) MySQL, OracleDB, MariaDB ...
특징
- 데이터의 분류, 정렬, 탐색이 비교적 빠르다.
- 스키마가 정해져 있어 유연성이 떨어진다.
NoSQL - 비관계형 데이터베이스 관리 시스템
RDBMS와는 반대되는 형태의 데이터 베이스 시스템이다.
데이터를 Key-Value 나 Dovument(JSON), Graph 형태로 저장하기 때문에 관계형보다 간단하게 데이터 베이스를 구성할 수 있다.
ex) MongDB, Redis, Cassandra ...
특징
- 관계형 데이터 베이스에 비해 대용량의 데이터를 저장할 수 있다.(분산형 구조)
- 스키마가 정의되지 않아 변화에 유연하다.
B-Tree
데이터베이스나 파일 시스템에서 데이터 인덱싱을 위해 사용되는 트리로, 다음과 같은 특징을 갖는 트리이다.
각 노드들은 M 개의 데이터를 가질 수 있고, 각 데이터 사이마다 양 옆 데이터의 사이에 있는 데이터들을 가진 자식 노드에 대한 링크가 있다.
ex) A (B~E를 갖는 자식 노드 링크) F
한 노드가 M개를 넘어가게 되면 그 노드를 반으로 쪼개어 두 노드로 분할한다. 그리고 중간의 데이터를 부모 노드로 넘긴다. 부모 노드도 꽉찬다면 계속 반복한다.
B+ Tree
기존의 B 트리는 데이터에 대해 순차적으로 접근하기 힘들다.(오름차순으로 순회하고 싶을 경우 부모와 자식 사이를 왔다갔다 해야한다)
B+ 트리에선 Leaf 노드들은 모두 부모의 key값을 가지고 있고, 모든 Leaf 노드들이 연결 리스트 형태로 연결되어 있기 때문에 Leaf노드들 만으로 순차적인 접근이 가능하다.
부모 노드들은 모두 데이터에 대한 빠른 접근만을 위해 존재한다.
즉, 부모 노드들을 타고 Leaf 노드에 빠르게 접근 후, Leaf 노드들의 연결 리스트를 이용하여 순차적으로 데이터를 접근한다.
보안
대칭키와 비대칭키
- 대칭키(비밀키)
암호화된 데이터를 복호화할 수 있는 키가 단 하나뿐이다. 따라서 그 키를 비밀키로 하여 노출되지 않도록 하기 위한 전달 매커니즘이 필요하다.(Diffie-Hellman, SSL 프로토콜, Kerberos 등)
수행시간이 짧지만 여러 쌍의 사용자일 경우 각 쌍마다 비밀키가 생성되어 키 관리가 어려워진다.
인증 기능이 없다.
디스크 암호화에 주로 사용된다.
ex) DES, 3DES, AES, IDEA, RC4 등
- 비대칭키(공개키, 개인키)
각 사용자가 모두 자신의 공개키, 개인키 두 개의 키를 가지고 있다.
자신의 공개키로 암호화한 것은 자신의 개인키로 복호화가 가능하다.
자신의 개인키로 암호화한 것은 자신의 공개키로 복호화가 가능하다.
공개키는 모두에게 공개된 키이므로 전달하고자 하는 상대방의 공개키로 데이터를 암호화하여 보낸다. -> 수신자는 자신의 공개키로 암호화된 데이터이므로 자신의 개인키로 복호화할 수 있다.
공개키는 공개되지만, 개인키는 노출되지 않는 장점이 있다.
패스워드 암호화
- 단방향 해시 함수
텍스트를 해시 함수를 이용해 암호화된 다이제스트로 만든다.
원본 -> 암호화 는 쉽지만, 암호 -> 원본은 어려운 단방향성을 가진다.
원본이 조금만 변해도 다이제스트는 아예 달라지게 설계된 암호화 기법을 사용한다.
다이제스트를 무수히 많이 모은다면 원본 텍스트를 찾을 수 있는 단점이 있다.
솔팅 : 같은 텍스트라도, 다른 다이제스트를 갖는다면 복호화를 어렵게 할 수 있다.
사용자마다 다른 고유의 솔트 바이트를 사용하여 텍스트를 암호화한다.
솔트 바이트(32byte) + 원본 텍스트
키 스트레칭 : 여러 번의 해시 함수를 거쳐 암호화해서 무작위 대입 공격 시 시간이 오래 걸리도록 한다.
CRSF, XSS 공격
- CSRF 공격
사용자가 특정 웹사이트에 로그인된 상태(웹 사이트가 해당 사용자를 신뢰하는 상태)에서 공격자가 만든 위조 코드를 실행하면, 위조 코드에 의해 웹 사이트로 수정, 삭제, 등록 등의 요청을 보내고 웹 사이트는 사용자를 신뢰하기 때문에 공격자의 의도대로 요청을 수행하게 된다.
보안 대책
웹 사이트에선 민감한 요청에 해당하는 POST 요청에 대해 추가로 인증 절차를 거치고, 인증 관련 쿠키나 토큰은 수명을 짧게 해야 한다.
- XSS 공격
웹 문서에 보이지 않게 악성 스크립트문을 숨겨두어 사용자의 브라우저가 해당 문서를 읽어들일 때 악성 스크립트가 수행되고, 쿠키나 세션 등의 민감한 정보를 탈취하는 공격이다.
보안 대책
게시글 같은 공격자가 이용할 수 있는 입력 폼에 스크립트 필터링을 해준다.
htmlspecialchars : html 코드를 문자열 그대로 출력하게 해준다.
클라이언트의 브라우저에서 쿠키를 접근할 수 없게 한다.(HttpOnly)
HTTPS를 이용해서 통신한다.
네트워크
OSI 7계층
- 1계층 - 물리 계층
하드웨어간의 전기적 통신을 담당하는 계층으로 데이터 전송 단위는 bit이다.
- 2계층 - 데이터 링크 계층
전달되는 데이터들을 올바르게 네트워크 장비에 안착시켜주는 역할을 한다.
송신측과 수신측의 데이터 전송 속도를 맞춰주는 흐름제어, 오류가 있는 데이터를 폐기하는 오류 제어를 수행한다.
동일한 네트워크 내에서 MAC 주소를 사용하여 데이터를 주고 받는다.
데이터 전송의 단위는 Frame이다.
- 3계층 - 네트워크 계층
IP 주소를 사용하여 다른 네트워크로의 경로 설정을 담당한다.
데이터 전송의 단위는 패킷이다.
- 4계층 - 전송 계층
TCP/UDP 두 가지의 프로토콜이 있으며, TCP 는 전송되는 데이터에 대해 순서를 맞춰주어 상위 계층이 데이터의 신뢰성에 대해 신경을 쓰지 않아도 되게 해준다.
UDP는 데이터 신뢰성을 보장하지 않기 때문에 오류 정정보단 빠른 전송이 목적인 실시간 통신에 많이 쓰인다.
데이터가 최종 도착해야할 포트 번호를 부여한다.
TCP는 세그먼트, UDP는 데이타그램이 데이터 전송 단위이다.
- 5계층 - 세션 계층
두 노드간의 연결을 설정/해제 하는데에 관여한다. 오류 발생으로 연결이 끊겼을 때 연결 복구 기능을 한다.
- 6계층 - 표현 계층
전송되는 데이터를 인코딩 및 디코딩해주어 데이터 형식간의 차이를 적게 해준다.
- 7계층 - 응용 계층
실제 사용자가 사용하는 응용프로그램을 제공한다.
CORS(Cross Origin Resource Sharing)
도메인이나 포트 번호가 서로 다른 서버로의 자원을 요청하는 것.
이 때, 동일 출처 정책(SOP)에 의해 다른 서버로의 요청이 차단될 수 있다.
예를 들어, 프론트가 localhost:1234 , 백엔드가 localhost:3333 일 때, 프론트엔드에서 백엔드로 데이터를 요청하면 CORS가 발생할 수 있다.
서버에서 localhost:1234 도메인에 대해 허용을 해주면 해결된다.
DNS
DNS 란 www.example.com 같은 사람이 읽기 쉬운 웹 페이지의 주소와 실제 IP 주소를 맵핑해주는 시스템이다.
최상위 도메인부터 . 으로 구분해 하위 도메인으로 가며 최종 주소를 얻게 된다.
재귀적 DNS : 로컬 DNS 서버가 여러 DNS 서버에 모두 물어봐서 최종 주소를 클라이언트에게 알려주는 방식으로, 로컬 DNS 서버의 부하가 큼
반복적 DNS : DNS 서버는 자신의 다음 DNS 서버에 대한 정보만을 돌려주고 클라이언트가 다음 DNS에 대한 정보를 계속해서 물어보는 방식으로, 클라이언트와 서버 간의 요청/응답이 많다.
댓글
댓글 쓰기