🌚 부록
지난 시간에는 소팅 즉 정렬에 대해서 알아보았다. 데이터베이스의 정렬은 데이터가 어마어마하게 많기 때문에 유의해야한다. 만약 하더라도 최소한으로 하되, 정말 필요한지 확인해야 하는 경우도 생긴다. 오늘은 데이터베이스의 원리에 대해서 알아보는 시간을 가져보도록 하자. 이번 시간에는 SQL을 통해 실습하는 것이 아닌 이론을 통해 진행된다.
👔 데이터베이스 원리
여태까지 관계형 데이터베이스를 통해 여러가지를 알아보았다.
1) SQL 구문을 사용해서 이용하는 방법
2) 튜닝을 통해 보다 효율적으로 SQL을 작성하는 방법 (인덱스, 소팅 등)
사실 원래대로 라면 이론 먼저 공부를 하고 실습을 진행 하지만, 데이터베이스는 실습을 통해서 먼저 사용해보고 사용하면서 이러한 것들이 왜 필요한지 알아보고자 선 실습, 후 이론 형태로 진행했다.
클라이언트(유니티)는 영화를 찍는다고 비유했다면, 서버는 우리만의 식당을 운영한다고 비유했다. 그렇다면 데이터베이스는 뭐로 비유할 수 있을까? 바로 물류창고이다. 그렇데면 물류창고가 초일류 물류창고가 되려면 어떻게 해야 할까? 여러 조건이 있을 수 있겠지만, 아래 세 가지 조건이 가장 보편적이다.
1. 많이는 고객이 물건 자체를 아주아주 많이 위탁을 하더라도 창고에 스무스하게 저장되고 이상없이 처리하는 것을 뜻한다.
2. 빠르게는 직원이 물건을 성공적으로 보관 후 고객에게 '보관했습니다' 라고 응답하는 것을 뜻한다.
3. 안전하게는 물류창고에 물건이 정말로 안젆게 보관된 상태를 뜻하는 것이다.
그렇지만 가만보면 서로의 개념이 각각 서로 상충되는 것을 볼 수 있다. 빠르게 처리를 하기 위해서는 물건을 빠르게 처리만 하면 될지 모르겠지만 이렇게 될 경우 안전한 공간까지 이동 후 보관하는 '안전하게'의 개념을 충족시키는데 못하는 문제가 발생한다. 그렇다고 직원을 많이 뽑자니, 멀티스레드 시간에 배웠던 것과 마찬가지로 부하가 생기기 때문에 애매해진다.
이 위 개념을 비유가 아닌 데이터베이스로 돌아온다면 아래와 같다.
1. 병렬 처리
2. 응답 속도
3. 커밋한 데이터를 지킨다.
그렇다면 데이터베이스를 사용할 때 저장되는 공간 자체가 어디가 될지 곰곰히 생각해보자. 지금까지 우리는 SQL 명령을 내린 후, '아 잘 됐네.' 라고 넘어갔지만 실상은 그렇지 않다.
데이터를 저장할 때에는 크게 하드 디스크와 램으로 나뉘어서 저장이 되는데 이 둘의 차이를 명확하게 알아야 한다. 하드 디스크의 경우 전원이 꺼져도 데이터는 안전하게 남아있고, 램의 경우 전원이 꺼질 경우 데이터가 모두 날라가는 특성을 가진다. 따라서 데이터를 '안전하게' 지킨다는 것은 결국 램에 저장하는 것이 아닌 SSD, 혹은 하드드라이브까지 가서 데이터를 보관한다는 의미가 되는 것이다.
그렇다면 도대체 얼마나 느리길래 이런 문제가 발생하는 것일까? 하드 디스크의 이미지만 봐도 축음기와 비슷하게 생긴 것을 볼 수 있는데 이는 실제로 물리적으로 디스크를 뺑글뺑글 돌려서 읽는 형태이다. 따라서 특정 데이터를 읽고 싶다면 램은 전기신호로 데이터를 불러오는 반면, 하드 디스크는 특정 데이터를 찾기 위해서 빙글빙글 다 돌아가는 것을 기다릴 수 밖에 없다는 것이다.
그렇다면 인덱스와 랜덤 엑세스는 어떻게 처리될까?
하드디스크의 X자로 생긴 이미지를 읽는다고 생각할 경우 인덱스의 경우 트리 형태로 주소를 잘 보관해서 해당 정보가 어디 있는지를 미리 알 수 있었지만, 랜덤 엑세스의 경우 아까와 마찬가지로 뺑뺑 돌면서 데이터의 위치를 찾을 때 까지 기다리는 수 밖에 없다.
그렇다면 데이터를 얼마나 안전하게 보관해야 할까?
데이터의 보관은 CPU나 메모리가 박살이나도 안전하게 보관이 되어야 한다. 실제로 게임 뿐만 아니라 우리가 자주 사용하는 은행 앱에서조차 데이터가 보관되지 않는다면 세상은 개판이 될 것이다. 따라서 안정성은 정말정말 중요하다.
그렇기 때문에 위에서 배운 것 처럼 RAM에다가 데이터를 저장하지 않고 디스크에 보관을 할 텐데 그렇다고 매 번 디스크를 통해 하나하나 저장할 경우 너무 느려지기 때문에 스피드 차원에서 문제가 발생한다. 따라서 다음에 배울 것은 속도, 안정성 둘 다 놓치지 않고 어떤 식으로 관리해서 1석 2조의 효과를 내고있는 지에 대해 알아자.
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 5-4-3. 부록 : 대기와 락 (1) | 2024.07.20 |
---|---|
Part 5-4-2. 부록 : 쓰레드와 캐시 (2) | 2024.07.20 |
Part 5-3-10. SQL 튜닝 : Sorting (1) | 2024.07.18 |
Part 5-3-9. SQL 튜닝 : Hash 조인 (0) | 2024.07.17 |
Part 5-3-8. SQL 튜닝 : Merge 조인 (0) | 2024.07.16 |