- 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 : 실패
<요청시 알아야 할 것> : IP, 포트 번호, ID, PASSWORD, PROTOCOL
- IP, 포트 번호로 접근 가능함
- IP, 포트 번호 외에 추가로 인증된 사용자만 접근할 수 있게 해놓음
IP, 포트 번호 + id, password + 프로토콜 명
<오류 코드>
- Address Already in Use : 서버가 특정 포트를 이미 사용 중
이미 해당 포트를 사용되고 있거나, 이전에 사용한 소켓이 제대로 닫히지 않았을 때
- Connection Lost : 네트워크 연결이 끊어졌거나 통신이 중단되었을 때
- Connection Refused : 실행은 되나 인증이 안되서 거절하는 것
인증을 통해 id, password가 확인되면 세션이 만들짐 → 연결됨
접근의 제한이 없으면 요청 시 바로 세션이 만들어짐 → 연결됨
- Connection Lost : 네트워크 통신에서 클라이언트와 서버 간의 연결이 끊어진 상태
방화벽으로 막혀있음
<통신의 순서>
- 클라이언트가 IP, 포트 번호, ID, PASSWORD, PROTOCOL로 서버의 리스너 포트에 통신을 요청
데몬 / 리스너 포트는 계속 돌아가면서 요청을 확인해야 되기 때문
독립적, 단일 스레드 / 통신 요청을 받기만 하기 때문
- 서버와 연결되면서 프로토콜이 적용된 소켓이 생성되고 요청된 선은 끊김
- 클라이언트의 Write 버터에 쿼리를 담아 요청
- ByteStream을 통해 서버의 Read 버퍼에 담김
- 서버에서 파싱해서 자기 오브젝트로 바꿈
- 메모리에서 캐싱(바로 찾음)해서 데이터를 찾음
있으면 서버의 Write 버퍼에 담겨서 클라이언트의 Read버퍼에 담김
- 없으면 미싱이라 하드 디스크에 있는 DBS에서 데이터를 찾음
데이터(테이블 형식)를 메모리에 로드함
서버의 Write 버퍼에 담겨서 클라이언트의 Read버퍼에 담김
파싱 : 구문 분석
자기 오브젝트로 바꾸는 것
오브젝트로 바꿔서 자바 오브젝트에 넣어야 함
<램이 꽉 차있을 때>
- 공간 확보 > 데이터 로드
가장 옛날에 사용한 것을 하드디스크에 기록
하드디스크에 이미 있으면 버림
메모리에 데이터들은 자주 쓰는 데이터가 들어있음
<JDBC 사용>
- JDBC로 연결 요청
> CRUD 쿼리를 날림
> 테이블 데이터로 전송됨
> 파싱 : 오브젝트로 변경
> 자바 오브젝트에 옮기기 : 스트링은 안됨 → 클래스로 받아야 함
결과를 받을 때 int로 받을 수 있음
컬럼마다 데이터가 같으면 벡터로 받을 수 있음
다르면 다 담을 수 있게 클래스로 받아야함
Share article