본문 바로가기

DataBase6

Redis Sentinel 이해하기 단기간 동안 살아있는 인증번호라던가 특정 시간 동안 유효해야 하는 토큰 같은 경우 일반적으로 Redis를 이용하여 보관한다. 만약 Redis에 장애가 생기기라도 한다면 운영되고 있는 서비스에 큰 영향을 주게 된다. 특히 인증, 인허와 같은 개념이 필요한 서비스는 더욱 그렇다. Redis는 Disk 기반이 아닌 인메모리 데이터 베이스이기 때문에 영속성이 보장되지 않는다. 즉, 장애가 발생하면 데이터가 모두 유실될 수도 있다는 말이다. 이를 해결하기 위해서 복제본을 만들어두고 원본이 되는 Redis에 장애가 생겼을 때 복제본의 데이터를 가져다 쓸 수 있다. Redis에서 제공하는 High Availibility 기술로는 Master-Slave 형태의 Replication을 제공한다. 소프트웨어 아키텍쳐 패턴.. 2023. 3. 2.
Mysql JSON 형태로 조회하기 * 2022년 9월 16일 velog에 작성했던 게시글을 옮겨온 글입니다. 일대다 관계를 갖는 데이터 테이블 형태는 아주 흔하게 볼 수 있다. 웹 서비스의 가장 간단하고 기본적인 형태인 게시판을 예로 들면 한명의 사용자는 여러 게시글을 작성할 수 있다. 반대로 한개의 게시글은 여러명이 작성자가 될 수는 없다. 이것이 바로 onetomany 형태의 관계이다. 만약 사용자가 내가 쓴 글을 보려고 마이페이지에 들어가 내가 쓴 글을 조회한다면 우리는 어떻게 데이터를 넘겨줘야 할까. 보통 데이터를 주고 받을 때 Json, xml 형태로 가장 많이 자료를 넘긴다. 애초에 둘 다 데이터를 저장하고 전달하기 위해 만들어진 형태이기 때문이다. 또한 계층적인 데이터 구조를 가지기 때문에 한번에 얽혀있는 정보들을 표현할 수.. 2022. 12. 31.
데이터를 운반하는 트럭 Packet Node.js, typeORM, Mysql을 사용하는 프로젝트를 할 때 SELECT 쿼리문을 이용하여 데이터를 조회했더니 다음과 같은 형태의 결과를 얻을 수 있었다. [ RowDataPacket { id: 1, quantity: 1 }, RowDataPacket { id: 2, quantity: 10 } ] RowDataPacket 그리고 객체의 형태로 원하는 데이터들이 나열된 배열이 출력되었다. 이때까진 세세한 개념까지 깊이 공부할 여유가 없어서 데이터를 담아주는 바구니같은 개념이겠거니 하고 넘어갔었다. Packet에 대해 글을 작성하게된 계기는 DELETE 쿼리문의 에러 핸들링 과정에서 발생했다. bookings(예약) 테이블에 실제로 존재하지 않는 class_id와 user_id의 조합이라면 당연히.. 2022. 12. 31.
쿼리문을 이용한 공격 SQL Injection * 2022년 10월 19일 velog에 작성했던 게시글을 옮겨온 글입니다. 해커들이 사용하는 가장 흔한 웹 해킹 방법이 바로 SQL Injection이다. 조작된 SQL 쿼리문을 이용하여 데이터 베이스를 실행시키는 방식으로 이루어진다. SQL Injection 안에서도 여러가지 기법이 존재한다. 가장 흔하게 이용되는 기법은 논리적 오류를 기반으로 한다. 1. 인증 우회 논리적 오류 기반 SQL Injection SELECT * FROM users WHERE user_id = 1; 1번에 해당하는 유저가 없다면 해당 쿼리는 아무 결과도 출력하지 않는다. SELECT * FROM users WHERE user_id = 1 OR 1=1; 그러나 OR 1=1 절을 붙여주면 모든 users 데이터가 조회된다. .. 2022. 12. 31.
콜백 지옥에 이은 join 지옥 필요한 형태의 데이터를 불러오기 위해 불가피하게 여러 테이블을 join 해야 하는 경우가 있다. 예를 들어 3개의 테이블을 join 하여 조회할 때 3개의 테이블에 포함된 모든 데이터를 조회해야 한다. 즉, join을 하는 수가 많아질 경우 더 많은 데이터를 조회해야 한다는 의미이다. 이는 속도의 저하를 불러온다. Join Algorithm join은 데이터 베이스에서 두 개 이상의 테이블을 엮어서 관련된 데이터를 가져오는 작업을 수행하는 SQL 구문이다. 여러 테이블에 한 번에 접근할 수 없으므로 어떤 테이블부터 접근할지 결정하는 방법이 존재한다. 그 방법이 바로 Join Algorithm이다. MySQL에는 Nested loop join, Block nested loop join, Batched ke.. 2022. 12. 14.
DB와 DBMS의 차이점 DB, DataBase, DBMS, DB Application 그리고 DBS 등 데이터 관련 여러가지 용어들이 있다. 대개 DB와 DBMS의 차이점까지는 알고 있는 사람들이 많을 것이다. 기술면접 질문에 종종 나오기 때문이다. 그렇다면 나머지 용어들은 어떤 개념일까. 정확하게 구분해서 알아보자. DB (DataBase) 한마디로 정리하면 데이터들의 집합이다. 마구잡이로 저장된 형태가 아닌 정리되어 체계화된 데이터의 모음을 저장하고 있는 공간을 말한다. 크게 관계형 데이터 베이스와 비관계형 데이터 베이스로 나눌 수 있다. 관계형 데이터 베이스는 일반적으로 표 형태의 테이블로 구성되며, 데이터 간의 관계를 정의할 수 있다. DBMS (DataBase Management System) DB를 관리하고 운영하.. 2022. 12. 14.