Search
🌷

#네트워크 통신과 DBMS

네트워크 통신과 DMBS 구조도

네트워크 통신과 DMBS의 기본 관계도
위 그림은 네트워크 통신과, 데이터베이스 관리 시스템 (DBMS) 그리고 서버 클라이언테 아키텍처를 좀 더 쉽게 이해하기위해서 만든 그림이다. 이런 개념이 코드작성 전에 탑재가 되어있어야 좀 더 원활하게 일하며 가독성이 높은 구조를 짤 수가 있다.
클라이언트 코드 예시
public class BankApp { public static void main(String[] args) { Connection conn = DBConnection.getInstance(); try { String insert = "insert into account_tb(password, balance, created_at) values(?,?,now())"; String delete = "delete from account_tb where number = ?"; String update = "update account_tb set balance = balance + ? where number = ?"; // 쿼리용 버퍼 PreparedStatement PreparedStatement pstmt = conn.prepareStatement(delete); pstmt.setInt(1,1); pstmt.executeUpdate(); int num = pstmt.executeUpdate(); System.out.println(num); } catch (Exception e) { throw new RuntimeException(e); } } }
Java
복사
서버 코드 예시
public class DBConnection { public static Connection getInstance() { String username = "root"; String password = "1234"; String url = "jdbc:mariadb://localhost:3306/cosdb"; // 프로토콜이 적용된 소켓 try { Connection conn = DriverManager.getConnection(url, username, password); System.out.println("db connect success"); return conn; } catch (Exception e) { throw new RuntimeException(e); } } }
Java
복사
DBMS 코드 예시
CREATE DATABASE cosdb; USE cosdb; CREATE TABLE account_tb( number int PRIMARY KEY auto_increment, password varchar(100) not null, balance int not null, created_at timestamp not null ) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4;
SQL
복사
이 단계 이전에 MariaDB Gradle을 적용해야된다. 아래 링크를 클릭하면 적용하는 방법이 있다.

클라이언트 요청 단계

클라이언트에서 DBMS와 연결하기 위해서는 몇가지 필수 절차가 있다.

클라이언트에서 서버 LISTENING 포트 연결 시도

클라이언트가 서버랑 연결을 시도할 때 필요한 것이 IP주소 , Port번호 , Protocol방식 이다. 서버와 통신을 할려면 무조건 알아야되는 정보라고 할 수 있다. 이를 위해서 URL을 사용한다. 자세히 살펴보면 우리가 익히들었던 URL이 우리에게 필요한 모든 정보를 담고 있다.
URL (Uniform Resources Location) 구성요소
// URL 구조 "jdbc:mariadb://localhost:3306/cosdb" //구성요소 ↓↓↓↓ "프로토콜//아이피주소:포트넘버/DB이름"
Java
복사
1.
스키마 (프로토콜) :
http : 하이퍼텍스트 프로토콜
https : 보안된 http 프로토콜
ftp : 파일 전송 프로토콜
jdbc:mariadb : MariaDB DBMS 프로토콜
2.
IP 주소 :
또는 도메인 이름
3.
포트번호 :
포트가 80이라면 생략된다. 기본포트이기 때문이다.

서버에서 연결 후 DB까지 접속할려면 ID, Passwords도 필요하다.

//DiverManger클래스를 통해 Url 과 인가를 받을 수 있는 ID와 비번을 함께 전달한다.// Connection conn = DriverManager.getConnection(url, username, password);
SQL
복사
Connection클래스를 통해서 클라이언트으로부터 요청된 내용을 바탕으로 통신을 위한 소켓이 Connection 클래스의 객체로 생성된다.
연결이 완료가 되면 클라이언트는 서버의 리스너 포트를 비워주고 새로 생성된 소켓과 연결 한다.

소켓 연결이 완료가 되면 스트림을 통한 정보교환이 시작된다.

그림안에 보이는 숫자 번호대로 정보가 요청되고 응답된다.
MariaDB에서 사용하는 버퍼스트림 클래스는 이름이 자바랑 틀리다.
// 쿼리용 버퍼스트림 PreparedStatement PreparedStatement 변수명 = 소켓명.prepareStatement(); // 클라이언트 측에서 버퍼Writing을 할때 쿼리 문법 -> int값을 리턴한다. PreparedStatement.executeUpdate();
SQL
복사
excuteUpdate() 메소드를 실행하면 MariaDB에서 표현되는 영향을 받은 행 : 정수 가 반환된다.
0을 반환하면 영향을 받은 행이 없다.
1을 반환하면 영향을 받은 행이 하나이다.
-1을 반환하면 정상적으로 처리가 되지 못했다는 뜻이다.
DBMS에서 자료들을 테이블로 보관하고 있기 때문에, 정보는 각 타입이 혼합된 테이블로 받는 일이 흔하다.
그러므로 대부분의 경우 클라이언트는 정보를 받기위한 객체, class를 준비해야 된다.
타입이 같다면 vector로 arrayList에 담아도 된다.
문자열로 받는다면 따로 파싱할 필요는 없다.
한 클라이언트 마다 한 소켓이 배정이 된다고 생각하면 된다.
즉, 3명의 클라이언트가 접속이 되었다면 서버는 4개의 스레드가 돌아가고 있다.
한개는 전체 스레드를 관리하는 메인스레드, 나머지 3개는 소켓용 스레드
클라이언트가 DBMS에 요청하는 쿼리는 주로 4가지가 있다.
SECECT : 데이터 조회
INSERT : 새로운 데이터 삽입
UPDATE : 기존 데이터를 수정한다.
내부적으로 찾아서 select
그다음 delete
그 다음 insert
UPDATE안에 이 세가지 행동이 묶어져 있다.
DELETE : 데이터를 삭제한다.
DBMS가 delete를 write한다는 개념이다.
즉, write라는 것은 변경한다는 뜻.
선생님이 전해주신 지혜들..
하드디스크랑 IO는 애플리 케이션이 아니다. 개발자는 그것만 알면된다.
DBMS는 각 잡고 공부해야 된다. 쿼리만 다뤄서는 알 수 없다.
테이블을 설계할 수 있는 능력이 있어야 된다.
인증을 통해서 문이 열리면 세션이 만들어 졌다고 표현한다.
세션이 만들어 졌다는 말은 연결이 되었다는 말이다.