[ Basic ](30)
-
SSL/TLS, HTTPS 기초 개념
대표적인 암호화 방식 1. 공유키 암호화(대칭키 암호화), Symmetric cryptography - '하나의 키'로 암호화와 복호화를 하는 방식 - 암호화, 복호화 속도가 빠르다는 장점이 있지만 키를 안전하게 공유하는 방법이 어려움 - 키를 공유하는 과정에서 탈취가 발생하면 문제가 될 수 있음 - 암호화된 데이터를 공유할 모든 사람에게 같은 키를 나눠줘야 하는 과정이 쉽지 않음 2. 공개키 암호화(비대칭키 암호화), Asymmetric cryptography - 암호화와 복호화에 쓰이는 키가 서로 다른 방식 - 이때 암호화에 쓰인 키와 복호화에 쓰인 키가 하나의 'pair'를 이룸 - 한쪽 키로 암호화한 것은 다른 한 키로만 복호화할 수 있음 - 두 키를 개인키(비밀키), 공개키라고 부르며 공개키는 ..
2023.05.03 -
[DB] Apache Commons DBCP 2.9 오픈소스 분석
Apache Commons DBCP 2.9 - 아파치의 커넥션 풀 오픈소스인 Commons DBCP는 BasicDataSource라는 타입으로 DataSource를 제공한다. - 커넥션 풀 및 DataSource의 기본 개념이 필요하다면 포스팅을 참고해 주시길 바란다. 커넥션 풀 자료구조: LinkedBlockingDeque DBCP2 기준으로 커넥션 풀은 LinkedBlockingDeque 타입의 객체로 관리된다. 아파치가 커넥션 풀 구현체는 덱 기반으로 한 이유는 'lifo' 설정 때문이다. 커넥션 풀 설정 값에 lifo라는 프로퍼티가 있는데, 이 값을 true로 할 경우 stack 기반으로, 그렇지 않을 경우엔 Queue 기반으로 동작한다. LinkedBlockingDeque의 요소는 Node 타입..
2022.11.23 -
[DB] 알아두면 좋은 데이터베이스 설계 지식 (파티셔닝, 레플리케이션, 클러스터링)
DB Partitioning - 서비스의 크기가 점점 커지고 데이터의 규모 또한 커지면서, DB 시스템의 용량(storage)의 한계와 성능(performance)의 저하를 유발하게 되었다. - 이에 대한 해결책으로 테이블을 파티션이라는 단위로 나눠어 관리하게 되었으며 이러한 과정을 DB 파티셔닝이라고 한다. - 이러한 관점에서 보았을 때 데이터베이스 정규화(Normalization)도 일종의 파티셔닝으로 볼 수 있지만 파티셔닝은 성능 향상을 목적으로 하며 정규화는 중복된 데이터 방지 및 이상현상(Anomaly) 예방을 목적으로 한다. 1. Vertical Partitioning (수직 파티셔닝) 말 그대로 테이블의 컬럼을 기준으로 수직으로 파티셔닝 하는 것을 의미한다. 예시 게시글 데이터를 의미하는 a..
2022.10.13 -
[Network] Forward Proxy, Reverse Proxy
Proxy의 사전적 의미는 남의 일을 대신 처리한다라는 뜻을 가진다. 즉, 마치 누군가의 대리인처럼 역할을 하는 존재이다. Spring Proxy, Network Proxy, Proxy Pattern 등 Proxy는 여러 분야에서 사용되지만 이번 포스팅에서는 Proxy의 기본이 되는 Network Proxy에 대해 알아본다. Proxy의 종류 Forward Proxy 일반적으로 말하는 프록시는 Forward Proxy이다. Forward Proxy는 클라이언트와 인터넷 사이에 위치하게 된다. 즉, Forward Proxy가 클라이언트 쪽에 붙어서 흐름을 대신 처리한다. Forward Proxy의 특징 1. 캐싱 - 클라이언트가 '요청한 내용과 이에 대한 응답 내용'을 캐싱한다. - 서버에서 클라이언트에 ..
2022.09.22 -
[ubuntu] apt의 이해
윈도우에서 프로그램 설치 절차 1. 홈페이지 접속 후 설치 파일 또는 실행 파일 다운로드 2. 설치 파일(실행 파일) 실행 후 설치 - 프로그램이 하드디스크에 특정 위치에 복사 - 윈도우 시작 프로그램에 등록 - 해당 프로그램이 사용할 네트워크 포트 설정(방화벽 open 등) - OS 시작 시 자동으로 시작되도록 설정 - 필요한 환경변수 설정 우분투(wget)에서 프로그램 설치 절차 1) 홈페이지 접속 후 실행파일 다운로드 (wget) 2) tar 아카이브 해제 또는 압축파일 해제 3) .deb 확장자 파일 설치 (설치 명령어 필요) 4) 필요한 환경변수 설정 우분투에서는 이러한 설치 파일을 wget으로 다운로드할 수도 있지만 우분투 repository라는 저장소를 제공하기도 한다. 대부분의 프로그램이 ..
2022.06.30 -
[DB] Lock 기반으로 트랜잭션 격리수준 이해하기
트랜잭션의 특징 : ACID - Atomicity(원자성) : All Or Nothing - Consistency(일관성) : 일관성 있는 DB 상태를 유지해야 함(정해진 DB컬럼에 대한 일관성, 제약조건에 대한 일관성 등) - Isolation(격리성) : 트랜잭션 간 얼마나 영향을 주고받냐를 설명함(4가지 격리수준 참고) - Durability(지속성) : 트랜잭션 결과는 항상 DB에 기록되어야 하며 문제가 발생하더라도 복구할 수 있어야 함 트랜잭션은 위 4가지 성질을 모두 만족해야 한다. 하지만 Isolation의 경우 완벽한 격리를 하게 될 경우 트랜잭션들 간에 완전히 순차적으로 실행되어야 하기 때문에 성능상 이슈가 발생할 수 있다. 따라서 Isolation의 경우는 4가지 수준으로 구분하며 "얼..
2022.06.20 -
[DB] DB드라이버, 커넥션 풀, DataSource
애플리케이션에서 데이터베이스와 커넥션을 생성하는 과정 1) 애플리케이션 로직은 DB 드라이버(어떤 DB를 사용할 것이냐에 따라 다름)를 통해 커넥션을 조회한다. 2) DB 드라이버는 DB와 TCP/IP 커넥션을 맺는다. (3-way handshake 발생) 3) TCP/IP 커넥션이 완료되면 DB 접속을 위한 ID 및 Password 등과 같은 정보를 DB에 전달한다. 4) DB는 사용자 인증을 완료하면 DB 내부적으로 세션을 만든다. 5) DB는 커넥션 생성이 완료되었다는 응답을 보낸다. 6) DB 드라이버는 애플리케이션 로직으로 커넥션 객체를 반환한다. 단점 - 커넥션을 생성하는 것은 복잡하고 시간도 오래 소요되는 과정이다. - 시간이 오래 걸리기 때문에 사용자에게 느린 응답을 보일 수밖에 없다. -..
2022.06.19 -
[OS] ForkJoinPool
ForkJoinPool은 기본 개념은 큰 업무를 작은 업무 단위로 쪼개고, 그것을 각기 다른 CPU에서 병렬로 실행한 후 결과를 취합하는 방식으로 분할정복 알고리즘과 유사하다. 대표적으로 Java에서는 병렬스트림을 사용할 때 사용된다. ForkJoinPool 동작 방식 1) 큰 task를 작은 단위로 쪼갠다. 2) 부모 쓰레드로 부터 로직을 복사해서 새로운 쓰레드에 쪼개진 업무를 수행한다. - Fork 과정 3) 2번 과정을 수행하다가 특정 쓰레드에서 더 이상 Fork가 발생하지 않고(IDLE CPU의 개수와 작업량에 따라 어디까지 분할할지 내부적으로 결정됨) task 처리가 완료되었다면 그 결과를 부모 쓰레드에서 Join 하여 값을 '취합'한다. - Join 과정 4) 3번 과정을 반복하다가 최초의 F..
2022.06.18 -
[DB] Clustered / Non-Clustered Index
데이터베이스에 인덱스가 없다면 테이블에 데이터가 삽입되는 순서는 특정 제약이 없다. 또한 데이터 조회 시(일반적인 where절 사용) 테이블 풀스캔이 발생한다. 이때 match 되는 데이터를 찾더라도 데이터 순회를 끝내는 것이 아니라, 테이블의 끝까지 데이터를 '순차 탐색'하면서 match 되는 데이터를 '모두' 찾는다. 이러한 테이블 풀스캔이 항상 나쁘다고 할 순 없지만 데이터가 많아질수록 성능에 문제가 발생할 것이다. 물리적으로는 한 테이블의 데이터 record들이 위와 같은 페이지 구조로 저장된다. 만약 record들을 특정 컬럼 기준으로 정렬해서 저장한다고 하면 테이블 풀스캔을 하지 않고도 찾고자 하는 데이터를 찾을 순 있지만 순차 탐색을 해야 한다는 단점이 존재한다. 이를 해결하기 위한 가장 대..
2022.05.31 -
[DS] 방대한 자료를 담는 자료구조 B Tree (고급편)
Balanced Tree (불균형) 이진탐색트리의 문제점은 최악의 경우 O(N)이 발생한다는 것이다. Balanced Tree는 항상 균형을 맞추어진 상태로 유지함으로써 O(logN)의 성능을 보인다. 하지만 데이터의 삭제, 삽입, 갱신이 발생할 때 Balance를 유지하기 위한 연산이 추가로 필요하게 된다는 단점이 있다. Balanced Tree의 종류로 AVL Tree와 레드블랙트리, 2-3 Tree, 2-3-4 Tree, B Tree 등이 있다. B-Tree는 다차원트리 B-Tree는 Balanced Tree이면서 다차원 트리이다. 하나의 노드가 가질 수 있는 자식 노드의 개수(링크 개수)를 M이라고 했을 때 하나의 노드에 '최대' M-1개의 자료를 담을 수 있으며 이 경우 M차 다차원 트리라고 한..
2022.05.31