DBMS 통신의 이해

Jan 19, 2024
DBMS 통신의 이해
  • Maria DB를 설치하면 DBMS가 설치 된 것
  • DBMS : 데이터베이스를 관리하는 프로세스 : 실행 중
 
  • 리스너 포트번호 : 3306번
연결을 해줌 / 전부다 서브 소켓임
통신할 수 없음
예시) 클라이언트 3명
서브 소켓 1개, 통신하고 있는 소켓 3개, 백그라운드를 관리하는 소켓 1개

<하드 디스크의 공간 분배 : FS / DBS>

  • File System : 파일을 관리함
OS가 설치되면 다 파일 시스템
OS가 파일 시스템을 관리
 
  • DBS : 테이블 스페이스
DBMS가 관리
테이블을 관리함
쿼리(DB명령어)는 파일로 테이블을 찾기 힘듦
 

IO : Read, Write

💡
기계어를 모르면 명령어를 내릴 수 없음
우리는 이진수가 아닌 쿼리(영어)로 DBMS에 명령을 내림 > 버퍼에 쿼리가 당김
 
Read : 변경이 일어나지 않는 것
예시) Select문> input > 파싱 > 테이블 형태로 데이터를 전송
Write : 변경이 일어나는 것
예시) Insert문, Update문, Delete문
💡
데이터베이스 프로토콜이 적용된 통신
명령어 : 프로토콜
(MySQL, PostgreSQL, MongoDB Wire, Oracle Net, TDS(Tabular Data Stream 등)
반이중/Stateless
request/response 형식
Web : HTTP 트로토콜이 적용된 소켓 통신
 
  • Select문 → 결과를 받음
  • Insert문 → 쓰기를 함
  • Update문 → 조회, 삭제, 쓰기를 함
예시) 데이터를 찾아야 쥐고 있음 > 삭제 > 쥐고 있는 데이터에 쓰기 > 전송
  • Delete문 → 삭제 > 쥐고 있는 데이터에 쓰기 > 전송
 
프로토콜 : 변경된 행의 개수를 응답해줌
예시) Insert문 3번 → 응답 2 : row 3건 중 2건 성공, 1건 실패
Insert문 1번 → 응답 1 : 성공
Insert문 1번 → 응답 0 : 실패
Delete문 1번 날리는데 디비에 없는 경우 → 응답 0 : 실패 아님
잘못된 쿼리 → 응답 : -1 : 실패
 
notion image

<요청시 알아야 할 것> : IP, 포트 번호, ID, PASSWORD, PROTOCOL

  • IP, 포트 번호로 접근 가능함
  • IP, 포트 번호 외에 추가로 인증된 사용자만 접근할 수 있게 해놓음
IP, 포트 번호 + id, password + 프로토콜 명
 

<오류 코드>

  • Address Already in Use : 서버가 특정 포트를 이미 사용 중
이미 해당 포트를 사용되고 있거나, 이전에 사용한 소켓이 제대로 닫히지 않았을 때
  • Connection Lost : 네트워크 연결이 끊어졌거나 통신이 중단되었을 때
  • Connection Refused : 실행은 되나 인증이 안되서 거절하는 것
인증을 통해 id, password가 확인되면 세션이 만들짐 → 연결됨
접근의 제한이 없으면 요청 시 바로 세션이 만들어짐 → 연결됨
  • Connection Lost : 네트워크 통신에서 클라이언트와 서버 간의 연결이 끊어진 상태
방화벽으로 막혀있음
 
notion image

<통신의 순서>

  1. 클라이언트가 IP, 포트 번호, ID, PASSWORD, PROTOCOL로 서버의 리스너 포트에 통신을 요청
데몬 / 리스너 포트는 계속 돌아가면서 요청을 확인해야 되기 때문
독립적, 단일 스레드 / 통신 요청을 받기만 하기 때문
  1. 서버와 연결되면서 프로토콜이 적용된 소켓이 생성되고 요청된 선은 끊김
  1. 클라이언트의 Write 버터에 쿼리를 담아 요청
  1. ByteStream을 통해 서버의 Read 버퍼에 담김
  1. 서버에서 파싱해서 자기 오브젝트로 바꿈
  1. 메모리에서 캐싱(바로 찾음)해서 데이터를 찾음
있으면 서버의 Write 버퍼에 담겨서 클라이언트의 Read버퍼에 담김
  1. 없으면 미싱이라 하드 디스크에 있는 DBS에서 데이터를 찾음
데이터(테이블 형식)를 메모리에 로드함
서버의 Write 버퍼에 담겨서 클라이언트의 Read버퍼에 담김
 
파싱 : 구문 분석
자기 오브젝트로 바꾸는 것
💡
오브젝트로 바꿔서 자바 오브젝트에 넣어야 함
 

<램이 꽉 차있을 때>

  • 공간 확보 > 데이터 로드
가장 옛날에 사용한 것을 하드디스크에 기록
하드디스크에 이미 있으면 버림
💡
메모리에 데이터들은 자주 쓰는 데이터가 들어있음
 

<JDBC 사용>

  • JDBC로 연결 요청
> CRUD 쿼리를 날림
> 테이블 데이터로 전송됨
> 파싱 : 오브젝트로 변경
> 자바 오브젝트에 옮기기 : 스트링은 안됨 → 클래스로 받아야 함
결과를 받을 때 int로 받을 수 있음
💡
컬럼마다 데이터가 같으면 벡터로 받을 수 있음
다르면 다 담을 수 있게 클래스로 받아야함
 
Share article

vosw1