Computer Science

Computer Science/Database

[Oracle] 다중 서버 - 단일 DB 사용 시 활용 할 수 있는 배타Lock 동시성 제어

다음과 같은 관계에서 사용자가 비밀번호를 변경할 때 최근 사용한 N개의 비밀번호와 일치하는지 확인하는 로직은 어떻게 구현할까? 아래와 같이 결과집합을 뽑아서 애플리케이션에서 비교하거나, 한단계 더 쿼리를 감싸 과거 비밀번호와 변경할 비밀번호를 비교할 수 있다.@Transactional method{select * from (select * from password_his where user_id = :user_id order by rev desc)where rownum 하지만 스프링은 멀티쓰레드 방식으로 클라이언트 콜을 받기 때문에 두 개이상의 비밀번호 변경 요청이 들어온다면 첫번째로 처리한 요청은 정상적으로 비밀번호를 비교하고, 변경할 수 있지만 그 다음에 들어오는 요청들은 별도로 처리해야한다. ..

Computer Science/Database

[Oracle] 친절한 SQL 튜닝 6장 1절 기본 DML 튜닝

인덱스와 DML 성능INSERT, DELETE 인덱스는 정렬된 자료구조이므로 자리를 찾아가서 작업해야한다.UPDATE 변경된 컬럼을 참조하는 인덱스만 찾아서 변경하면 된다(인덱스에 포함된 정보가 변경됐을 때만)하지만 이 경우는 정렬을 맞춰줘야하기 때문에 이전 인덱스 정보 삭제 후 삽입하는 두 개의 오퍼레이션 발생한다. 무결성제약과 DML 성능PK, FK 제약은 Check, Not Null 과 다르게 실제 데이터를 조회해봐야하기 때문에 성능에 더 큰 영향을 미친다. Redo 로깅Redo 로그는 트랜잭션 데이터가 유실됐을 때 트랜잭션을 재현함으로써 유실 이전 상태로 복구하는데 사용 Redo 로그의 용도는 아래와 같다.Database Recovery물리적으로 디스크가 깨지는 Media Fail 발생시 데이터베..

Computer Science/Database

[Oracle] 오라클 성능 고도화의 원리 2권 1장 3절 인덱스 원리와 활용

Index Range Scan인덱스 루트 블록에서 리프블록까지 수직적으로 탐색한 후 리프 블록을 필요한 범위만 스캔하는 방식인덱스의 선두컬럼이 조건절에 사용되면 Index Range Scan 활용인덱스를 타는 것 자체보다 인덱스 스캔 범위를 최소화하고 인덱스에서 최대한 필터링하고 테이블 액세스를 하는 것이 중요 Index Full Scan최초의 수직적 탐색 이후 모든 리프블록을 수평적으로 탐색하는 스캔 인덱스의 선두컬럼이 조건절에 없으면 우선적으로 옵티마이저는 Table Full Scan을 고려하지만 대용량 테이블이어서 부담이크다면 인덱스를 활용하는 방법을 고려한다. 데이터 저장공간은 컬럼 길이 * 레코드 수에 의해 결정되므로 인덱스가 차지하는 면적은 테이블보다 훨씬 적다. 테이블 전체를 스캔하기보다 인..

Computer Science/Database

[Oracle] Java 개발자가 읽어본 친절한 SQL튜닝(SQL 파싱)

SQL의 실행과정을 아십니까..? SQLD를 공부할 때까진 이것만 생각했었습니다. 하지만 친절한 SQL 책을 읽으면서 DBMS에 쿼리를 날리면 어떤 과정을 통해 결과집합을 얻는지 배울 수 있었습니다. sql 실행 과정우선 SQL은 절차적인 언어가 아닌 Structured Query Language로 구조적 질의 언어입니다. 원하는 결과집합을 구조적으로 질의하지만 결과집합을 만들어내는 과정은 절차적으로 수행해야하고 아래와 같은 과정을 거칩니다. SQL에 문법적, 의미상 오류가 없는지 체크하는 파싱최적화 하기 쉬운 형태로 쿼리 변환을 하고 다양한 후보군이 될만한 실행계획 생성 및 비용 계산 실행엔진이 실행할 수 있는 프로시저로 변환하는 과정프로시저 실행 후 결과반환 SQL 파싱원래 DBMS는 I/O작업을 많..

Computer Science/Database

[DB] 트랜잭션, 애플리케이션의 트랜잭션 제어

트랜잭션이란 데이터를 저장할 때 단순히 파일에 저장해도 되지만, 데이터베이스에 저장하는 가장 큰 이유입니다. 트랜잭션은 그대로 번역하면 거래인데, 데이터베이스에선 하나의 거래를 안전하게 처리하도록 보장합니다. A가 B에게 5000원 이체한다면, 아래 두개의 작업이 하나처럼 이뤄져야합니다. 1. A의 잔고 5000원 감소 2. B의 잔고 5000원 증가 1번이 성공하고 2번이 실패하고 그대로 반영된다면 A의 잔고만 5000원이 감소하는 문제가 발생합니다. 데이터베이스는 트랜잭션을 적용해 거래 도중 하나라도 실패하면 거래 전의 상태로 되돌릴 수 있습니다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 Commit이라하고, 작업 도중 하나라도 실패해 이전으로 되돌리는 것을 Rollback이라 합니다...

Computer Science/Database

[DB] 커넥션풀

노 커넥션 풀 애플리케이션에서 데이터베이스 커넥션 획득 과정 1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션 조회 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 , 이 과정에서 3 way handshake 같은 TCP/IP 연결 을 위한 네트워크 동작이 발생 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성 5. DB는 커넥션 생성이 완료되었다는 응답 6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환 애플리케이션도 TCP/IP 커넥션을 새로 생성하기 위해 리소스를 사용하고, DB도 커넥션과 세션을 생성해야합니다. 이는 SQL 실행하는 시간뿐만 아니라 커넥..

Computer Science/Database

[DB] 소소한 DB 꿀팁

COUNT count함수는 null을 세지 않는다. count(*)와 count(null이 있는 속성)시에는 결과가 다르다. CASE SQL에서의 case문은 조건 충족 시 break 없어도 멈춘다. SELECT CASE WHEN false THEN '참입니다' ELSE '거짓입니다' END as 대신 then 사용한다. EXTRACT hour, dayofweek, minute, second 등 다양한 정보를 빼낼 수 있다. select extract(YEAR FROM created_at) as year from `thelook_ecommerce.users` Join 없이 where로 Join인척 하기 select from a, b where a.user_id = b.id select from a joi..

Computer Science/Network

[Network] REST API

REST Representational State Transfer의 약자로 효율적, 안정적이며 확장가능한 분산시스템을 가져올 수 있는 소프트웨어 아키텍처를 나타내며 HTTP 프로토콜을 HTTP 답게 쓸수있게하는 방법이다. 관련 작성 포스팅 HTTP란? / HTTP Method REST 구성요소 리소스 : HTTP URI 리소스에 대한 행위 : HTTP Method 리소스에 대한 행위의 내용 : 클라이언트와 서버가 데이터를 주고 받는 형태로 JSON, XML 등이 있다. REST의 제약조건 Server - Client SW를 서버, 클라이언트 구조로 나눠 서버는 자원을 갖고 있고, 클라이언트는 서버의 자원을 요청하는 구조 Stateless HTTP 프로토콜이 무상태 프로토콜이기에 당연히 따라오는 제약조건 ..

비오베베
'Computer Science' 카테고리의 글 목록