본문 바로가기

DB28

[DB] 트랜잭션(2) - Isolation Level 의 내용을 바탕으로 작성된 개인 공부를 위한 기록용 포스트입니다. 들어가기 전에 트랜잭션 Isolation Level은 하나의 트랜잭션에서 작업 중인 데이터가 다른 트랜잭션에 영향을 받지 않는 정도 또는 하나의 트랜잭션에서 작업 중인 데이터를 다른 트랜잭션이 어느 정도까지 접근할 수 있는지에 대한 정도를 말한다. 그렇다면 이 Isolation Level을 왜 사용하는가? 서로 다른 트랜잭션에서 동시에 변경 작업을 수행하게 됐을 때 비정상적으로 데이터가 처리되는 경우가 있기 때문에 이러한 상황을 막기 위해 Isolation Level을 설정한다. Isolation Level은 단계 별로 나뉘어져 있는데 가장 낮은 단계로 설정하면 한 트랜잭션에서 변경 중인 데이터를 다른 트랜잭션에서 접근할 수 있다. 반대로.. 2023. 3. 7.
[DB] 트랜잭션(1) - 트랜잭션이란 무엇인가 의 내용을 바탕으로 작성된 개인 공부를 위한 기록용 포스트입니다. 들어가기 전에 트랜잭션은 반드시 한 번에 처리되어야 하는 논리적인 작업 단위다. 만약 계좌이체를 하는데 출금한 계좌에서는 돈이 빠져나갔는데, 입급되어야 하는 계좌에 돈이 안 들어온다면 어떻게 될까? 바로 이렇게 절대 분리해서 실행할 수 없는 작업의 최소 단위를 트랜잭션이라고 한다. 만약 두 과정 중에 문제가 생긴다면 트랜잭션을 ROLLBACK하여 데이터를 트랜잭션 시작 이전 상태로 되돌린다. SQL에서 발생한 에러는 예외 처리를 통해서 쉽게 ROLLBACK 할 수 있지만, 예를 들어 입금하려는 계좌가 아예 존재하는 않는다는 등의 문제가 발생하면 출금하는 계좌에서는 이미 금액이 차감되어있는 실수가 일어날 수 있으니 점검 로직을 추가해서 반드.. 2023. 3. 7.
[MySQL] 복합 인덱스의 성능을 위한 순서 최적화 들어가기 전에 이번에 프로젝트를 하면서 내가 친구로 추가한 친구들의 목록을 확인하기 위한 테이블을 설계해야 했다. 처음 설계할 때는 친구 테이블에 uid가 있었다. 멘토님이 바로 "uid는 왜 사용하는 건가요?"라고 질문을 주셨고, 생각해 보니 전혀 필요가 없었는데 무조건적으로 uid를 가지고 있어야 한다는 생각에 아무 고민없이 생성한 것 같다고 답변한 후에 멘토님의 조언과 더불어 구현하려는 기능을 생각했을 때 uid를 사용하지 않을 거라는 판단이 서서 uid 컬럼을 제거하고 남은 두 컬럼을 복합키로 설정하기로 했다. 회사에서도 잠시 테이블 설계를 맡았을 때 복합키를 사용하라는 조언을 받은 적이 있었는데 아쉽게도 경험을 하지 못했었고 개인적으로 했던 프로젝트들에서도 마찬가지라 정리하는 겸 글을 작성하고자.. 2023. 3. 5.
[DB] DBMS의 commit과 rollback은 어떻게 처리되는가 들어가기 전에 서적으로 스터디를 시작했는데 첫 주 발표자로 당첨이 됐다. 스터디가 바로 시작되면서 시간이 부족해서 첫 주 분량이 조금 적었는데 그러다 보니 시간적 여유가 있어서 처음으로 ppt를 만들어서 발표를 하게 됐다. 깊게 찾아본다기 보다는 아는 내용은 빠르게 설명하고 넘어가고 데이터 캐시와 로그 버퍼의 크기가 극단적으로 비대칭화되어 있는데 오라클 11g부터 도입된 AMM(Auto Memory Management)과 같이 리소스를 자동으로 조정하는 기능이 있다고 간략하게 소개하는 정도였다. 그러다 보니 이런 로그 버퍼들이 정확히 어떻게 쓰이는지에 대한 내용은 간과하게 되었는데 다행히도 발표가 끝난 이후에 DBMS의 커밋과 롤백의 내부 처리 과정에 대해 질문을 받아서 놓치지 않고 정리를 할 수 있게 .. 2023. 1. 26.
[MySQL] 실행계획 알아보기 이번에 을 읽으면서 DBMS 아키텍처에 대해서도 배우게 되고 실행 계획의 중요성에 대해 알게 되면서 최근 프로젝트에 사용했었던 MySQL에서는 실행 계획을 어떻게 살펴볼 수 있는지에 대해 글로 남겨보려고 한다. 들어가기 전에 DBMS 아키텍처 내에는 성능에 중요한 영향을 미치는 모듈인 쿼리 평가 엔진이 있다. 쿼리 평가 엔진은 SQL 구문을 처음 읽어들여서 분석하고, 어떤 순서로 데이터에 접근할지를 결정한다. 이때 결정되는 계획을 실행 계획이라고 하며 이 실행 계획에 따라 데이터에 접근하는 방법을 접근 메서드(access method)라고 한다. 그렇다면 이 실행 계획은 왜 중요할까? 옵티마이저가 선택하는 실행 계획이 언제나 최적의 방법이지 않기 때문이다. DB 성능의 최후의 튜닝 수단은 실행 계획을 수.. 2023. 1. 24.
[DB] ORM(Object Relational Mapping) 개념과 장/단점 영속성(Persistence) 데이터를 생성한 프로그램이 종료되지 않더라도 사라지지 않는 데이터의 특성을 말하며 영속성을 갖지 않는 데이터는 프로그램을 종료하면 모두 사라진다. 메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 또는 객체 데이터베이스 등을 활용해서 영구적으로 저장하고 영속성을 부여하는데 이 객체를 Object Persistence 즉, 영구적인 객체라 한다. 그렇다면 이렇게 데이터를 데이터베이스에 저장하기 위해서는 어떤 방법을 사용해야 할까? 1. JDBC 2. Spring JDBC (Ex. JdbcTemplate) 3. Persistence Framework (Ex. Hibernate, MyBatis) JDBC 프로그래밍의 복잡함이나 번거로움없이 간단한 작업만으로 데이터베이스와 연.. 2022. 9. 12.