본문 바로가기

db7

[DB] SQL Injection 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 1. 공격 방법 1.1. Error based SQL Injection 보통 로그인을 할 때, 아이디와 비밀번호를 input 창에 입력하게 된다. 위의 사진에서 보이는 쿼리문은 일반적으로 로그인 시 많이 사용되는 SQL 구문이다. 해당 구문에서 입력값에 대한 검증이 없음을 확인하고, 악의적인 사용자가 임의의 SQL 구문을 주입했다. 주입된 내용은 ‘ OR 1=1 -- 로 WHERE 절에 있는 싱글쿼터를 닫아주기 위한 싱글쿼터와 OR 1=1 라는 구문을 이용해 WHERE 절을 모두 참으로 만들고, -- 를 넣어줌으로 뒤의 구문을 모두 주석 처리 했다. 매우 간단한 구문이지만, 결론적으로 Users 테이블.. 2021. 10. 13.
[DB] 데이터베이스를 사용하는 이유와 성능 DBMS 탄생 배경 파일 시스템 개발자들은 데이터베이스가 존재하기 이전에 파일 시스템을 이용하여 데이터를 관리하였다. 데이터를 각각의 파일 단위(레코드)로 저장하며 이러한 일들을 처리하기 위한 독립적인 애플리케이션과 상호 연동이 되어야 하는데, 파일 시스템에서는 파일에 접근하는 방식이 응용 프로그램 내에 표현되므로 응용 프로그램과 데이터 간의 의존관계가 존재하게 되어 데이터의 구조, 접근 방법이 변경되면 기존의 프로그램과 데이터를 함께 변경해야 한다. 즉, 데이터 정의가 응용 프로그램에 내포되어 있고 프로그램에서 데이터를 접근하고 조작하는 것 이외에 별도의 제어가 없다. 따라서, 파일 단위로 저장할때, 데이터 종속성 문제와 중복성, 데이터 무결성 문제 등이 존재하기 때문에 데이터베이스로 관리하기 시작했다.. 2021. 8. 4.
[DB] 트랜잭션 격리 수준(Transaction Isolation Level) 개념 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정한다. 데이터베이스는 ACID 특징과 같이 트랜잭션이 독립적인 수행을 하도록 Locking을 통해, 트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하도록 막는 것이 필요하다. 하지만 무조건 Locking으로 동시에 수행되는 수많은 트랜잭션들을 순서대로 처리하는 방식으로 구현하게 되면 데이터베이스의 성능은 떨어지게 된다. 하지만, 성능을 높이기 위해 Locking의 범위를 줄인다면, 잘못된 값이 처리될 문제가 발생할 수 있다. 따라서 최대한 효율적인 Lock.. 2021. 4. 23.
[DB] 트랜잭션(Transaction) 개념 트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산을 의미한다. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다. 상태변화 : SQL질의어(SELECT | INSERT | UPDATE | DELETE)를 통해 DB에 접근하여 데이터베이스 상태가 변화하는 것 작업 단위 : 일련의 연산(SQL 명령문 집합). 사람이 정하는 기준(하나의 논리적 기능을 수행하기 위한)에 따라 정의함 하나의 트랜잭션 설계를 잘 만드는 것이 데이터를 다룰 때 많은 이점을 가져다.. 2021. 4. 23.
[DB] 캐시, Redis 캐시란? 한번 읽은(처리한) 데이터를 임시로 저장하고 필요에 따라 전송,갱신,삭제하는 기술로 보통은 데이터의 보관장소로 서버의 메모리를 사용하는 경우가 많다. 그렇기 때문에 디스크에서 정보를 얻어오는 것보다 훨씬 빠른 I/O성능을 얻을 수 있으나 서버가 다운되거나 재부팅되는 경우 사라지는 성격의 휘발성을 가지고 있어 영속적으로 보관할 수 없는, 말 그대로 임시적으로 보관하고 빠르게 그 정보에 접근하기 위한 용도로 사용해야 한다. 물론 정보의 성격에 따라 별도의 디스크백업 및 TTL등의 설정으로 영구보관이나 오랜기간 유지가 가능하다. 단 이런 설정들이 꼭 필요하다면 Cache를 적용하는게 맞는지 한 번도 타당성을 검토해 보는게 좋겠다. 목적 서버간 불필요한 트래픽을 줄일 수 있고, 그로 인해 웹어플리케이션.. 2021. 4. 18.
[DB] Connection Pool 개념 DBCP(Database Connection Pool)은 다수의 HTTP 요청에 대한 Thread를 효율적으로 처리할 수 있는 방식을 말한다. (WAS와 DB 서버간 이슈) Connection Pool을 사용하지 않고 WAS에서 DB서버에 접근을 시작하고 데이터를 가져오는 단계 DB 서버 접속을 위해 JDBC 드라이버를 로드한다. DB 접속 정보와 DriverManager.getConnection() Method를 통해 DB Connection 객체를 얻는다. Connection 객체로 부터 쿼리를 수행하기 위한 PreparedStatement 객체를 받는다. executeQuery를 수행하여 그 결과로 ResultSet 객체를 받아서 데이터를 처리한다. 처리가 완료되면 처리에 사용된 리소스들을 c.. 2021. 4. 18.
[DB] 정규화 이상 현상(anomaly) 테이블내의 데이터 중복성에 의해서 발생되는 데이터 불일치 현상. = 애트리뷰트들 간에 존재하는 여러 종속관계를 하나의 릴레이션에 표현했기 때문에 나타나는 데이터 불일치 현상 갱신 이상, 삽입 이상, 삭제 이상으로 구성된다. 갱신 이상 (Modification Anomaly) : 반복된 데이터 중에 일부를 갱신 할 시 데이터의 불일치가 발생한다. 삽입 이상 (Insertion Anomaly) : 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능하다. 삭제 이상 (Deletion Anomaly) : 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능하다. 이상 현상은 종속관계를 분석하여 여러 개의 릴레이션으로 분해하는 정규화를 통해 방지할.. 2021. 4. 11.