본문 바로가기

반응형

공부 정리

(141)
대칭키 vs 비대칭키 암호화는 허용되지 않는 접근이나 조회로부터 정보를 보호 할 책임이 있습니다. 암호화는 인증된 사용자만 복호화가 가능한 방식으로 데이터를 암호화합니다. 어떠한 노출과 공격에도 써드 파티의 접근을 허용해서는 안됩니다. 일반적으로 암호화 과정은 일반 텍스트를 암호화된 텍스트로 바꾸는 과정입니다. 알고리즘을 이용해서 특별한 키를 사용합니다. 우리가 암호문을 가지고 있어도 알고리즘과 키가 없다면 우리 또한 데이터를 읽을 수 없습니다. 대칭 암호화 대칭 암호화는 정보를 암호화하고 복호화하기위해 하나의 키를 사용하는 알고리즘입니다. 다른 말로, 전송자는 데이터를 암호화하기 위해 비밀키를 사용합니다. 그리고나서, 수신자는 데이터를 복호화하고 읽기 위해서 같은 키를 사용합니다. 그래서, 키는 데이터를 복호화하기 위해 관..
TLS/SSL HTTP와 HTTPS 사람들은 인터넷에서 웹사이트 데이터를 전송하기 위해 HTTP를 사용합니다. HTTP는 데이터를 명시적인 텍스트 형식으로 전송합니다. 단, 이 명시적인 텍스트 형식의 전송은 인터넷에서 민감한 개인정보, 카드번호, 비밀번호 등을 보내지 않는 경우를 말합니다. 만약에 데이터가 송신자에 의해서 암호화되지 않는다면, 해커는 중간에 민감정보를 탈취합니다. HTTPS는 HTTP의 보안 문제를 해결하기 위해 등장했습니다. HTTPS에서 클라이언트와 서버 사이에 데이터를 암호화할 수 있습니다. 그러므로, 해커는 데이터를 가로채도 암호화된 데이터만 볼 수 있습니다. 기본의 메세지를 보려고 하더라도, 해커는 복호화 키가 필요합니다. 요즘에는, 웹사이트가 민감정보를 보내지 않더라도 보안을 위해서 HTTP..
Connection Pool & DataSource 개요 기존에 커넥션을 얻기 위해 JDBC 구현체를 DriverManager로 찾던 전통적인 방법의 한계점과 대안을 알아보겠습니다. Connection Pool과 DataSource 중심 코드의 구성과 성능 개선을 확인해보겠습니다 전통적 Jdbc DriverManger의 문제점 기존 DriverManager는 커넥션이 필요할 때마다 새롭게 생성하고 작업이 끝나면 해제하는 작업을 반복했습니다. 커넥션을 연결하고 종료하는 작업이 가볍지 않기 때문에 매 요청마다 커넥션을 만드는 것은 리소스가 많이 필요하고 시간이 걸리는 작업이라는 한계가 있었습니다. 그래서 커넥션 풀이라는 기술이 등장했습니다. 커넥션 풀(Connection pool) 커넥션 풀이란, 미리 커넥션을 풀에 담아두어서 커넥션이 필요할때마다 꺼내어주는..
JDBC 의 역사 개요 JDBC의 역사를 알아보겠습니다. 일반적인 애플리케이션 - DB 사용법 아래 그림처럼, 애플리케이션 서버는 총 3가지 과정으로 DB와 연동하여 원하는 데이터를 조회, 추가, 수정, 삭제 등을 합니다. 첫째로 TCP/IP 커넥션 연결, 두번째로 SQL 전달, 세번째로 결과 응답입니다. 문제점 1. DB 종류에 따라 데이터베이스 사용 코드가 달라집니다.(MySQL, Oracle 등등) 2. 개발자는 직접 커넥션 연결, SQL 전달, 결과 응답 코드 작성을 데이터베이스마다 학습해야 합니다. JDBC 표준 인터페이스 JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다. JDBC는 데이터베이스에서 자료를 쿼리 하거나 업데이트하는 방법을 제공합니다 - 나무위키 JDBC 표준 인터페이스 ..
DB의 인덱스와 B-tree, B+tree 개요 DB의 인덱스 개념이 궁금해 정리했습니다. MySql은 인덱스의 구조도 같이 찾았습니다. 인덱스는 B-tree, B+tree 2가지 구현방식이 있으며, 결론적으로 B+tree 방식이 사용됩니다. 각 특징은 무엇이고 차이점은 무엇인지 확인해 봅시다. 학습 목표 B-tree와 B+tree의 특징을 알 수 있다 MySql에서 왜 B+tree가 사용되는지 알 수 있다 B-tree 이진트리는 일반적으로 하나의 노드에 하나의 값, 최대 2개의 자식으로 구성되어 있습니다. 하지만 B-tree는 하나의 노드에 여러 개의 값을 가질 수 있고 최대 자식이 2개 이상 일 수 있습니다 아래 사진처럼, B-tree는 3개의 값, 4개의 자식이 있을 수 있습니다. 하나의 노드의 최대 자식수가 3개이면 3차 B-tree, 4..
낙관적 잠금과 비관적 잠금으로 동시성 해결하기 개요 동시성 문제를 이전 시간에 정리했는데, 결국 동시성 문제를 어떻게 해결할 것인가가 다음 관심사입니다. 따라서, 이번 시간에는 동시성 문제를 해결하기 위한 데이터베이스의 잠금 모델 2가지 낙관적 잠금과 비관적 잠금을 알아보려고 합니다. 낙관적 잠금은 상황을 낙관적으로, 비관적 잠금은 비관적으로 본다고 접근하면 됩니다. 비관적 잠금(Pessimistic Lock) 비관적 잠금은 자원 경쟁을 비관적으로 보기 때문에, 다중 트랜잭션이 데이터를 동시에 수정할 것이라고 가정합니다. 따라서 하나의 트랜잭션이 데이터를 읽는 시점에서 락(Lock)을 걸고, 조회 또는 갱신 처리가 완료될 때까지 유지합니다. 조회 때 락 잠금을 획득하는 방법은 대표적으로 SELECT.. FOR UPDATE 입니다. SELECT...F..
트랜잭션 격리 수준 개요 회사 게시판에서 db 트랜잭션 관련하여 재미있는 글을 봤습니다. 예약 시스템을 만드는데 select로 채번 순서를 가져오고 insert를 하다 보니 중복되는 예약번호가 나오는 문제가 있었고 어떻게 해결했는지를 적은 글이었습니다. 다중 쓰레드의 동시성으로 발생한 문제이며, select 시 동시성 문제를 해결해야 했습니다. 그러면서 트랜잭션 격리 레벨이 궁금해져서 찾아보게 되었습니다. 트랜잭션이란? 트랜잭션이란, 데이터베이스 작업의 논리적 단위입니다. 삽입, 수정, 삭제가 성공적으로 끝나 영구적으로 반영을 할 때 commit을 사용합니다. 삽입, 수정, 삭제의 변경 내용을 취소하고 복구해야 한다면 rollback을 사용합니다. DBMS는 잠금(Lock) 기능을 사용하며 다른 트랜잭션의 접근을 제어하여 ..
CORS란 무엇인가? 개요 웹 프로그래밍에서 프런트와 백엔드 작업을 하면, 한번씩 발생하는 문제가 CORS 문제입니다. 현재 하는 업무가 이런 경우는 없었지만, 개인 프로젝트 시 발생했던 문제를 기억하며 해당 문제가 왜 발생하고 어떻게 방지할 수 있는지 궁금증이 생겼습니다. 그래서 개념과 스프링에서 사용 방법을 정리해보려고 합니다. CORS란? CORS(Cross-Origin Resource Sharing)는 출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념입니다. 직역하면, 교차되는 출처 자원들의 공유입니다. 다른 출처에 있는 자원을 요청한다고 하면, 이를 교차 출처 요청이라고 부릅니다. 교차 출처 리소스 공유(Cross-Origin Resource Sharin..

반응형