TIL#103 Database 공부

Dasom·2020년 10월 28일
0

database

목록 보기
6/15

브랜디 기업협업을 하면서 느낀 점은 난 정말 아는 것이 없구나...이다😭
사실 기업협업을 가지 않고 개인 공부를 더 하려는 생각이 더 컸었는데 멘토님과의 1:1 상담을 하면서 정말 많이 배우게 된다는 강력한(?) 추천으로 기업협업을 선택하게 되었는데 진짜 잘한 선택인 것 같다. 내가 혼자 개인공부를 하였다면 이렇게 많은 것을 배우지는 못했을 것 같다. 정말 10할이 브랜디의 위코드 교육생들 교육 담당이신 팀장님 덕분이라고 해도 과언이 아니다. 진짜 너무 많은 것들을 자세하게 알려주시는데 다 따라가지 못하는 내 머리가 속상할 뿐....😭
오늘도 내 코드를 살펴봐주시다가 이상한 점을 발견하셨다면서 코드를 찬찬히 보시더니 문제점을 발견하셨다...!
바로...autocommit이었다는 점!
정말 자세히 설명해주셨지만 나의 안좋은 기억력으로 인해...절반정도밖에 기억이 나지 않아 집에 와서 다시 공부하면서 가르쳐주신 부분이 다시 기억이 나고 있다. 잊기 전에 블로그에 정리해 두려 한다🙂

Transaction

transaction은 데이터베이스에서 매우 중요한 개념이다. 데이터베이스의 상태를 변환시키는 하나의 기능을 수행하기 위한 작업의 단위 or 한꺼번에 모두 수행되어야 할 일련의 연산들이다. 예를 들어 은행에서 계좌이체를 할 때 은행에서는 보내는 쪽 계좌에서 돈을 빼고 받는 쪽 계좌에 돈을 넣어야 한다. 중간에 오류가 발생해버려서 보내는 쪽 계좌에서는 돈이 빠지고 받는 쪽 계좌에 돈이 들어가지 않는다면? 그런 것들이 한번에 모두 수행되어야 하는 트랜잭션이라고 한다. 하나의 트랜잭션은 commit과 rollback을 만나면 끝이 난다. 만약 중간에 오류가 나서 멈춰버린 상황에서 오토커밋이라면 난감한 작업이 된다. 앞의 성공한 작업만 완료되어서 커밋이 되는 것이다. 되돌리지 못하거나 되돌리더라도 어렵고 복잡해진다.

Atomicity(원자성)
1. 트랜잭션의 연산은 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다.
2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
Consistency(일관성)
1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
2. 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
Isolation(독립성, 격리성)
1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.
2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
Durablility(영속성, 지속성)
1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

Connection

물리적인 Network Path를 의미한다. 사용자가 로컬 컴퓨터에서 네트워크를 경유해 서버로 접속하기까지의 과정이다.

Session

유저가 인증을 통과하여 접속할 때부터 접속을 끊을 때까지의 상호작용을 의미한다. 하나의 connection에 하나의 session이 존재할수도 있고 없을 수도 있으며 여러개일 수도 있다.

DB CONNECTION POOL

서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재한다. 일반적인 connection pool을 사용하면 동시 접속자 수를 벗어나는 경우 에러가 발생하게 된다. 그렇게 되면 그 접속자는 더이상 처리를 못하기 때문에 다시 접속을 시도해야 하는 불편함이 생긴다. 이것을 해결하기 위해 생긴 것이 connection pool이다. connection pool은 동시 접속자가 가질 수 있는 connection을 하나로 모아놓고 관리한다는 개념이다. 누군가가 접속을 하면 관리하는 pool에서 남아있는 connection을 제공한다. 남아있는 connection이 없다면 대기 상태로 전환된다. 그리고 다 사용된 connection이 다시 pool에 들어오게 되면 대기하고 있는 사용자에게 순서대로 제공된다. 즉, 데이터베이스와 연결된 connection을 미리 만들어서 pool에 저장해두다가 필요할때 쓰고 사용이 끝나면 다시 반환하는 기법이다. connection pool 을 너무 크게 해놓으면 메모리 소모가 크고 작게 해놓으면 connection이 많이 발생할 경우 대기시간이 발생하기 때문에 동시 접속자 수 등 서버 부하에 따라 크기를 조정해야 한다.

profile
개발자꿈나무🌲

0개의 댓글