Database Lock 이란?
2024. 6. 18. 21:33
DB
제가 일하고 있는 분야에서 RDBMS 에 보단 NoSql(Elasticsearch) 를 주로 쓰다 보니 공부하는 겸 공유를 하게 되었습니다.예전부터 궁금했던것들중에 하나가 선착순으로 지급해주는 이벤트성은 DB에서 어떻게 처리할까? 였습니다. DB lock에서 어느정도 궁금증을 해소하게 되었습니다. 혹시나 저처럼 이러한 생각을 한 분들은 이미 DB lock에 대해서 공부를 하셨다고 생각이 들지만 그럼에도 글을 공유하게 되었습니다.DataBase는 데이터를 영속적으로 저장하는 시스템입니다. 즉 같은 자원에 대해서 동시에 접근하는 경우가 생길 수밖에 없습니다. Lock 이란 트랜잭션 처리의 순차성을 보장하는 방법이라고 했습니다. 트랜잭션이란 DB의 나누어지지 않는 최소한의 처리 단위입니다. 2가지의 lock ..
N+1 문제 해결: Java 백엔드 개발자를 위한 데이터베이스 쿼리 최적화
2024. 6. 5. 17:57
DB
오늘은 JPA N+1의 문제 해결에 대해서 글을 공유해드리려고 합니다. * Java 백엔드 개발자를 위한 데이터베이스 쿼리 최적화에 적합한 내용입니다.개발자가 직면하는 가장 일반적인 성능 병목 현상 중 하나가 N+1입니다. 애플리케이션이 단 한 번의 쿼리로 동일한 결과를 얻을 수 있는데도 N+1번의 데이터베이스 쿼리를 수행할 때 발생합니다. 과도한 데이터베이스 Hit는 느린 응답 시간, 높은 서버 부하, 열약한 사용자 경험으로 이어질 수 있습니다. 원인을 함께 파악해 보고 개발자가 이러한 문제를 어떻게 완화할지에 대해서 다양한 전략과 기법에 대해서 적어보겠습니다.앞서, N+1 문제가 무엇인지 알아보도록 하겠습니다.N+1 문제란 무엇인가?애플리케이션이 개체목록(예시: 제품, 사용자 또는 게시물 목록)을 가..
PL/SQL 이란
2022. 1. 10. 17:47
DB
PL/SQL의 특징 PL/SQL은 BLOCK 구조로 되어있고 BLOCK 내에는 DML 문장과 QUERY 문장, 그리고 절차형 언어(IF, LOOP) 등을 사용할수 있다. 특징은 저장 모듈 (STORED MODULE)을 이용해서 PL/SQL 을 데이터베이스에 저장하여 독립적으로 실행되거나 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램이다. ORACLE 의 저장 모듈에는 PROCEDURE, USER DEFINED FUNCTION, TRIGGER가 있다. PL/SQL 의 특징은 다음과 같다. -PL/SQL은 Block 구조로 되어있어 각 기능별 모듈화가 가능하다. -변수, 상수 등을 선언하여 SQL 문장 간 값을 교환한다. -IF,Loop 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록..
데이터베이스 모델링 -1
2022. 1. 7. 17:25
DB
데이터베이스 모델링 또는 데이터베이스 설계라고도 합니다. (-모델링 과목을 많이 하고 하는 만큼 실력이 늘어난다. 혹은 이해할수 있다. ) 4가지 작업으로 이루어지는 데이터베이스 모델링 1.업무파악 : 무엇을 할수 있는가 무엇을 만들건가를 파악해야한다. 화면을 보고 업무파악 혹은 고객사에서 요구하는 요구사항을 글로 읽고 파악하는 단계가 될수도 있다. 글을 읽고도 무엇이 필요한지 깨달을 필요가 있어야한다. 2.개념적 데이터 모델링 - er 다이어그램으로 어떤것들이 필요할거같은 중요 핵심들을 뽑아내서 추출하는 작업 3. 논리적 데이터모델링 -er 다이어그램을 보고 단계형 데이터베이스에 맞게끔 표로 전환하는 작업 4. 물리적 데이터 모델링 실제 표를 생성하고 만드는 작업 개념적 데이터 모델링에서는.... 개념..
SQL 사용자 권한
2022. 1. 5. 23:15
DB
권한(Privilege)은 특정 SQL 문장을 실행하기 위한 권리 입니다. 데이터베이스 관리자(DBA) 는 데이터베이스와 그 객체에 대한 엑세스를 사용자에게 부여하는 능력을 갖춘 상급 사용자입니다. 사용자는 데이터베이스에 엑세스하기 위해 시스템 권한( System Privilege)이 필요하고 데이터베이스에서 객체의 내용을 조작하기 위해 객체 권한(Object Privilege) 이 필요합니다. 사용자는 관련 관한들의 이름 있는 그룹인 Role 이나 다른 사용자에게 추가로 권한을 부여하기 위해 권한을 가질 수 있습니다. 사용자와 롤에 대해 시스템 권한과 객체 권한을 부여할 수 있습니다. 시스템 권한은 대게 데이터베이스 관리자 (DBA) 에 의해 제공됩니다. 객체 권한은 대게 객체의 소유주에 의해 제공됩니..
SQUENCE INDEX(순차 적으로 증가하는 값)
2022. 1. 5. 22:35
DB
자동적으로 유일 번호를 생성합니다. 공유 가능한 객체입니다. 주로 기본 키 값을 생성하기 위해 사용 합니다. 어플리케이션 코드를 대체합니다. 메모리에 캐쉬(Cache)되면 시퀸스 값을 엑세스 하는 효율성을 향상시킵니다. 시퀸스는 테이블의 행에 대한 시퀸스 번호를 자동적으로 생성하기 위해 사용될 수 있습니다. 시퀸스는 사용자가 생성한 데이터베이스 객체이며 여러 사용자가 공유할 수 있습니다. 시퀸스의 가장 일반적이고 전형적인 사용은 각 행을 유일하게 구분하는 기본 키값을 생성하기 위해서 입니다. 시퀸스 번호는 테이블과 관꼐없이 생성되고 저장됩니다. 그러므로 동일한 시퀸스는 여러 테이블에 대해 사용될 수 있습니다. 다음 구문은 depts테이블의 department_id 에 대해 사용되는 DEPTS_SEQ 라는..
뷰(View)
2022. 1. 5. 22:15
DB
뷰 생성, 데이터 검색, 수정, 삭제 뷰는 테이블 또는 다른 뷰를 기초로 하는 논리적 테이블입니다. 접근제어를 통한 자동 보안이 제공되므로 데이터베이스 엑세스를 제한하기 위한 사용합니다. 복잡한 질의를 쉽게 만들어주기 때문에 사용자의 데이터 관리를 간단하게 해 줍니다. 동일한 데이터의 다른 뷰를 나타낼 수 있기 때문에 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해 줍니다. View 의 정의 하나 이상의 테이블에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나타낸 것이다. 단순뷰 - 한개의 원본테이블을 사용해서 생성 복합 뷰 - 두개 이상의 이본 테이블에 의해 생성(조인을 통해 생성된...) 뷰는 단순 뷰와 복합 뷰가 있습니다. 근본적인 차이점은 DML (삽입, 갱신,..
DML-1
2022. 1. 4. 20:21
DB
UPDATE 문장으로 기존의 행을 갱신합니다. 필요하다면 하나 이상의 행을 갱신할 수 있습니다. Update 문장을 사용하여 기존의 행을 수정할 수 있습니다. 위의 구문형식에서 -table : 테이블의 이름 - column : 테이블의 열 이름입니다. - value : 열에 대한 관련 값이나 서브쿼리입니다. -condition: 갱신할 행을 명시하고, 열 이름, 표현식, 상수, 서브쿼리 그리고 비교 연산자로 구성됩니다. 이 구문은 UPDATE 구믄을 연습하기 위해 EMPLOYEES 테이블의 임시 사본을 생성합니다. ALTER TABLE 구문은 제약조건을 추가합니다. 제약조건은 11장에서 설명합니다. 서브쿼리가 여러 개 열을 반환하는 다중 열 서브쿼리를 이용해서 UPDATE 구문을 작성한 예입니다. del..
DML(DATA MANIPULATION LANGUAGE)
2022. 1. 4. 19:37
DB
DML 문장은 다음의 경우 실행됩니다. 테이블에 새로운 행을 추가할 때 테이블에 있는 기존의 행을 변경할 때 테이블로부터 기존의 행을 제거할 때 DML(Data Manilpuation Language)은 SQL 의 핵심 부분입니다. 데이터베이스에 데이터를 추가, 갱신 또는 삭제하고자 한다면 DML 문장을 실행합니다. DML 문은 다음 3가지 구문을 포함합니다. - 새로운 행을 데이터 베이스에 추가하는 INSERT 문 - 기존 행을 수정하기 위한 UPDATE 문 - 기존 행을 삭제하기 위한 DELETE 문 DML 구문의 실행을 완전히 보장해야 할 필요가 있습니다. 이를 위해 트랜잭션이 필요합니다. 작업의 논리적인 단위 형태인 DML 문장의 모음을 트랜잭션이라고 합니다. 예를 들어 은행 데이터베이스를 고려해..
서브쿼리
2022. 1. 1. 21:33
DB
서브쿼리는 다른 select 문장의 절에 내장된 select 문장입니다. 서브쿼리를 사용하여 간단한 문장을 강력한 문장으로 만들수 있습니다. 테이블 자체의 데이터에 의존 하는 조건으로 테이블의 행을 검샐할 필요가 있을 때 서브쿼리는 아주 유용합니다. 예를 한번 보겠습니다. 다음의 SQL 절에 서브쿼리를 작성할수 있습니다. SELECT 절(스칼라 서브쿼리) FROM 절(인라인뷰) WHERE 절 HAVING 절 ORDER BY 절 INSERT 문의 VALUES 절 UPDATE 문의 SET 절 CREATE TABLE 문의 AS 절 다음은 서브쿼리르 사용할 때 지켜야할 사항들입니다. 서브쿼리는 괄호로 둘러싸야 합니다. 서브쿼리는 비교 연산자의 오른쪽에 있어야 합니다. 서브쿼리는 ORDER BY 절에 포함할 수 ..