DB 트랜잭션(Transaction) 트렌잭션이란? 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 상태를 변화시킨다는 것 → SQL 질의어를 통해 DB에 접근하는 것 - SELECT - INSERT - DELETE - UPDATE 작업 단위 → 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것 예시) 게시판에서 사용자가 글을 작성하고, 올리기 버튼을 누른 후 게시판에 다시 돌아오면 게시판에 내가 쓴 글이 업데이트 된 상태를 볼 수 있다. * 이때 DB 작업 - 올리기 버튼을 누른다 : INSERT문을 사용해 사용자가 입력한 게시글 데이터를 옮김 - 게시판 새로 구성 : SELECT문을 사용해 최신 정보를 유지 현재 작업 단위 : INSERT문 + SELECT문 → 이를 통틀어 하나의..
오라클 논리/물리적 구조 1. 오라클 DB의 논리/물리적 구조 논리적 구조 : 테이블 처럼 존재는 하지만 가져갈 수 없는 것 물리적 구조 : 이메일 파일 첨부와 같이 파일을 직접 만질 수 있는 것(리눅스에서 ls 통해 보여지는 파일들) - 테이블 스페이스 : 지역(땅 덩어리) - 세그먼트 : 건물 - extent : 건물의 층 - Datablock : 건물의 사무실 테이터 파일은 테이블 스페이스 안에 여러 개가 존재 할 수 있다. 조회할 테이블이 어느 테이블 스페이스에 속해 있는지 조회하는 방법 SQL> select table_name, tablespace_name 2 from dba_tables 3 where table_name='EMP'; TABLE_NAME TABLESPACE ------------..
SQL과 NoSQL의 차이 웹 앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다. MySQL과 같은 SQL을 사용할까? 아니면 MongoDB와 같은 NoSQL을 사용할까? 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크에 따라 결정하는 것이 아니다. 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 택해야 한다. 차이점을 알아보자 SQL (관계형 DB) SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있음 관계형 데이터베이스에는 핵심적인 두 가지 특징이 있다. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 관계를 통해 여러 테이블에 분산된다. 데이터는 테이블에 레..
SQL Injection 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 공격 방법 1) 인증 우회 보통 로그인을 할 때, 아이디와 비밀번호를 input 창에 입력하게 된다. 쉽게 이해하기 위해 가벼운 예를 들어보자. 아이디가 abc, 비밀번호가 만약 1234일 때 쿼리는 아래와 같은 방식으로 전송될 것이다. SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234"; SQL Injection으로 공격할 때, input 창에 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것이다. 1234; DELETE * USER FROM ID = "1"; 보안이 완벽하지 않은 경우, 이처럼 비밀번호가 아이디와 ..
조인이란? 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법 테이블을 연결하려면, 적어도 하나의 칼럼을 서로 공유하고 있어야 하므로 이를 이용하여 데이터 검색에 활용한다. JOIN 종류 INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN SELF JOIN INNER JOIN 교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여준다. SELECT A.NAME, B.AGE FROM EX_TABLE A INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP LEFT OUTER JOIN 기준테이블값과 조인테이블과 중복된 값을 보여준다. 왼쪽테이블 기준으로 JOIN을 한다고 생각하..
[DB] Key Key란? : 검색, 정렬시 Tuple을 구분할 수 있는 기준이 되는 Attribute. 1. Candidate Key (후보키) Tuple을 유일하게 식별하기 위해 사용하는 속성들의 부분 집합. (기본키로 사용할 수 있는 속성들) 2가지 조건 만족 유일성 : Key로 하나의 Tuple을 유일하게 식별할 수 있음 최소성 : 꼭 필요한 속성으로만 구성 2. Primary Key (기본키) 후보키 중 선택한 Main Key 특징 Null 값을 가질 수 없음 동일한 값이 중복될 수 없음 3. Alternate Key (대체키) 후보키 중 기본키를 제외한 나머지 키 = 보조키 4. Super Key (슈퍼키) 유일성은 만족하지만, 최소성은 만족하지 못하는 키
이번 강좌는 MongoDB의 Index에 관한 내용입니다.Index란?Index는 MongoDB에서 데이터 쿼리를 더욱 효율적으로 할 수 있게 해줍니다. 인덱스가 없이는, MongoDB는 collection scan – 컬렉션의 데이터를 하나하나 조회 – 방식으로 스캔을 하게 됩니다. 만약 document의 갯수가 매우 많다면, 많은 만큼 속도가 느려지겠죠? 이 부분을 향상시키기 위하여 인덱스를 사용하면 더 적은 횟수의 조회로 원하는 데이터를 찾을 수 있습니다.Document의 필드(들) 에 index 를 걸면, 데이터의 설정한 키 값을 가지고 document들을 가르키는 포인터값으로 이뤄진 B-Tree를 만듭니다. 여기서 B-Tree는 Balanced Binary search Tree 인데요, B-Tr..
이번 강좌에서는 document를 수정하는 update() 메소드에 대하여 알아보도록 하겠습니다.정의MongoDB에서는 update() 메소드를 통하여 데이터를 수정 할 수 있습니다. 이 메소드의 구조는 다음과 같습니다:db.collection.update( , , { upsert: , multi: , writeConcern: } )Collection 안의 document(들)을 수정합니다. 이 메소드를 통하여 특정 field 를 수정 할 수도 있고 이미 존재하는 document를 대체(replace) 할 수도 있습니다.update() 메소드의 기본 옵션으로는 단 하나의 document를 수정합니다.ParameterType설명*querydocument업데이트 할 document의 criteria 를 정합..
이번 강좌에선 find() 메소드를 더욱 더 활용하기 위해 필요한 sort(), limit(), skip() 메소드에 대해 배워보겠습니다. 그냥 find() 메소드를 사용하면 criteria 에 일치하는 모든 document 들을 출력해주기 때문에, 예를들어 페이지 같은 기능을 사용한다면 불적합하겠죠. 그렇다고 find() 메소드 자체에 어디부터 어디까지 불러오겠다 라고 설정하는 매개변수는 따로 없습니다.find() 메소드를 사용했을 시 cursor 형태의 결과값을 반환하는데요, 이 객체가 가지고 있는limit() 메소드와 skip() 메소드를 통하여 보이는 출력물의 갯수를 제한 할 수 있고, sort() 메소드를 사용하여 데이터를 순서대로 나열 할 수 있습니다. 샘플 데이터쿼리 연습을 해보기 위해 샘플..
이번 강좌에선 Document를 조회하는 메소드인 find() 메소드를 자세히 알아보도록 하겠습니다.Document 조회: db.COLLECTION_NAME.find(query, projection)이 메소드에서 사용되는 매개변수에 대하여 알아봅시다parameterType설명querydocumentOptional(선택적). 다큐먼트를 조회할 때 기준을 정합니다. 기준이 없이 컬렉션에 있는 모든 다큐먼트를 조회 할때는 이 매개변수를 비우거나 비어있는 다큐먼트 { } 를 전달하세요.projectiondocumentOptional. 다큐먼트를 조회할 때 보여질 field를 정합니다. 반환(return) 값: cursorcriteria에 해당하는 Document들을 선택하여 cursor를 반환합니다. curso..
- Total
- Today
- Yesterday